#ifndef #define #endif 的格式是为了防止头文件被重复引用,重复声明影响编译时间。
二:为什么头文件中没有源函数
我曾经以为头文件中会有函数的具体实现过程,但实际并没有,取而代之的是一些声明。于是当我也试着写头文件时,我才在想我该怎么做才能让这些在头文件中没有具体代码实现过程的函数能被有效且有目的地调用呢?
带着这个目的我去搜索,突然了解到编译过程中有链接这一过程,所以好像不需要特意地去写明白头文件中所声明的函数原型写在哪个源文件中,链接过程中自动就能找到。
三:头文件中不要定义函数
也就是说某个名字的函数定义只需出现一次,这一次就是在源文件中。以后要用它时只要找到任意包含声明它的头文件,并 #include 这个头文件即可使用了。
原因是编译器在编译时候的某一个编译单元是.o,重复定义会导致链接过程中.o文件重复,任何变量或者函数只能有一个定义,否则在链接时候,链接器不知道要使用哪个.o文件中的定义。所以链接器讲产生重复定义的链接错误。
[ 不知道有没有人和我想的一样:既然说 #ifndef 可以防止重复声明,那可不可以防止重复定义呢。然后我试了一下,结果还是会报错:multiple definition of 'f' 即对函数f多次定义了。所以,头文件中不要定义函数就对了!]
附上两篇参考文章
浅谈头文件(.h)和源文件(.cpp)的区别 - scyq - 博客园 (cnblogs.com)
(转)头文件中不要去定义函数 - SAITAMA - 博客园 (cnblogs.com)



