1

我做了一些研究,但我没有找到我的问题的答案。我想知道如何确定 C 程序中使用的字符集是否为 ASCII。是否有任何预处理器常量?

非常感谢。

4

4 回答 4

2

C 说:

(C99,5.2.1p1)“执行字符集成员的值是实现定义的。”

例如gcc说:

执行字符集(C90 和 C99 5.2.1)成员的值。 由 ABI 确定

http://gcc.gnu.org/onlinedocs/gcc/Characters-implementation.html

所以gcc指向操作系统文档。

于 2012-06-16T12:28:33.510 回答
1

据我所知,ASCII 字符集的范围是 0 - 127,其他字符集低于零。

于 2012-06-16T12:22:23.950 回答
1

这取决于您使用的工具链,您可以在工具链文档中找到它。例如,vc++ 为 unicode 构建定义 _UNICODE。

于 2012-06-16T12:24:57.833 回答
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)
于 2012-06-16T14:19:27.187 回答