问题描述
这是问题所在: 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。另外,我以这个例子为例,因为我在工作中遇到了这个问题,因此无法发布直接代码。
感谢您的帮助,
解决方法
请勿在 .h
文件中定义任何对象或函数,而应在 .c
中定义它们strong> 文件。在 .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