5

Is it guarantees by the standard the order of the characters? Can i count that '1' symbol are followed in the character set table by the '2' symbol, for example? Or is it platform-specific?

4

2 に答える 2

7

1999 年の C 標準では、文字セットについて次のように述べられています。

基本的なソース文字セットと基本的な実行文字セットの両方に、次のメンバーが含まれます:
ラテン アルファベットの大文字26 文字
...ラテン アルファベット
の小文字 26 文字
...
10 進数の 10 桁
0 1 2 3 4 5 6 7 8 9
次の 29 個のグラフィック文字
...
ソースと実行の基本文字セットの両方で、上記の 10 進数のリストで 0 の後の各文字の値は、前の値よりも 1 大きくなります。

于 2012-10-11T05:35:44.873 に答える
5

数値文字を連続させるための標準的な呼び出しは、実際、私が認識しているすべてのプラットフォームで、'0' から '9' までは順序付けされ、連続しています。アルファベット全般について同じことは言えません。これが最も確実に当てはまらないサンプルについては、 EBCDICプラットフォーム (AS/400、OS390 など)のいずれかを参照してください。

つまり、これを確実に行うことができます:

for (char ch = '0'; ch <= '9'; ch++)

しかし、あなたはこれを信頼できるものにすることはできません:

for (char ch = 'a'; ch <= 'z'; ch++)

後者は 26 回の反復を実行することを期待してください。プラットフォームに依存します。

注: 標準では、桁外の順序 (順序と順序の両方) が保証されることは指定されていません。それでも、私が取り組んできたすべてのプラットフォーム (およびそれは多数) は、アルファベットに対しても一貫した順序プロパティを示しますが、同様のケースのみです。つまり、「a」は常に「z」より「小さい」です。しかし、悪いペニーのように、EBCDIC プラットフォームに戻ってきます。標準プラットフォームでは、'A' は常に 'z' より小さくなりますが、EBCDIC ではそうではありません。

結論: 数字の文字を除いて、順序やシーケンスについてほぼすべてを確実に想定することはできず、プラットフォームの純粋な独立性を維持することはできません。

于 2012-10-11T05:40:24.887 に答える