读书人

大侠一个C++编译连接的有关问题

发布时间: 2012-03-27 13:44:24 作者: rapoo

请教各位大侠一个C++编译连接的问题
//Filea.h|
|
void func(const char *, int i);|
|
——————————————————————————————
//Fileb.cpp|//Filec.cpp
#include "Filea.h"|#include<iostream>
|#include "Filea.h"
void func(const char *, int i)|int main()
{|{
...//函数定义|...
}|func("Hello", 5);
|...
|}

如上三个文件在FIlec.cpp调用函数func()的过程中,计算机是怎么运作的?因为func()的函数定义是放在Fileb.cpp里面的,而原型却又放在了另外一个头文件里面。难道在main()函数里面调用func()的时候系统又要再通过Filea这个头文件去找函数func()的定义吗?C++ primer里面说建议把函数原型,常量,类声明等放在头文件里面,再把这些内容的具体定义放在另外一个cpp文件里面,请问这样做到底有什么好处,如果把Filea和Fileb合并成一个文件,再让Filea去包含这个新文件有什么不同的吗?各位在实际编程中又是否是这样做?

[解决办法]
你贴的那些代码没格式,太难看清了。

把原形和各种声明放在头文件里是为了让阅读者能够清晰地看到这些他最想知道的内容。

把函数定义放到另一个文件也是为了不干扰阅读头文件,同时也不被头文件干扰你阅读函数定义。

如果你把它们合并到一个文件,就编译器来说这没什么问题。但对于想要阅读一个大程序的倒霉鬼来说你丫的太坑爹了!

呵呵呵
[解决办法]
在编译的时候,.h里的内容就会被复制到.cpp里去了,编译时只要有函数的声明就行,也就是extern fun()
到链接的时候在到各个.o文件里找

读书人网 >C++

热点推荐