Re: [語法] 請問 "unique_variable_name##__LINE__ …
※ 引述《HeyScng ( )》之銘言:
:
[DELETE]
: 其中有一個 macro 看不太懂 "unique_variable_name##__LINE__"
:
: #define SEQ_TRACE(txt) SequenceTracer unique_variable_name##__LINE__ (txt)
[DELETE]
:
: 網路上查了一下
: __LINE__ : 似乎是代表目前的所在行數
:
: ## : 似乎是"merging" operator
:
: 但 unique_variable_name 實在是找不到
[DELETE]
unique_variable_name 是什麼不重要,
重要的是這個 macro 期望在第 20 行寫 SEQ_TRACE("abc") 會被展開成:
SequenceTracer unique_variable_name20 ("abc")
## 就是把文字串接起來成為 code 的一部份用。
: → james732:我用g++編譯 那個 __LINE__ 沒有被替換成行號 真怪... 07/30 19:27
這是因為正確的做法是需要多一層間接層:
#define CONCAT_(x, y) x ## y
#define CONCAT(x, y) CONCAT_(x, y)
#define SEQ_TRACE(txt) \
SequenceTracer CONCAT(unique_variable_name, __LINE__)(txt)
最後一行 BBS 的寬度不夠所以我用 \ 斷行,跟問題無關。
重點是一個 macro 本身不含 # 和 ## 的時候才會觸發遞迴展開,
__LINE__ 需要第二次的遞迴展開才能變成行號,
所以需要一個間接層。
--
Ling-hua Tseng (uranus@tinlans.org)
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage: http://www.tinlans.org
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.115.133
推
07/30 22:14, , 1F
07/30 22:14, 1F
推
07/30 22:22, , 2F
07/30 22:22, 2F
推
07/30 22:24, , 3F
07/30 22:24, 3F
推
07/30 22:54, , 4F
07/30 22:54, 4F
→
07/30 22:57, , 5F
07/30 22:57, 5F
→
07/30 22:59, , 6F
07/30 22:59, 6F
→
07/30 22:59, , 7F
07/30 22:59, 7F
→
07/30 23:00, , 8F
07/30 23:00, 8F
→
07/30 23:01, , 9F
07/30 23:01, 9F
→
07/30 23:02, , 10F
07/30 23:02, 10F
→
07/30 23:02, , 11F
07/30 23:02, 11F
→
07/30 23:03, , 12F
07/30 23:03, 12F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章