c语言宏定义中的#和##

来源:互联网 发布:新开淘宝店怎么找货源 编辑:程序博客网 时间:2024/04/29 04:45

众所周知宏定义是在编译器预处理阶段进行的语法替换,发生在编译之前。

“##”是一个连接符号,用于把参数连在一起
“#”是“字符串化”的意思。出现在宏定义中的”#”是把跟在后面的参数转换成一个字符串

int v5 = 5;#define f(n) printf("v "#n" = %d\n", v##n)f(5); //输出:v 5 = 5
//define.c#include <stdio.h>#define FUNC_STOP stopint player_stop(){    return 0;}int player_start(){    return 2;}int player_resume(){    return 3;}int player_play_1x(){    return 4;}typedef struct{    int (*stop)();    int (*start)();    int (*resume)();    int (*play_1x)();}PLAYER;int main(){    PLAYER player;#define SET(x) \    printf("set %s\n", #x); \    player.x = player_##x#define SSET(x) \    SET(x)    //SET(stop);    /*注意下面这行语句*/    SSET(FUNC_STOP);    SET(start);    SET(resume);    SET(play_1x);    printf("%d %d %d %d\n", player.stop(),     player.start(), player.resume(), player.play_1x());     return 0;}
0 0
原创粉丝点击