Huc*_*kle 5 c macros c-preprocessor
我有几个常用的宏,几乎每个我写的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*
Run Code Online (Sandbox Code Playgroud)
一个更好的例子:
//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
Run Code Online (Sandbox Code Playgroud)
#ifndef COMMON_INCLUDE_FILE
#define COMMON_INCLUDE_FILE
#define COMMON_NUMBER 1
#define OTHER_COMMON 2
#endif
Run Code Online (Sandbox Code Playgroud)
在C中,宏比C++更普遍,你想要用静态全局做它,上面的机制是相当常见的.你在文件的主体周围放置了包含保护,并在那里定义你的公共..这本质上是config.h最终与autoconf.所以没有人可以说这不是C代码的标准机制.
只需在任何需要它的文件中包含common.h,就完成交易.