C/C++语言中#define预定义使用到的 井号(#)和双井号(##)的作用
在C语言中,为了使代码模板化,可复用,一般会经常使用到 #define 作为预定义。在工程中虽然会增加代码阅读难度,但是会使后期维护和功能增加提供方便,在许多使用C语言编写的操作系统源码中经常会看到它们的身影。
“#”的字符串化操作(Stringfication)
使用“#”可以将预定义中的内容变为字符串
例如:
#define ERROR(string) \
printf("[ERROR]%s\n",#string)
ERROR(Return value error);
// 如果不加#,调用时需要输入字符串
#define ERROR(string) \
printf("[ERROR]%s\n",string)
ERROR(“Return value error”);
“##”的连接操作(concatenator)
使用“##”可以将预定义的内容进行拼接
例如:
#define ERROR(string) \
printf("[%d ERROR]%s\n",string##_num++,#string)
// 例如现在有一个栈溢出的错误
ERROR(stack_overflow)
// 在预编译结束后会翻译成
printf("[%d ERROR]%s\n",stack_overflow_num++,"stack_overflow")