3

MSVCで作業している人から渡された次のコードがあります。

#define MAP1(x, y) map[#x] = #@y;

私はXcodeを使用しており、Clangを使用しています。さまざまなグーグル検索から、これは「魅力的な演算子」として知られており、MSVCのプリプロセッサに固有であることがわかりました。Clangの使用中にこの演算子の機能をエミュレートする方法はありますか?削除しようとしまし@たが、次のエラーメッセージが表示されます。

Assigning to 'int' from incompatible type 'const char[2]'

'int'への明示的なキャストは機能しますか、それともcharizing演算子は何か違うことをしますか?

4

2 に答える 2

6

文字列化演算子(標準C ++)はに変換aされるため、文字化演算子はに変換される"a"ように聞こえます。単純なケースでは、最初の文字を取得することで取得できます。a'a''a'"a"

#define MAP1(x, y) map[#x] = static_cast<const char(&)[2]>(#y)[0];

static_casttoconst char(&)[2]は、長さ1の文字列を取得しない場合にコンパイル時エラーを確実に取得します。これは、末尾を数えると2文字になります'\0'。プレーン#y[0]は、文字列の長さに関係なく、静かに最初の文字を取ります。

于 2012-09-21T11:47:55.107 に答える
1

#y [0]のようなものを試しましたか?基本的に、「yを文字列化し、最初の文字を取得する」:-)

それ以外は、生成されたステートメントは実行時に実行されるため、yを文字列化して関数に渡し、その関数に正しいものを返すようにすることができます。

于 2012-09-21T11:48:14.747 に答える