2

私はマクロを書き込もうとしています:

#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 )

それはうまくいき、私には十分短いですが、最初のマクロがどういうわけか可能かどうか私に尋ねました。

4

2 に答える 2

2

実際、MSVCは$識別子の有効なシンボルとして受け入れます。上で正しく述べられたように、これは標準に従ってそうであるべきではありません。は@、通常マクロのパラメータに適用されるプリプロセッサ演算子です。識別子の一部として使用することはできません。出力はCプログラムですか?

于 2012-06-26T09:18:59.040 に答える
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 )
于 2012-06-26T09:24:35.730 に答える