读书人

由C中函数调用的函数宣言想到的

发布时间: 2012-08-26 16:48:05 作者: rapoo

由C中函数调用的函数声明想到的

在c语言的函数调用中,如果主调函数调用一个其他函数,则这个函数要么在主调函数之前定义,要么在主调函数之前或者之中做出声明。

运用函数声明的好处是,可以在编译阶段检查出一些不必要的错误。

应该明确:

头文件为相关声明提供了一个集中存放的位置,而并没有函数体的源码。

预处理命令#include的作用是将被包含文件的内容全部复制到当前文件中。

命名空间是为了解决名字冲突问题后期引入的。跟java中包的概念类似。

接下来会产生一个问题,头文件只是声明函数,为什么引入头文件就可以使用其中的函数?假如被调函数和主调函数在同一个.c文件内,编译阶段容易找到被调函数的源码,如果被调函数和主调函数不在同一个.c文件内呢?怎么去找被调函数的源码?看头文件中的内容好像并没有提供这样的功能。

上述的这个问题正是链接阶段要解决的。即怎么找到被调函数的函数体。在c中表现为合并一个一个的由.c生成的.o 文件;在java中表现为加载合并一个个的.class文件。

其实学过c再学java的人应该有疑惑,为啥java中从来不提链接阶段啊?并且也没有显式的链接命令…

头文件和函数声明在java中是不存在的,因为java是完全面向对象的,任何一个方法都包含在一个特定的类中。并且java采用动态编译技术,即只有当运行用到该类时,该类才被编译,这样在编译阶段很容易确定对一个方法的引用是否正确。

而在c中是静态编译,假如不采用函数声明技术,在编译阶段,不是本文件的函数根本发现不了错误,因为你连这个函数在那个文件中定义都不知道。现在的ide很多不存在链接的显式步骤,这样只能等到运行时才能发现错误了。

这些内容可作为 第7章链接的先序知识点,应该搞清楚。

读书人网 >其他相关

热点推荐