我正在尝试写一个宏:
#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 )
这对我来说很有用,但是我问我第一个宏是否有可能。
答案 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 )