有没有比C代码更短的方法来计算数组的长度?
ANSI 99有快捷方式吗?我认为没有快捷方式,但您可以使用宏:有没有比C代码更短的方法来计算数组的长度?,c,code-analysis,compression,C,Code Analysis,Compression,ANSI 99有快捷方式吗?我认为没有快捷方式,但您可以使用宏: static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11}; int len=sizeof(a)/sizeof(int); 有没有比C代码更短的方法来计算数组的长度 是,短一个字符: #define arrlen(arr) (sizeof(arr)/sizeof(arr[0])) 编辑:有一个@pmg建议的更短版本: static int a[] = {1,
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof(a)/sizeof(int);
有没有比C代码更短的方法来计算数组的长度
是,短一个字符:
#define arrlen(arr) (sizeof(arr)/sizeof(arr[0]))
编辑:有一个@pmg建议的更短版本:
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof(int);
您还可以为标识符len
使用更少的字符
:)如果需要数组中的元素数
static int a[] = {1, 5, 645, 43, 4, 65, 5408, 4, 7, 90, 23, 11};
int len=sizeof a/sizeof*a;
或
都很短了。请记住,除非arr
是一个VLA,否则它们将在编译时计算
还请记住,这仅在arr
是数组表达式而不是指针时有效。如果你这样做
sizeof arr / sizeof arr[0]
您不会得到您期望的答案,因为在此上下文中,
arr
是一个指针表达式,而不是数组(请参阅联机,§6.3.2.1¨3和§6.5.7.3¨7) 好问题。我似乎在C-no中(除了VLAs)sizeof arr/sizeof*arr
是一个编译时常量。你为什么想要一种不同的方式?试试宏为什么不大小\u t
?你希望有一天会有负面的len
?:)@pmg:不,肯定是希望在64位系统上激发UB。对于一个非常大的数组,UB意味着意外的行为?+1,但我可能会将其全部大写,以表明它是一个宏。呵呵:sizeof a/sizeof*a
:比您的版本少3个字符。
sizeof arr / sizeof arr[0]
void foo(int arr[])
{
size_t len = sizeof arr / sizeof *arr;
...
}