Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 为什么赢了';是否编译未初始化的全局常量?_Gcc_G++_Global Variables - Fatal编程技术网

Gcc 为什么赢了';是否编译未初始化的全局常量?

Gcc 为什么赢了';是否编译未初始化的全局常量?,gcc,g++,global-variables,Gcc,G++,Global Variables,当我尝试用g++编译以下代码时: const int zero; int main() { return 0; } 我得到一个关于未初始化常量'zero'的错误。我认为全局变量默认初始化为0[1]?为什么这里不是这样? VS编译这篇文章 [1] 例如,请参见我的gcc稍微详细一些: $ g++ zeroconst.c zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive] 我们看到,-fppermissive

当我尝试用g++编译以下代码时:

const int zero;

int main()
{
  return 0;
}
我得到一个关于
未初始化常量'zero'
的错误。我认为全局变量默认初始化为0[1]?为什么这里不是这样?
VS编译这篇文章


[1] 例如,请参见

我的gcc稍微详细一些:

$ g++ zeroconst.c
zeroconst.c:1:11: error: uninitialized const ‘zero’ [-fpermissive]
我们看到,
-fppermissive
选项将允许编译此文件

参见参考C++标准(问题是C++特定)。 引用于:

<>按C++标准(8.5)[C.I.IIT ],C++ 9中的PARA 9 C++0x)中的第6段),G++不允许常量限定类型的对象 初始化为默认值,除非该类型具有用户声明的默认值 构造器。无法编译的代码可以通过提供 初始化器


G++要求在定义期间初始化常量

是的,但这并不能解释为什么在默认配置下它甚至是一个错误。这似乎完全合法,因为全局变量已初始化@baruch添加了一个问题的链接,答案引用了
C++
标准(从C开始,它是有效的,并且可以编译),我刚刚意识到
gcc
确实可以编译它。这是
g++
没有的。为什么呢?关于全局变量的规则是否被初始化为0而不是C++标准的一部分?比C++中的随机事物编译和其他随机的事情都没有。我认为,即使是对该标准的引用,也不能说明为什么它应该被禁止。