gpt4 book ai didi

c - "significant characters"在 C(变量)中的确切作用是什么?

转载 作者:太空狗 更新时间:2023-10-29 17:07:14 26 4
gpt4 key购买 nike

C 中“重要字符”的确切作用是什么,尤其是在变量领域?我已经阅读了主题“(K&R) At Least the first 31 characters... ”,但我真的不明白重要字符的确切规则。我唯一清楚的是这个主题已经灭绝了,但我仍然需要知道!

最佳答案

在当前的 C 标准中,ISO/IEC 9899:2011,第 §5.2.4.1 节 翻译限制 说:

The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:18)

...
— 63 significant initial characters in an internal identifier or a macro name (each universal character name or extended source character is considered a single character)
— 31 significant initial characters in an external identifier (each universal character name specifying a short identifier of 0000FFFF or less is considered 6 characters, each universal character name specifying a short identifier of 00010000 or more is considered 10 characters, and each extended source character is considered the same number of characters as the corresponding universal character name, if any)19)
...

18) Implementations should avoid imposing fixed translation limits whenever possible.
19) See ‘‘future language directions’’ (6.11.3).

§6.11.3 External names
¶1 Restriction of the significance of an external name to fewer than 255 characters (considering each universal character name or extended source character as a single character) is an obsolescent feature that is a concession to existing implementations.

这意味着在处理名称时,前 63 个字符内不同的内部名称必须被编译器视为不同的,但是如果您被误导到创建两个(或更多)在 64 个字符中不同的标识符<仅 sup>th 字符(前 63 个相同,但第 64 个 th 字符是 1 而另一个是 z),那么编译器可能会合法地,并且在没有警告的情况下,将这两个标识符视为相同。

外部名称的限制——影响链接器而不是编译器本身的名称——可能被限制为少至 31 个字符。考虑:

extern int abcdefghijkjlmnopqrstuvwxyz123456;
extern int abcdefghijkjlmnopqrstuvwxyz123457;

如果系统(链接器)将您限制为 31 个字符,则这两个声明可能被视为引用同一个变量。

正如 future 方向部分所述,任何小于 255 的限制都是“过时的”,这意味着在名称长度为 255 个字符之前,您不应受此限制。但该标准并未强制规定 255 个字符作为限制。

历史

该标准的先前版本对名称长度上限的下限较小。 C89 标准只要求外部名称使用 6 个字符的 monocase(但它被认为是对现有链接器的痛苦让步),因此 strcmpStrCmp 可以相同,也可以abcdefgabcdefz。部分问题可能出在 Fortran 语言上;它只需要支持 6 个字符的单大小写名称,因此广泛使用 Fortran 的系统上的链接器不需要支持更长的名称。

C99 中的限制与 C11 中的相同。

关于c - "significant characters"在 C(变量)中的确切作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290165/

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