带参数x的宏,输出$ x和@x

时间:2012-06-26 09:12:39

标签: macros c-preprocessor

我正在尝试写一个宏:

#define FCT( x ) fct( ($ ## x), (@ ## x).first_line, (@ ## x).first_column )

宏的输出应该如下例所示:

FCT(2) --> fct( $2, @2.first_line, @2.first_column )

不幸的是,这不起作用,@似乎会导致错误。这是否可以使用 C 预处理器?

目前我正在使用这个宏:

#define FCT(x,y) fct( x, y.first_line, y.first_column )
FCT($2,@2) --> fct( $2, @2.first_line, @2.first_column )

这对我来说很有用,但是我问我第一个宏是否有可能。

2 个答案:

答案 0 :(得分:2)

事实上,MSVC接受$作为标识符的有效符号。正如上面所说的那样,根据标准,这不应该是这样。 @是预处理程序运算符,通常应该应用于宏的参数。您不能将其用作标识符的一部分。你的输出是C程序吗?

答案 1 :(得分:0)

尝试使用通用连接宏:

#define CONCAT(a,b) CONCAT_(a,b)
#define CONCAT_(a,b) a##b
#define FCT( x ) fct( CONCAT($,x), CONCAT(@,x).first_line, CONCAT(@,x).first_column )