調査を行いましたが、質問に対する答えが見つかりませんでした。Cプログラムで使用されている文字セットがASCIIであるかどうかを判断する方法を教えてください。プリプロセッサ定数はありますか?
どうもありがとう。
調査を行いましたが、質問に対する答えが見つかりませんでした。Cプログラムで使用されている文字セットがASCIIであるかどうかを判断する方法を教えてください。プリプロセッサ定数はありますか?
どうもありがとう。
C さんのコメント:
(C99、5.2.1p1) 「実行文字セットのメンバーの値は実装定義です。」
たとえば、次のようgcc
に言います。
実行文字セットのメンバーの値 (C90 および C99 5.2.1)。 ABIによって決定
http://gcc.gnu.org/onlinedocs/gcc/Characters-implementation.html
そのgcc
ため、オペレーティング システムのドキュメントを参照してください。
使用しているツールチェーンによって異なります。ツールチェーンのドキュメントに記載されている場合があります。たとえば、vc++ は Unicode ビルド用に _UNICODE を定義します。
そのためのプリプロセッサ マクロを自分で作成するのは簡単です。次のようなものがうまくいくはずです:
#define HAVE_ASCII (('\x41' == 'A') && ('\x61' == 'a') && ('\x30' == '0'))
#if !HAVE_ASCII
# error "we need ascii"
#endif
細心の注意を払いたい場合は、印刷可能なすべての ASCII をマクロにリストすることもできますが、これだけで EBCDIC と区別するのに十分なはずです。EBDICシステムを使用しているかどうかを判断するだけなら、さらに簡単です:)
#define HAVE_EBCDIC (('Z' - 'A') != 25)
私が知っているように、ASCII 文字セットの範囲は 0 ~ 127 で、他の文字セットは 0 未満です。