我做了一些研究,但我找不到问题的答案。我想知道如何确定C程序中使用的字符集是否为ASCII。是否有任何预处理器常量?
非常感谢。
答案 0 :(得分:2)
(C99,5.2.1p1)“执行字符集成员的值是实现定义的。”
例如gcc
说:
执行字符集成员的值(C90和C99 5.2.1)。 由ABI确定
http://gcc.gnu.org/onlinedocs/gcc/Characters-implementation.html
所以gcc
指向操作系统文档。
答案 1 :(得分:1)
据我所知,ASCII字符集的范围是0到127,其他字符集的范围是零。
答案 2 :(得分:1)
它取决于您使用的工具链,您可以在工具链文档中找到它。例如,vc ++为unicode build定义_UNICODE。
答案 3 :(得分:1)
为此自己构建预处理器宏很容易。像下面这样的东西可以做到这一点:
#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)