语法上对头文件里的内容没有任何限制
c++语法有个要求就是任何名字(类型、变量或者函数什么的)都要“先声明后使用”,注意这个要求的范围是在同一个文件里,就是说你这个.cpp里用到的东西必须在你这个.cpp里先有声明。 如果你要用string类的变量, 你就必须先写清楚这个类型的声明,编译器才知道怎么去编译这一段。 所以你要是不怕累的话你可以就挨个用到的地方重复写一下,但是因为这个可能很麻烦, 也可能会几个地方写的不一致, 解决办法就是采用一个头文件,每个地方都include这个头文件, 就相当于写了这个类型的声明。 include命令的作用就是把那个头文件的内容复制到这里来, 至于头文件里面到底写了什么其实是没有语法要求的,但是如上所述, 头文件既然主要是解决这个声明的问题, 所以当然你看到的头文件里主要内容还都是声明。 现在模板横行的时候由于一些技术问题造成头文件里也写了很多实现, 这个解释起来有点麻烦,你可以不搭理它
所以总结一下, C语言要求先声明后使用,所以用头文件来形成一个统一声明, 而之所以要防止重复include头文件,是因为一个cpp里一个名字是不可以被定义多次的, 所以对那些声明=定义的东西如果重复include了,编译的时候就容易出现重复定义的错误,当然对有些声明跟定义截然分开的情况来说,重复include也没问题
1、主要作用是声明,并不分配内存
2、不编译的还是不编译,编不编译不是看区域,而是看内容,就好像宏定义一样,放在哪里都是预编译的
3、头文件只对包含了该头文件的源程序文件起作用,所以4个cpp文件都需要包含这个头文件
~~~~~~~~
还有什么不清楚的可以直接用百度Hi
在每个.h里加上条件编译的开关,如,yourfile.h可以这样:
// .h文件最开始:
#ifndef _YOUR_FILE_H_
#define _YOUR_FILE_H_
// .h文件内容
// .h文件末尾:
#endif
1.头文件是否参与编译,我觉得应该参与的,你想啊,有些成员函数直接在类定义中实现的,还有些成员函数有默认参数值,如果头文件不参与编译的话,仅凭cpp文件是无法获取这些信息的。
2.那是肯定的了。
3.如果4个cpp文件都使用了string类,可以只在一个文件包含string,如文件A中#include
#include
using namespace std;
#ifndef string_h
#define string_h
void main()
{
...
}
#endif
应该是这样吧。。保证头文件只被编译过一次