有的时候需要创建打开一个指定目录下的多个文件,各个文件名都有共同的路径前缀,用宏定义,来实现给 字符串添加固定的前缀:
#include<stdio.h>
#define LOG_PATH "/work/temp/"
#define LOG_FILE(x) LOG_PATH x
int main()
{
printf("%s\n",LOG_FILE("log1"));
return 0;
}
输出结果:
#./a.out
/work/temp/log1
同样,添加尾巴或者是将其塞入到某一串中间,只需要修改 宏 LOG_FILE(x) 的定义即可。
惭愧,如此简单,想了好久,愣是把 宏定义中的 # ## 二次定义等等折腾老半天,最后连宏定义函数+sprintf都用上了。原来如此。(对于## #传入字符串作为实参,编译都通不过的。)
原理: 在ANSI C中引入的新特性:""包含的字符串,在没有任何可见字符(不包括空格,换行,tab)分隔,写在一起的时候 将在编译时自动合并成一个字符串处理。
#include<stdio.h>
#define A "a123"
#define B "b456"
int main()
{
printf("%s\n", A B);
printf(A B"\n");
return 0;
}
==》输出:
a123b456
a123b456