本文介绍了我会得到什么,如果我声明数组没有在全球范围的大小?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在打高尔夫,我看到这个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".

这篇关于我会得到什么,如果我声明数组没有在全球范围的大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 17:21
查看更多