在one of the answers的Tips for golfing in C中,我看到了此代码(ungolfed版本):
borderView.backgroundColor = UIColor(rgba: "#e6e6e6")
我认为上述节目展示的是UB(但谁在关注代码高尔夫?)。但我不明白的是全球范围内的s[],t;
main(c){
for(scanf("%*d "); ~(c=getchar()); s[t++]=c)
putchar(s[t]);
}
。我知道,当未指定全局变量的类型时,它默认为s[]
。我创建了一个令人惊讶地编译的小程序:
int
虽然它会发出一个警告:
#include <stdio.h>
int s[];
int main(void)
{
printf("Hello!");
}
prog.c:23:5: warning: array 's' assumed to have one element [enabled by default]
int s[];
^
是什么?它是s
还是别的什么?答案 0 :(得分:1)
上述计划中的
s
是什么?是int *还是别的什么?
s
是一种不完整的类型。这就是为什么你不能sizeof
它。正如@BLUEPIXY建议的那样,它初始化为零,因为它在全局范围内声明为“暂定”。
int i[];
数组我仍然有不完整的类型,隐式初始化器使它有一个元素,设置为 程序启动时为零。
现在,
这在任何地方都有用吗?
如果您只是使用s[0]
,那将毫无用处,因为此时您直接使用s;
。但是,如果你需要一个具有一定大小的阵列并且你不关心UB,那就“好吧”。