什么是sizeof()变长数组?

时间:2015-11-18 17:01:21

标签: c sizeof

在最近的一篇文章中,我看到了:

scanf("%d" , &TASK_NO);
struct task_info tasks[TASK_NO];
printf("total: %d\n", sizeof(tasks)/sizeof(tasks[0]));
带有注释的

:“sizeof()在编译时进行评估,而不是运行时,因此不会给出正确的总数。”

在C语言的所有历史中,sizeof在编译时被评估,并且可以被赋予一个声明的数组(声明的数组类似int a[10];sizeof(a)给出10次int的大小。使用C99,可以提供在运行时自动变量的数组大小。这是否意味着必须在运行时评估声明的自动数组sizeof的{​​{1}}?即,有tasks[TASK_NO]成为有时在运行时评估的东西吗?如果没有,是否将sizeof用于VLA定义为错误(因此编译器会发出警告/错误消息,因为您要求已知在编译时无法判断时间)?

0 个答案:

没有答案