涉及串联和行号的宏替换

a macro substitution involving concatenation and line number

本文关键字:替换      更新时间:2023-10-16

我想要一个产生类似 L17 的宏,其中 17 是调用宏时的行号。 但是,以下内容只会产生L__LINE__

#define STOP L##__LINE__

想知道是否有办法在串联之前使__LINE__进行评估。

你需要一个双连接宏包装器:

#define CONCAT0(x,y) x ## y
#define CONCAT(x,y) CONCAT0(x,y)
#define STOP CONCAT(L,__LINE__)
int main() {
    int STOP = 42;
    L5 = 41;
}