C++ 预处理、编译、汇编、链接
来源:互联网 发布:淘宝五金店铺代理 编辑:程序博客网 时间:2024/06/05 19:16
一个C++程序一般需要经过以下几个步骤才能成为可执行程序:
那么,在以上的每一步中,编译器到底做了哪些工作呢?
一、编译器预处理
C++编译器自带预处理器,在程序编译之前,由预处理器对C++源程序完成预处理工作。
预处理主要将源程序中的宏定义指令、条件编译指令、头文件包含指令以及特殊符号完成相应的替换工作。
预处理指令#include用于包含头文件,有两种形式:#include <xxx.h>,#include "xxx.h"。
尖括号形式表示被包含的文件在系统目录中。如果被包含的文件不一定在系统目录中,应该用双引号形式。
在双引号形式中可以指出文件路径和文件名。如果在双引号中没有给出绝对路径,
则默认为用户当前目录中的文件,此时系统首先在用户当前目录中寻找要包含的文件,
若找不到再在系统目录中查找。对于用户自己编写的头文件,宜用双引号形式。
对于系统提供的头文件,既可以用尖括号形式,也可以用双引号形式,
都能找到被包含的文件,但显然用尖括号形式更直截了当,效率更高。
./表示当前目录,../表示当前目录的父目录。
stdafx.h
在VS中新建一个WIN32工程时,编译器一般默认会在主程序中添加一条#include"stdafs.h"语句。
而stdafx.h只包含如下几行引用头文件的代码:
<span style="font-size:18px;">// stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件//#pragma once#include "targetver.h"#include <stdio.h>#include <tchar.h>// TODO: 在此处引用程序需要的其他头文件</span>而在stdafx.cpp中,仅有一条语句:
<span style="font-size:18px;">// stdafx.cpp : 只包括标准包含文件的源文件// defineTest.pch 将作为预编译头// stdafx.obj 将包含预编译类型信息#include "stdafx.h"// TODO: 在 STDAFX.H 中// 引用任何所需的附加头文件,而不是在此文件中引用</span>
那么stdafx.h的作用是什么呢?
所谓预编译头,就是把一个工程中要使用的一些标准头文件预先编译,以后该工程编译时,
不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。
关于预编译头文件的简介,百度百科的说法如下:
关于第二点,srdafx.h这个头文件的文件名在VS2013中实在程序->属性->C/C++->预编译头中设置的。
如下图所示:
而关于stdafx.h的作用:百度百科的说明如下:
二、编译程序。
三、优化程序
四、汇编程序
五、链接程序
- C语言的预处理、编译、汇编、链接
- 预处理、编译、汇编、链接
- 预处理编译汇编链接
- 预处理 编译 汇编 链接
- C/C++程序编译流程(预处理->编译->汇编->链接)
- C/C++程序编译流程(预处理->编译->汇编->链接)
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接 .
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- Android Studio不能打开外来的项目:使用Gradle重建项目
- 九度oj 1139
- hdu 2824 The Euler function
- Just a Hook 线段树--成段更新
- HDU-4777 Rabbit Kingdom
- C++ 预处理、编译、汇编、链接
- UIImageView动画 、自定义View 和手势的简单实用 Tom 猫 全部功能实现
- 软件测试学习笔记2015/8/24
- POJ 1163 The Triangle
- hdu 2899 Strange fuction(二分+数学)
- 【cocos2d-x 3.7 飞机大战】 决战南海I (六) 保存玩家数据
- TextView属性
- HDOJ 2588 GCD(欧拉函数)
- 人间自有真情在