gpt4 book ai didi

c - 为什么编译器不从函数定义中推断出函数原型(prototype)?

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:53 24 4
gpt4 key购买 nike

我知道不包含函数原型(prototype)是不好的做法,但如果您不这样做,那么编译器将根据您在调用函数时传递给函数的内容来推断原型(prototype)(根据 this answer )。我的问题是,为什么编译器会根据您传递给函数的内容而不是函数本身的定义来推断原型(prototype)?我可以想象某种预处理步骤,其中识别并检查所有声明的函数以查看是否存在每个函数的原型(prototype)。如果没有原型(prototype),函数的第一行将被复制并卡在现有原型(prototype)下。为什么不这样做?

最佳答案

因为 C 编译器被设计为单 channel 编译器,其中任何给定文件都不知道构成项目的其他源文件。

虽然编译器变得更加复杂,并且可能会进行多次传递,但编译过程框架的总体轮廓仍然与 K&R 时代相同:

  • 预处理每个源文件(仅限宏文本替换)。
    • 将处理后的源代码编译成目标文件。
  • 将对象链接到可执行文件或库中。

推断原型(prototype)必须在第一步发生,但编译器不知道此时可能包含函数定义的任何其他对象的存在。

也许可以制作一个执行您建议的编译器,但不能不违反有关如何推断原型(prototype)的现有规则。具有如此重大后果的更改将使该语言不再是 C。

关于c - 为什么编译器不从函数定义中推断出函数原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25329203/

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