【发布时间】:2011-09-16 18:06:15
【问题描述】:
我正在开发一个嵌入式 c 项目,但遇到了全局变量重新定义的问题。
我已将函数声明和定义拆分为几个 .h 和 .c 文件。其中许多函数需要访问 global_vars.h 中定义的全局变量。因此,在头文件的开头,#ifndef,#define 部分,“global_vars.h”。如果我不这样做,您可能会想像我得到一堆未定义的变量错误。
但是,即使 global_vars.h 具有 #ifndef _GLOBAL_VARS_H_ #define...#endif,我也会收到所有全局变量的重新定义错误。我的猜测是,当链接器尝试链接各种目标文件时,由于所有“blah_blah.h”文件中的#include“global_vars.h”,它会看到重新定义。不过,我的理解是,#ifndef... 会处理这个问题。
有什么我忽略的吗?
提前致谢
【问题讨论】:
-
需要在header中声明变量,并且只在一个源文件中定义。
-
您的
global_vars.h文件应该将所有变量声明为extern,然后在单独的模块中实际定义它们。我猜你不会这样做? -
你是对的。我试试这个,谢谢
-
作为旁注,如果您的项目中有一个“全局”文件,并且在文件范围内声明了非常量全局变量,则通常表明整个程序设计存在根本性错误。
标签: c header embedded redefinition