更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

为什么在C ++中需要进行声明

  • 发布:C++培训
  • 来源:问答库
  • 时间:2017-10-13 16:40

编译器希望确保你没有拼写错误或将错误的参数数量传递给函数。所以,它坚持在使用之前首先看到一个函数(或任何其他类型,类)的声明。

这真的只是允许编译器更好地验证代码,并允许它整理松散的文件组织形式,以便它可以产生一个整洁的目标文件。如果没有提前声明,编译器就会产生一个对象文件,该对象文件必须包含有关函数的所有可能猜测的信息。链接器就必须包含聪明的逻辑来尝试并计算出你实际打算调用的函数,当函数可能存在于不同的对象文件中时,链接器与使用添加生成的对象文件相连接一个dll或exe。链接器可能会收到错误的函数。假设你想使用int add(int a,float b),但是忘记声明它,然而链接器发现了一个已经存在的int add(int a,int b),并认为是正确的,而使用它。你的代码将成功编译,但不会得出你想要的结果。

所以,为了保持代码的清晰,避免歧义等等,编译器坚持要在使用前声明所有内容。

该资料内容来源于stackoverflow的问答。

具体内容见链接:#/questions/4757565/what-are-forward-declarations-in-c

最后有关C这个问题的答案是:C语言的“隐式函数声明”惹的祸 :

隐式函数声明

在C语言中,函数在调用前如果没有声明,那么编译器会自动按照一种隐式声明的规则,为调用函数的C代码产生汇编代码。

但gcc编译器在编译时能够自动在常用库头文件(内建函数)中查找与隐式声明同名的函数,如果发现其返回非int类型,则会按照内建函数的声明原型去生成调用代码。这样编译时会给出警告,提示隐式声明与内建函数不兼容。

如果隐式声明函数名称恰好在链接库中存在,且返回int类型与gcc的内建函数原型完全相同,那么gcc不会给出任何警告。但是如果在调用时参数数量不匹配,就可能在运行时出问题。

为了避免这种问题,在C语言的C99版本中,无论如何都会给出警告。也强烈建议程序员重视编译器给出的关于隐式声明的警告,及时通过包含必要的头文件来消除这种警告。当然只要我们正确的声明和定义就不会出现一些奇怪的问题。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:学C++开发要不要参加C++培训班?
下一篇:C++能否在析构函数和构造函数中抛出异常?

空指针到底是什么意思?

a[i] = i++ 到底对不对?

C++培训哪家好?全方位对比机构

C/C++中的必须熟记的基础知识

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省