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
问题来了: 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