簡體   English   中英

奇怪的宏觀擴張

[英]Strange Macro Expansion

我最近遇到過這個宏:

#define EAT(...)
#define STRIP(x) EAT x
STRIP( (1) 2 ) \\ expands to 2

現在有人可以解釋一下發生了什么嗎?

這個EAT x如何擴展?

括號'(1)'的作用是什么?

為什么我不能像STRIP(1(2))那樣反向?

我最初的意圖是在像SPLIT(1 2)這樣的宏中將一個參數拆分為擴展到1,2有一種方法嗎?

EAT是一個類似函數的宏,這意味着它必須像EAT(something)一樣使用,並且它會擴展為空。

所以STRIP((1) 2)擴展到EAT (1) 2 ,擴展到2

括號'(1)'的作用是什么?

它形成了擴展的EAT(1)

為什么我不能像STRIP(1(2))那樣反向?

因為那形成了EAT 1 (2) ,你不能像那樣使用EAT

讓我們逐步完成替換:

STRIP( (1) 2 )
EAT (1) 2
2

對於第二個例子:

STRIP( 1 (2) )
EAT 1 (2)     
//error, EAT is a macro so it needs ()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM