我在理解printf()語句中使用宏函數調用時遇到了一個問題。來自printf語句中的宏函數調用C
我有下面的代碼:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",f(100,10));
}
這段代碼輸出 「10010」 作爲答案。
我已經瞭解到,宏函數調用只需複製粘貼宏函數代碼來代替調用替換的參數。
因此,代碼應該是這樣的:
#include<stdio.h>
#define f(g,h) g##h
main()
{
printf("%d",100##10);
}
但是,當我與取代的宏單獨執行上面的代碼,得到了一個編譯錯誤。
那麼第一個代碼如何給出10010作爲答案,而第二個代碼給出了編譯錯誤?
##只在你的#define語句內有效,除非行以'#define [你的東西在這裏]開始,否則'沒有效果',因爲'#define'指示編譯器處理那部分代碼特別。 – ActiveTrayPrntrTagDataStrDrvr
###確保參數連接在一起。因此:f(100,10)被預處理器替換爲:10010 – Tomas