7

私のプログラマーの本能は、cの文字定数(例:'x')は、コンパイルされたマシンのマシン文字セットを使用してエンコードされていると言うでしょう。ただし、次の抜粋は「Cプログラミング言語:ANSICエディション」からの抜粋です。

「文字定数は、「x」のように一重引用符で囲まれた1つ以上の文字のシーケンスです。1文字のみの文字定数の値は、実行時のマシンの文字セットの文字の数値です。」

最後の3つの単語に重点を置きます。

なぜ「実行時に」と言うのか、誰か説明できますか。確かに、文字値はコンパイルされたバイナリ(またはELF、A.OUT ...)でエンコードされていますか?

私は疑問に思っていましたが、これについて論理的な説明を思い付くことができませんでした、確かにK&Rは彼らが何をしているのか知っていました!

4

4 に答える 4

2

プログラムを実行するシステムをコンパイラに通知する必要があります。次に、文字の適切なエンコーディングを選択します。

もちろん、デフォルトでは、コンパイラを実行しているシステムと同様のシステムで実行されます。その場合、コンパイル時と実行時の文字セットは同じになります。

于 2013-01-17T17:28:32.420 に答える
1

あなたの問題は、マシンの文字セットと使用されている文字エンコードを混同しているという事実にあるようです。

このhttp://www.microsoft.com/typography/unicode/cs.htmを読んで、文字セットが実際に何を意味するかを理解してください。KnR(2nd Edition)の時点での問題は、コンピューターが多すぎて、一部は地方自治体や一般向けに製造されていたということでした。これにより、2台のコンピューター間で異なる文字セットがポップアップするため、米国のマシンの「A」はロシアのマシンのキリル文字(たとえばFoo)でした。

したがって、文字定数を信頼することはできませんでした。現在の現代のコンピューターメーカーのおかげで、マシンのほとんどの文字セットは同じであり、情報交換はより簡単です。

于 2013-01-17T18:06:41.860 に答える
1

Cは、ソース文字セットと実行文字セットを区別します。これは、コンパイラがクロスコンパイラである可能性があるためです。たとえば、モバイルプラットフォーム用のPCの場合です。その場合、コンピュータの文字セットとターゲットマシンの文字セットが一致してはなりません。最も単純な例はEOLエンコーディングです。これは、現在市場に出回っているさまざまな一般的なプラットフォーム間で異なります。実行文字セットは、プログラムを実行しているユーザーによって動的に設定される「ロケール」およびその他のノブにも依存する場合があります。

于 2013-01-17T17:35:09.220 に答える
0

C言語の用語では、データは特定のロケール用にエンコードされ、ロケールは文字セットを宣言します。プログラムには実行文字セットがあります。プログラムにコンパイルされたテキスト(文字列および文字定数)は、その実行文字セットで表されます。プログラム自体は、任意のロケールの文字セットから読み取ったテキストを独自の実行文字セットに変換し、任意のロケールの文字セットに従って生成されたテキストをフォーマットする場合があります。

「実行時のマシンの文字セット」は不適切な表現であり、存在しない、または真実ではないことを意味します。

于 2013-01-17T20:08:06.643 に答える