首页 > 解决方案 > 使用 #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

尽管有守卫,但我无法理解这是如何发生的。

我试过了

  1. 将 #define _CHKPGM 更改为 #define _CHKPGM 1(显式赋值)
  2. 同样,#if _CHKPGM == 0
  3. 用#if 定义检查
  4. 添加带有 -D 标志的 _CHECKPGM(未定义)
  5. 不知何故标准库没有这个问题(stdio.h,stdlib.h);所以复制了他们的风格_BEGIN_DECLS...
  6. 通过警告消息,很明显 _CHECKPGM 在其第一次包含中被分配。但是,当开始编译第二个程序时,该值将丢失,因此防护失败。但无法弄清楚为什么?

各位大侠能帮帮我们吗?

提前感谢...

拉维

checkpgm.h 包含在

标签: c

解决方案


推荐阅读