您好,登錄后才能下訂單哦!
/*
#是把宏參數變為一個字符串,##是把兩個宏參數連接在一起。
*/
#include <stdio.h>
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
int main()
{
f(1, 2);//宏展開: 12;
g(3); //宏展開: "3"
/*
展開宏函數的規則:
在展開當前宏函數時,如果形參有#或##則不進行宏參數的展開,
否則先展開宏參數,再展開當前宏。
*/
printf("%s\n", h(f(1, 2)));//12
printf("%s\n", g(f(1, 2)));//f(1,2) ,不進行宏參數的展開
system("pause");
return 0;
}
綜合以上:
第一行h(f(1,2)),由于h(a)非#或者##所以先展開其參數f(1,2),即12,所以變成h(12),然后再宏替換為g(12),再次替換為12。
第二行g(f(1,2)),宏g(a)帶有#,所以里面的f(1,2)不展開,所以變成f(1,2)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。