本文介绍了我会得到什么,如果我声明数组没有在全球范围的大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在打高尔夫,我看到这个code(ungolfed版):
S [],T;主(三){
对于(scanf函数(%* D);〜(C =的getchar()); S [T +] = C)
的putchar(S [T]);
}
我认为上面的程序表现出UB(但谁在code高尔夫在乎呢?)。但我不明白的事情是 S []
在全球范围内。我知道,当未指定全局变量的类型,默认为 INT
。我创建了一个小程序,它令人惊讶的编译:
的#include<&stdio.h中GT;的int [];
INT主要(无效)
{
的printf(你好!);
}
虽然它会发出警告:
prog.c中:23:5:警告:数组的'假设有一个元素[默认启用]
的int [];
^
- 什么是
取值
在上面的程序?它是一个为int *
或其他什么东西? - 这会不会是有用的地方?
解决方案
s
is an incomplete type. That's why you cannot sizeof
it. As @BLUEPIXY suggests, it's initialized with zero because it's declared in global scope making a "tentative definition".
Now,
It's pretty useless if you're just using s[0]
because at that point you go for s;
directly. But, if you need an array with a certain size and you don't care about UBs, it's "okay".
这篇关于我会得到什么,如果我声明数组没有在全球范围的大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!