我有一些常用的宏,几乎在我编写的每个 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/