2

コードにハードコードされた文字列(ファイル マスクとして使用する必要があります) がありますが、コンパイラは常に "??-" シーケンスを "~" に変更します。次に例を示します。

const wchar_t textW[] = L"test-??-??-??.txt";

testW は "test-~~??.txt" (引用符なし) になります。

非 Unicode 文字列でも同じことが起こります。

const char textA[] = "test-????-??-??.txt";

textA は "test-??~~??.txt" (引用符なし) になります。

私のコンパイラは Microsoft Visual C++ 2008 です。

Visual Studio 2013 でこれを試したところ、実行時の文字列は正しく、インテリセンスはアプリをトレースしているときにツールヒントに正しい値を表示しますが、... しかし、書き込みモード (アプリが実行されていないとき) intellisense は、ツールヒントにチルダ付きで誤った値を表示します。

4

2 に答える 2

3

これはtrigraphであり、キーボードで常に使用できるとは限らない文字を表現する方法です。

この動作は、既定ではオフになっている/Zc:trigraphsオプションによって制御されます。プロジェクトで有効になっているようです。無効にすることをお勧めします。

于 2014-04-15T11:58:46.147 に答える
2

トライグラフといいます。それらはプリプロセッサに置き換えられます。

于 2014-04-15T11:58:38.260 に答える