[英]C++ anonymous variables
為什么這不起作用?
0. #define CONCAT(x, y) x ## y
1.
2. #define VAR_LINE(x) \
3. int CONCAT(_anonymous, __LINE__) = x
4.
5. #define VAR_LINE2(x) \
6. int _anonymous ## x = 1
7.
8. int main()
9. {
10. VAR_LINE(1);
11. VAR_LINE(1);
12. VAR_LINE(1);
13. VAR_LINE2(__LINE__);
14. }
上述宏觀擴張的結果
int _anonymous__LINE__ = 1;
int _anonymous__LINE__ = 1;
int _anonymous__LINE__ = 1;
int _anonymous13 = 1;
如果我不必將__LINE__
宏寫為參數,那將會很方便。
我認為這個問題非常清楚。 我希望能夠生成匿名變量,以便在同一范圍內聲明多個變量時,此宏不會因重定義錯誤而失敗。 我的想法是使用預定義的__LINE__
宏,因為不會像這樣在同一行上聲明變量。 但宏觀擴張困擾我,你能幫忙嗎?
感謝Luc Touraille。 但是,建議的解決方案存在一個小問題。 操作數和##運算符之間必須有空格(顯然標准說明不然,但如果運算符和操作數之間沒有空格,則PS3風格的GCC不會正確擴展宏)。
#define _CONCAT(x,y) x ## y
#define CONCAT(x,y) _CONCAT(x,y)
VAR_LINE宏現在產生:
int _anonymous10 = 1;
int _anonymous11 = 1;
int _anonymous12 = 1;
這已經過驗證可以在Win32(Visual Studio 2008),XBOX360(Xenon)和PS3下運行。
您需要添加一個間接級別,以便擴展__LINE__
:
#define _CONCAT_(x,y) x ## y
#define CONCAT(x,y) _CONCAT_(x,y)
#define VAR_LINE(x) int CONCAT(_anonymous, __LINE__) = x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.