c - 在多个文件中重用 C 宏

标签 c macros c-preprocessor header-files

我有一些常用的宏,几乎在我编写的每个 C 文件中都普遍需要。目前我正在将它们复制到我需要它们的每个文件中。这可能是个坏主意,因为我最终将需要更改其中一个,然后我最终会在文件之间定义不一致的宏。

有没有办法为宏创建一个头文件?我试图制作一个包含我所有宏的 header 并将其包含在内,但我仍然收到编译器警告。

更新: 我收到的具体警告是函数的隐式声明,例如第二个示例中的 V4。

一个例子:

文件1.c:

#define COMMON_NUMBER 1

文件2.c:

#define COMMON_NUMBER 1

//...

文件N.c:

#define COMMON_NUMBER 1

//Oh wait, it should have been 2 all along..... *facepalm*

一个更好的例子:

文件1.c:

#include "usefulmacros.h"

char* prog;
int optv;

int main(){
  prog = strdup(argv[0]);    
  optv = 4;           // This would be parsed from # of "-v" in argv[]
  return 0;
}

void functionA(){
  int dumberror = 1;
  V4("This is a fairly verbose error: %d",dumberror);
}

文件2.c:

#include "usefulmacros.h"
extern char* prog;
extern int   optv;

void functionB(){
  int differror = 2;
  V4("This is a different error: %d",differror);
}

有用的macros.h:

#ifndef USEFULMACROS
#define V4(str, ...) if(optv >= 4){printf("%s: "str,prog,__VA_ARGS__);}
#endif

最佳答案

#ifndef COMMON_INCLUDE_FILE
#define COMMON_INCLUDE_FILE

#define COMMON_NUMBER 1
#define OTHER_COMMON 2

#endif

在 C 中,宏比 C++ 更普遍一些,在 C++ 中,您希望使用静态全局变量来执行宏,上述机制相当普遍。你在文件的主体周围放置了包含守卫,并在那里定义了你的公地。这本质上就是 config.h 最终成为 autoconf 的东西。所以没有人可以说这不是标准机制用于 C 代码。

只需在任何需要它的文件中包含 common.h,完成交易。

关于c - 在多个文件中重用 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9573474/

相关文章:

msbuild - 在 msbuild (12.0) 命令行属性分配上引用宏

c++ - 如何打印#define 语句?

c++ - 在类定义的开头这个宏是做什么用的?

android - 在标准 Android 应用程序中包装 C 命令行可执行文件

编译器检查以确保我在裸机而不是托管环境中运行

c - 使用 shmctl() 销毁共享内存段 (Linux)

c++ - 递增预处理器宏

c - CodeBlock 中的结构大小错误

c - 有没有办法定义包含预处理器指令的预处理器宏?

c++ - 调用另一个 : MSVC issue? 的预处理器宏