c - 使用 #ifndef 保护 .h 变量不会停止多个定义。怎么修?
问题描述
我正在尝试使用保护变量保护.h(例如:checkpgm.h)文件的标准方法,如下所示
#ifndef _CHECKPGM
#warning CHECKPGM value is 0
#define _CHECKPGM 1
char a;
#endif
此代码包含在两个文件 checkmain.c 和 checksub.c 中
当这两个文件链接时,我收到错误消息
Building target: checkpgm
Invoking: GCC C Linker
gcc -o "checkpgm" ./src/checkmain.o ./src/checksub.o
/usr/bin/ld: ./src/checksub.o:/home/nagesh/eclipse-workspace/multi/checkpgm/Debug/../src/checkpgm.h:18: multiple definition of `a'; ./src/checkmain.o:/home/nagesh/eclipse-workspace/multi/checkpgm/Debug/../src/checkpgm.h:18: first defined here
尽管有守卫,但我无法理解这是如何发生的。
我试过了
- 将 #define _CHKPGM 更改为 #define _CHKPGM 1(显式赋值)
- 同样,#if _CHKPGM == 0
- 用#if 定义检查
- 添加带有 -D 标志的 _CHECKPGM(未定义)
- 不知何故标准库没有这个问题(stdio.h,stdlib.h);所以复制了他们的风格_BEGIN_DECLS...
- 通过警告消息,很明显 _CHECKPGM 在其第一次包含中被分配。但是,当开始编译第二个程序时,该值将丢失,因此防护失败。但无法弄清楚为什么?
各位大侠能帮帮我们吗?
提前感谢...
拉维
checkpgm.h 包含在