衆所周知宏定義是在編譯器預處理階段進行的文法替換,發生在編譯之前。
“##”是一個連接配接符号,用于把參數連在一起
“#”是“字元串化”的意思。出現在宏定義中的”#”是把跟在後面的參數轉換成一個字元串
int v5 = ;
#define f(n) printf("v "#n" = %d\n", v##n)
f(); //輸出:v 5 = 5
//define.c
#include <stdio.h>
#define FUNC_STOP stop
int player_stop()
{
return ;
}
int player_start()
{
return ;
}
int player_resume()
{
return ;
}
int player_play_1x()
{
return ;
}
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 ;
}