在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。另外,我以这个例子为例,因为我在工作中遇到了这个问题,因此无法发布直接代码。

感谢您的帮助,

解决方法

请勿在 .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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...