我想知道此代碼輸出背後的原因。我無法想出答案。C預處理器:字符串宏和標識宏
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
void main()
{
printf("%s %s",h(f(1,2)),g(f(1,2)));
}
PS:輸出是12 f(1,2)
。我以爲這是12 12
或f(1,2) f(1,2)
。
我想知道此代碼輸出背後的原因。我無法想出答案。C預處理器:字符串宏和標識宏
#define f(a,b) a##b
#define g(a) #a
#define h(a) g(a)
void main()
{
printf("%s %s",h(f(1,2)),g(f(1,2)));
}
PS:輸出是12 f(1,2)
。我以爲這是12 12
或f(1,2) f(1,2)
。
h(f(1,2))
f(1,2)
被替換爲a
。 a
不是#
或##
運營商的主題,因此它已擴展到12
。現在你有g(12)
,它擴大到"12"
。
g(f(1,2))
f(1,2)
代替a
。應用於a
的#
運算符可防止宏擴展,因此結果字面上爲"f(1,2)"
。
哦......好的謝謝......我沒有專注於#運營商的運作 – Dhatri 2012-07-23 10:07:50
@vindhya這一切都是一個血腥的混亂。 – Potatoswatter 2012-07-23 10:08:34
只是爲了學習預處理器的工作... – Dhatri 2012-07-23 09:50:54
@cnicutar我認爲他在這裏找到它:http://cracktheinterviewers.blogspot.com/2012_03_01_archive.html – Dave 2012-07-23 09:51:19
它不是由我寫的..它在測試中被問到。 。 – Dhatri 2012-07-23 09:52:17