c语言宏定义之#

在宏定义中,#的作用是将目标字符串化,这里有注意点如下:

宏定义函数的参数与预处理标记 ‘#’ 之间出现的每一个空格都会被删除,并删除第一个预处理标记之前和最后一个预处理标记之后的空白字符,但是宏定义函数参数中的空格会保留。

举个例子:

#define MAKE_STR(s) ("123" #  s  "456\n")
int main(void)
{
 
    printf(MAKE_STR(hello world));

    return 0;

}

结果为123hello world456

看看预处理的结果

gcc -E define.c
# 1 "define.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "define.c"


int main(void)
{
    printf(("123" "hello world" "456\n"));
    return 0;
}

预处理前后看上去只有一个空格了,事实上编译完成后都没有了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容