有没有比C代码更短的方法来计算数组的长度?

有没有比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,

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, 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;
   ...
}