gpt4 book ai didi

c - 底层字符集是否只依赖于 C 实现?

转载 作者:太空狗 更新时间:2023-10-29 14:59:16 24 4
gpt4 key购买 nike

许多文本警告将 char 值处理为整数是不可移植的,例如假设“A”的值为 65(与 ASCII 中一样)。

但是什么决定了这个字符集是 ASCII(或扩展形式)还是其他一些字符集?是由操作系统决定的,还是编译器决定的?我假设这不依赖于硬件。

例如,英特尔 PC 是否可以具有 EBCDIC 之类的字符集(理论上)?在 Linux/Unix 中更改 LANG 环境变量是否会更改 C 程序的基本字符集的值(如果重新编译)?

(编辑:我现在看到 Linux 中的各种非拉丁字符集都有相同的基本 ASCII 代码,例如 KOI8-U - 我假设有一些变体的字符集与 ASCII 不兼容)

最佳答案

标准不关心任何这些细节,就它而言,它只关心“实现”。

在实践中,硬件和操作系统都可以指定该平台上的 C 实现预期使用的实现细节,或者如果它们希望与系统功能进行互操作,则它们需要使用(也就是说,操作系统或硬件随附的代码)。所以我们经常说这样的话,“在 Win32 上,sizeof(void*) == 4”。不过,这是一个简写,因为有人可以,如果他们选择的话,编写一个在 32 位 Windows 上运行并具有不同指针大小的 C 实现。我们真正的意思是,“在 Win32 ABI 中,sizeof(void*) == 4,以及在 Win32 上运行但不遵循 Win32 ABI 的 C 实现被排除在考虑范围之外”。

因此,实现可以为所欲为,只要它们不介意是否可以(例如)使用遵循系统约定的 dll。字符集可以定义为编译器和标准库的编写者喜欢的任何内容,仅受标准中的内容限制。

也就是说,字 rune 字的值是编译时常量。这告诉您基本执行字符集在运行时不能更改。

此外,如果它依赖于环境变量,那么有人有责任确保程序以与编译时相同的值运行。这对用户来说非常不友好,但该标准实际上并不禁止某人编写对程序运行方式有特殊限制的 C 实现。

关于c - 底层字符集是否只依赖于 C 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15251049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com