只是好奇,如果我int array[0];在代码中定义零长度数组会发生什么?海湾合作委员会根本没有抱怨.
示例程序
#include <stdio.h>
int main() {
int arr[0];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
澄清
我实际上是在试图弄清楚零长度数组是否以这种方式初始化,而不是像Darhazer的注释中那样指向可变长度,是否优化了.
这是因为我必须释放一些代码,所以我想弄清楚我是否必须处理SIZE定义为的情况0,这在一些静态定义的代码中会发生int array[SIZE];
我真的很惊讶海湾合作委员会没有抱怨,这导致了我的问题.根据我收到的答案,我认为缺少警告主要是因为支持未使用新[]语法更新的旧代码.
因为我主要是想知道这个错误,所以我将Lundin的答案标记为正确(Nawaz是第一个,但它并不完整) - 其他人指出它实际用于尾部填充结构,虽然相关,但不是正是我想要的.
本质上,我想这样做:
#include "foo.h"
#include "bar.h"
static const unsigned line_after_includes = __LINE__;
int main()
{
foo(line_after_includes);
bar(line_after_includes);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
除了这样:
#include "foo.h"
#include "bar.h"
#define LINE_AFTER_INCLUDES __LINE__
int main()
{
FOO(LINE_AFTER_INCLUDES);
BAR(LINE_AFTER_INCLUDES);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否可以扩展为定义的行上LINE_AFTER_INCLUDES的值,以便稍后我可以将其与其他宏一起使用?我只想使用第一个代码片段中的变量,但我需要该值作为整数文字,因为我将在 switch 语句中使用它。另一种选择是做__LINE__LINE_AFTER_INCLUDES
#define LINE_AFTER_INCLUDES 3 // MAKE SURE THIS IS ON LINE IT'S DEFINED AS!!!
Run Code Online (Sandbox Code Playgroud)
这是丑陋且难以维护的。我会满足于此,但我会做一些比这个例子更复杂的事情......