c++的工程文件的编译顺序
2011-09-24 13:01
274 查看
以前一直以为,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. 包含头文件是有顺序的,因为包含头文件的顺序意味着该头文件在源文件进行展开的顺序。
今天经过同学指点并实践之后才发现,其实不是这样的,从中受益颇多:
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. 包含头文件是有顺序的,因为包含头文件的顺序意味着该头文件在源文件进行展开的顺序。
相关文章推荐
- c++的工程文件的编译顺序
- 编译F#多文件工程的文件顺序问题
- 用NMAKE创建VS2012 C++工程三 自动编译所有的cpp文件
- Linux下多个文件的C++工程编写、编译要点
- 结算采集程序IDEPinf,C++源文件编译顺序的问题
- 用mingw编译C++工程;程序里面的cout<<"aaa";cmd运行c++程序,aaa内容在控制台不显示,如何将aaa输出到控制台屏幕并将控制台内容写到一个文件中。
- 毕设开发之一-有关c++多文件编译
- 在一个flex工程中编译多个mxml文件.
- Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)
- c++与java区别的理解(二)--处理参数顺序和输出编译顺序
- 总结:m文件转化为c/c++语言文件,VC编译
- lua51的编译工程文件(VC71编译)
- android编译系统解析,执行make bootimage后mk文件的调用顺序详解
- .NET下编译C++代码时出现fatal error C1083: 无法打开包含文件:“iostream.h”: No such file or directory错误的解决方法.
- Visual Studio 2010 C++ 工程文件解读
- 在vs2008下编译uclinux内核:工程文件发布
- 在vs2003中编译ns2:工程文件
- C/C++程序编译步骤以及如何生成可执行文件
- 非常实用一段Android NDK编译脚本用于编译C/C++文件
- cocos2d-x的eclipse工程解决jni目录下main.cpp文件编译错误的问题