0

次のように、隣接する文字列リテラルを連結できます。

puts( "ABC" "DEF" );

ただし、これを実行しようとすると、MSVC は奇妙なエラーで失敗します。

puts( ("ABC") ("DEF") );

つまり、次のような文字列リテラルを出力する単一の計算を実行できます。

puts( NUM_ELEMENTS>125?"WARNING":"OK" )

しかし、次のような複数の文字列リテラル出力を連結することはできません。

#define SOME_SETTING 0x0B //I sometimes wish there were binary literals
#define BIT_STR(x,n) ((x>>n)&1?"1":"0")
#define BIT_STR4(x) BIT_STR(x,3) BIT_STR(x,2) BIT_STR(x,1) BIT_STR(x,0)

...

puts( "Initializing some hardware setting: " BIT_STR4(SOME_SETTING) );

編集:私の質問は...コンパイル時に計算された文字列リテラルを連結する正しい方法は何ですか?

4

1 に答える 1

2

BIT_STR(SOME_SETTING, 3)、例を挙げると、実際に実行時に計算できます。結果は になり、その結果は文字列リテラルではなく(0?"1":"0")、定数文字列へのポインターになります。"0"

文字列リテラルは連結できますが、定数文字列への定数ポインターは連結できません。それが違いです。

于 2013-07-11T15:48:53.593 に答える