c++的工程文件的编译顺序
2015-01-08 22:28
316 查看
以前一直以为,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++的工程文件的编译顺序
- 用mingw编译C++工程;程序里面的cout<<"aaa";cmd运行c++程序,aaa内容在控制台不显示,如何将aaa输出到控制台屏幕并将控制台内容写到一个文件中。
- 编译F#多文件工程的文件顺序问题
- 用NMAKE创建VS2012 C++工程三 自动编译所有的cpp文件
- 结算采集程序IDEPinf,C++源文件编译顺序的问题
- Linux下多个文件的C++工程编写、编译要点
- 在vs2008下编译uclinux内核:工程文件发布
- c++ 编译之头文件
- Dev-C++ 编译多文件程序的方法
- 学习使用AutoMake1.9的自动生成工程文件(二)——flat型程序编译实践过程
- C++ 多个头文件的编译
- C++ 调用C 文件遇到的编译问题
- 如何编译VC工程中的asm文件
- c++将文件间的编译依赖性降至最低
- .NET工程中以 C 和 C++ 两种方式编译时,函数调用注意事项
- C++工程中头文件设置问题
- 有个VC++2005的工程文件,始终无法编译。请教哪位有空看看啊
- C++箴言:最小化文件之间的编译依赖
- 如何添加有新扩展名的文件,使之能当作C/C++源文件而被VC编译处理
- 在vs2005下编译gcc:工程文件