0

データを計算するための従来のソース コードに取り組んでいます。

いくつかのエラー状態をデバッグするために、コードに次の printf を追加しました

printf("What???!!!!....\n");

ログはファイルに保持され、文字列「What???!!!!....」を検索していましたが、出力が次のようになったため、これは見つかりませんでした。

何??|!!!....

この不要な出力のために、私はすでに多くの時間を無駄にしています。誰かがこの理由を特定するのを手伝ってもらえますか?

4

3 に答える 3

2

出力はtrigraph、文字列に関連しています

??! | に対応します。

-trigraphs のメイクファイルを確認してください

今すぐもっと賢明なプリントを用意してください:-)

于 2013-02-15T06:23:56.530 に答える
1

昔は、C プログラムを書くのに必要なすべての文字がキーボードに含まれているとは限りませんでした。適切なキーボードを持たないユーザーがプログラミングできるようにするために、C コンパイラの初期のバージョンでは、3 文字表記と 2 文字文字表記を使用していました。これは、存在しない可能性のあるキーに直接変換される珍しい 2 文字または 3 文字の組み合わせです。C の digraph と trigraph のリストは次のとおりです。

http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C

??! はリストにあり、| に変換されます。プリプロセッサで。

これを修正する 1 つの方法は、上記でリンクした記事にあります。疑問符を \ で区切るか、文字列を閉じて、疑問符の間で再度開きます。レガシ コードを使用しているため、これがおそらく最良の選択です。

多くの場合、コンパイラ スイッチを使用して digraph と trigraph を無効にすることもできます。詳細については、ドキュメントを参照してください。

于 2013-02-15T06:25:20.680 に答える
0

ISO 646文字セット外の文字を入力するのに役立つように、トリグラフ(3 つの文字シーケンス) とダイグラフ(2 つの文字シーケンス) が C に追加され、キーボードがそれに準拠していません。

これは、ダイアグラフとトリグラフのウィキページからの段落であり、それを明確に指定しています。

C プログラミング言語の基本文字セットは、ASCII 文字セットのサブセットであり、ISO 646 の不変文字セットの外側にある 9 つの文字が含まれています。これは、使用されているエンコーディング (およびおそらくキーボード) がこれらの 9 つの文字のいずれもサポートしていない場合に、ソース コードを記述する際に問題を引き起こす可能性があります。ANSI C 委員会は、ISO 646 文字セットの任意のバージョンをサポートするキーボードを使用してソース コードを入力する方法として、トライグラフを発明しました。

これら 2 つの疑問符を表示するには、2 つ目の疑問符をエスケープするか、文字列連結を使用します。

printf("What??\?!!!!....\n"); 

printf("What??" "?!!!!....\n);
于 2013-02-15T06:18:41.757 に答える