现在的位置: 首页 > 综合 > 正文

c++的工程文件的编译顺序

2013年12月12日 ⁄ 综合 ⁄ 共 603字 ⁄ 字号 评论关闭

 以前一直以为,vs在编译c++文件时候是从头文件开始编译的,而每个头文件对应的源文件只是头文件定义中的一些实现而已,源文件不参与编译。

今天经过同学指点并实践之后才发现,其实不是这样的,从中受益颇多:

c++编译的时候实际上只编译源文件,而不编译头文件;编译源文件的时候实际上是  在#include <>或者#include " "的地方,把包含的头文件中的

代码直接拷贝到源文件中进行编译,如果没有#include一个头文件,则在这个头文件中随便写什么东西都可以如在test.h头文件中:
#include "../chang/chang01.h"

namespace changchang {
 int a;
在test.cpp中:
#include <iostream>
//#include <test.h>
using namespace std;

void main()
{
}
在这里,如果在test.cpp中注释掉包含test.h的语句,则编译不会报错顺利通过,如果不注释掉,则因为包含头文件时候,在这行包含语句的地方会

把头文件中所有的东西拷贝到这里进行编译,而头文件中又是各种乱七八糟的不符合语法的东西,所以就会报错。

在这里学到的东西就是:
1. c++实际上是只编译源文件的
2. c++源文件中在包含头文件的地方,将被包含头文件中的代码全部拷贝进去进行编译;
3. 包含头文件是有顺序的,因为包含头文件的顺序意味着该头文件在源文件进行展开的顺序。

抱歉!评论已关闭.