我有几个常用的宏,这些宏在我写的每个C文件中都是普遍需要的。目前我正在将它们复制到每个需要它们的文件中。这可能是一个糟糕的主意,因为我最终需要更改其中一个文件,然后最终导致文件之间不一致的宏。在几个文件中重用C宏
有没有一种方法可以为宏创建一个头文件?我试图制作一个包含所有宏的头文件,但仍然收到编译器警告。
更新: 我得到的具体警告是函数的隐式声明,如第二个示例中的V4。
一个例子:
//file1.c
#define COMMON_NUMBER 1
//file2.c
#define COMMON_NUMBER 1
//...
//fileN.c
#define COMMON_NUMBER 1
//Oh wait, it should have been 2 all along..... *facepalm*
一个更好的例子:
//file1.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);
}
//file2.c
#include "usefulemacros.h"
extern char* prog;
extern int optv;
void functionB(){
int differror = 2;
V4("This is a different error: %d",differror);
}
//usefulmacros.h
#ifndef USEFULMACROS
#define V4(str, ...) if(optv >= 4){printf("%s: "str,prog,__VA_ARGS__);}
#endif
你在这里谈论什么样的警告?我们猜猜看? – 2012-03-05 20:30:06
如果您还没有听说过,那么宏是最好的工具的作业非常少,而且它们可能会导致很多问题。例如,这个'COMMON_NUMBER'可能是一个'const'全局变量(或更好)。 – Beta 2012-03-05 20:32:53
@JeffMercado:我用一个更好的例子更新了我的问题,这个例子更具体地说明了发生了什么。 – Huckle 2012-03-05 21:13:08