【发布时间】:2016-08-03 20:00:46
【问题描述】:
编写一个日志系统,我只想在一个模块中存储和修改一个数组(我们称之为 foo.c,带有一个适当命名的头文件 foo.h),同时能够访问它在 main 中的内容。 C。在 foo.c 我有:
unsigned char log[4096] = {0};
而main.c如下:
#include "foo.h"
int main(){
extern unsigned char log[4096];
// code
return 0
}
产生错误:
错误:“日志”重新声明为不同类型的符号
我这样做对吗?我尝试将外部日志声明为“log[]”和“log”,但这些也无济于事。对这个问题有一点启发会有所帮助。谢谢!
【问题讨论】:
-
请注意,您应该在定义变量的文件和使用它的文件中使用头文件中的声明(
foo.h用于标头;foo.c用于 where它被定义,main.c用于它的使用位置)。这为您提供了必要的交叉检查。你不应该在普通的 C 源文件中写extern;它应该只出现在标题中。任何你觉得需要写extern的地方都意味着你没有使用你应该使用的标题,或者标题不完整。两者都会导致长期维护问题。 -
我不会在标题中声明变量。在每个包含头文件的 c 文件中,编译器将分配该变量。我在 oldwr 项目中遇到了一个非常讨厌的错误,因为开发人员在头文件中声明了一个全局变量,并且头文件在两个不同的 c 文件中使用。
标签: c arrays declaration extern