【发布时间】:2018-08-28 22:02:26
【问题描述】:
在a.h我有
#ifndef A_H
#define A_H 1
const int global_val = 10;
#endif
在a.c 我有
#include "a.h"
int someFunc() {
return global_val;
}
但编译器 (gcc) 在编译 a.c 时会抛出 error: 'global_int' undeclared。包含头文件怎么可能不声明呢?
【问题讨论】:
-
是不是因为你声明了
global_val并引用了global_int? -
睡一会我的朋友。
-
对不起,我在输入简化代码时出错了。我刚刚检查了我的实际代码,没有这样的错别字。我已经编辑了原始帖子。
-
永远不要在头文件中定义变量!标头 onyl 应该只有变量 declarations,而不是定义。
-
请注意,程序中只有一个源文件可以成功包含您的头文件,因为每次包含头文件时,它都会定义全局变量。如果多个文件包含标题,那么当您尝试将它们链接在一起时将会有多个定义。游戏规则在 C++ 中有所不同——但您将其标记为 C 而不是 C++。如果您觉得必须在标头中执行此操作,请将其设为
static const int global_val = 10;,但如果您包含标头但不引用变量,则期望编译器会收到“未使用的变量”警告。所以,不要这样做!
标签: c global-variables header-files