C 中的外部宏和多重定义符号

Externing macros and multiply defined symbol in C

问题来了: file1.h有以下相关内容:

int var1;
int var2;
#define MACRO1 0x01
#define MACRO2 0x10
#define MACRO3 0x11

file1.c内容:

#include "file1.h"
...
...

现在我有另一个 file2.c,我想在其中使用 file1.h 中定义的宏和变量。 我不能在 file2.c 编译中 #include file1.h 因为 file.h 中还有 100 个其他变量 - 所以我 运行 进入“多重定义符号”的问题。

所以对于file1.h中的变量,我在file2.h中将它们声明为externs。 这会处理变量。 但是我如何使用宏而不在 file2.h 中复制它们?

宏还有其他方法吗?外部变量也是正确的方法吗? 仅供参考:我不想不必要地修改 file1.h 或 file1.c。另外,我将此作为示例说明,因为我 运行 在工作中遇到这个问题,因此不能 post 直接代码。

感谢任何帮助,

不要在 .h 文件中定义任何对象或函数,在 中定义它们.c 个文件。在 .h 文件中只需添加 extern 声明。

a.h

#ifndef A_H_FILE
#define A_H_FILE

#define MACRO1 0x01
#define MACRO2 0x10
#define MACRO3 0x11
extern int var1;
extern int var2;

#endif

a.c

#include "a.h"

int var1;
int var2;

变量将只定义一次,但通过包含a.h,它们对其他编译单元可见文件

为避免宏重新定义,请确保它们的名称不同。否则你将不知道哪个是正确的。为防止出现警告,您可以


#ifdef MACRO1
#undef MACRO1
#endif
#define MACRO1 45654