在C中声明和分配带有文件范围的变量

lor*_*age 0 c initialization variable-declaration

假设我声明了以下变量:

int num;
num = 0;

int main(void)
{
        /* ... */
        exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨num未声明,并且默认输入int.当我一步到位时,这不会发生:

int num = 0;
Run Code Online (Sandbox Code Playgroud)

或者如果我将作业转移到main():

int main(void)
{
        num = 0;
        /* ... */
        exit(EXIT_SUCCESS);
}    
Run Code Online (Sandbox Code Playgroud)

我曾经读过这种行为的解释,但我再也找不到了.有人可以再次更新我.

我正在编译

gcc -std=c11 -O2 -g -pedantic -Wall -c -fmessage-length=0 -v
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

num = 0;是一个只能存在于函数内的语句.它不可能存在于全球范围内.

如果你在函数外面放一个语句,那就错了,不允许.简单地认为,如果你在所有函数之外有一个语句,在全局范围内,何时以及如何执行该语句?所以,那是错的.

一个特殊情况,定义时的初始化是允许的形式 int num = 0;