c - 在 C 中声明和分配具有文件作用域的变量

标签 c initialization variable-declaration

假设我声明了以下变量:

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;

的形式在定义时进行初始化

关于c - 在 C 中声明和分配具有文件作用域的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232601/

相关文章:

c - pcap_set_filter() 可以与 pcap_open_offline() 一起使用吗?

c++ - 为什么 C++11 允许二次初始化

javascript - 如果同名的 'let' 被使用两次(在 for 循环中),Babel 会重新声明函数参数

c - 当我在 for 循环之外声明变量时,为什么我的代码不起作用?

c - c中的全局变量声明

c - 用作计数器的整数值的意外输出

c - 使文件/命令/可执行文件受密码保护

c - 什么是异或和?

c++ - 使用大括号初始值设定项的默认参数

java - 通过声明初始化类 DS 字段 - 在构造函数调用之前还是之后?