当前位置:  开发笔记 > 编程语言 > 正文

Java程序员对C头文件有疑问

如何解决《Java程序员对C头文件有疑问》经验,为你挑选了1个好方法。

我用Java作为编程语言有相当多的练习,但我对C完全是新手.我理解头文件包含方法和变量的前向声明.这与Java中的抽象类有什么不同?



1> Pete..:

简短的回答:

抽象类是面向对象编程的概念.由于构造C语言的方式,头文件是必需的.它无法以任何方式进行比较

答案很长

要理解头文件以及头文件的需要,您必须理解"声明"和"定义"的概念.在C和C++中,声明意味着您声明某些东西存在于某处,例如函数.

void Test(int i);

我们现在声明,在程序的某个地方,存在一个函数Test,它接受一个int参数.当您有定义时,您可以定义它是什么:

void Test(int i)
{
    ...
}

这里我们定义了函数void Test(int)实际上是什么.

使用extern关键字声明全局变量

extern int i;

它们的定义没有extern关键字

int i;

编译C程序时,将每个源文件(.c文件)编译为.obj文件.定义将作为实际代码编译到.obj文件中.编译完所有这些后,它们将链接到最终的可执行文件.因此,只应在一个.c文件中定义一个函数,否则,相同的函数将在可执行文件中多次结束.如果函数定义相同,这并不重要.如果将全局变量链接到同一可执行文件两次,则会出现问题.这将使一半代码使用一个实例,另一半代码使用另一个实例.

但是在一个.c文件中定义的函数无法查看在另一个.c文件中定义的函数.因此,如果从file1.c文件中需要访问file2.c中定义的函数Test(int),则在编译file1.c时需要有一个Test(int)声明.当file1.c被编译成file1.obj时,生成的.obj文件将包含需要在某处定义Test(int)的信息.链接程序时,链接器将识别file2.obj包含file1.obj所依赖的函数.如果没有包含此函数定义的.obj文件,您将收到链接器错误,而不是编译器错误(链接器错误更难以找到并纠正编译器错误,因为您没有获得结果的文件名和行号文件)

因此,您使用头文件存储相应源文件中存储的定义的声明.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有