gpt4 book ai didi

c++ - 为什么 C 基本类型的标识符具有多个关键字

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:45 24 4
gpt4 key购买 nike

除了明显的答案因为,人们是那样设计的,为什么 C/C++ 有由多个标识符组成的类型,例如

  • long long (int)
  • 短整数
  • 符号字符

A 确实有一些解析的基本知识,并且使用 flex/bison 工具制作了一些解析器,我认为,这给解析类型名称带来了更​​多的复杂性。从标准的 C++ 语法来看,关于类型的一切都非常复杂。

我知道,C++(我相信也是 C)没有详细说明基本数据类型的大小,因此使类型 int_8uint_8 等会不起作用(虽然 c++11 给了我们 fixed width integers )。

那么,当标准开发人员可以制作 intuint 和类似标识符时,为什么要同意使用多词类型标识符。

最佳答案

就 C 而言,为什么标准的开发者同意多词标识符?这是因为这就是语言在标准化时所拥有的。

原始标准的任务不是创建新语言,而是编纂现有实践。根据 C89 标准本身:

The Committee evaluated many proposals for additions, deletions, and changes to the base documents during its deliberations. A concerted effort was made to codify existing practice wherever unambiguous and consistent practice could be identified. However, where no consistent practice could be identified, the Committee worked to establish clear rules that were consistent with the overall flavor of the language.

并且,来自 C99 基本原理文档:

The original X3J11 charter clearly mandated codifying common existing practice, and the C89 Committee held fast to precedent wherever that was clear and unambiguous. The vast majority of the language defined by C89 was precisely the same as defined in Appendix A of the first edition of The C Programming Language by Brian Kernighan and Dennis Ritchie, and as was implemented in almost all C translators of the time.

除此之外,标准的每次迭代都高度重视向后兼容性,因此代码不会中断。来自同一个基本原理文档:

Existing code is important, existing implementations are not. A large body of C code exists of considerable commercial value. Every attempt has been made to ensure that the bulk of this code will be acceptable to any implementation conforming to the Standard. The C89 Committee did not want to force most programmers to modify their C programs just to have them accepted by a conforming translator.

因此,虽然后来的标准版本为我们提供了诸如 stdint.h 之类的固定宽度整数类型,但去掉了诸如 int 之类的标准类型long 将严重违反该准则。


就 C++ 而言,它几乎可以肯定是该语言早期的遗留物,当时它被提出为“C 加类”。事实上,非常早期的 cfront C++ 编译器之所以如此命名,是因为它采用 C++ 源代码并将其转换为 C,然后再将其提供给合适的 C 编译器(即 C 的前端,因此 cfront).

这将使原作者 Bjarne 能够最大限度地减少交付 C++ 的工作量,因为其中大部分已经由 C 编译器本身提供。


就解析语言而言,处理 unsigned long int x (a) 肯定比处理 ulong x< 更难.

但是,考虑到编译器已经必须为一个变量处理大量可选的“修饰符/说明符”(例如,const char * const x),处理其他几个是正常的类(class)。


(a)int long unsigned xlong unsigned x 或任何其他类型说明符最终成为单数 unsigned long int type。参见 here了解更多详情。

关于c++ - 为什么 C 基本类型的标识符具有多个关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685626/

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