如果我在全局范围内声明一个没有大小的数组,我会得到什么?

时间:2015-05-24 14:17:12

标签: c arrays int global-variables

one of the answersTips 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还是别的什么?
  • 这在任何地方都有用吗?

1 个答案:

答案 0 :(得分:1)

  

上述计划中的s是什么?是int *还是别的什么?

s是一种不完整的类型。这就是为什么你不能sizeof它。正如@BLUEPIXY建议的那样,它初始化为零,因为它在全局范围内声明为“暂定”。

  

int i[];
  数组我仍然有不完整的类型,隐式初始化器使它有一个元素,设置为   程序启动时为零。

现在,

  

这在任何地方都有用吗?

如果您只是使用s[0],那将毫无用处,因为此时您直接使用s;。但是,如果你需要一个具有一定大小的阵列并且你不关心UB,那就“好吧”。