在 C 中声明和分配具有文件作用域的变量
Declaring and assigning variables with file scope in C
假设我声明了以下变量:
int num;
num = 0;
int main(void)
{
/* ... */
exit(EXIT_SUCCESS);
}
编译器会抱怨 num
未声明,默认类型为 int
。当我一步完成所有操作时,不会发生这种情况:
int num = 0;
或者如果我将作业移至 main()
:
int main(void)
{
num = 0;
/* ... */
exit(EXIT_SUCCESS);
}
我曾经读过有关此行为的解释,但我再也找不到了。谁能再给我更新一下。
我正在编译
gcc -std=c11 -O2 -g -pedantic -Wall -c -fmessage-length=0 -v
num = 0;
是一个只能存在于函数内部的语句。它不能存在于全局范围内。
如果将语句放在函数之外,这是错误的,也是不允许的。简单地这样想,如果你在所有函数之外,在全局范围内有一条语句,那么何时以及如何执行该语句?所以,这是错误的。
特殊情况,定义时初始化允许以int num = 0;
的形式
假设我声明了以下变量:
int num;
num = 0;
int main(void)
{
/* ... */
exit(EXIT_SUCCESS);
}
编译器会抱怨 num
未声明,默认类型为 int
。当我一步完成所有操作时,不会发生这种情况:
int num = 0;
或者如果我将作业移至 main()
:
int main(void)
{
num = 0;
/* ... */
exit(EXIT_SUCCESS);
}
我曾经读过有关此行为的解释,但我再也找不到了。谁能再给我更新一下。
我正在编译
gcc -std=c11 -O2 -g -pedantic -Wall -c -fmessage-length=0 -v
num = 0;
是一个只能存在于函数内部的语句。它不能存在于全局范围内。
如果将语句放在函数之外,这是错误的,也是不允许的。简单地这样想,如果你在所有函数之外,在全局范围内有一条语句,那么何时以及如何执行该语句?所以,这是错误的。
特殊情况,定义时初始化允许以int num = 0;