C++ 预处理、编译、汇编、链接
来源:互联网 发布:淘宝有货到付款的吗 编辑:程序博客网 时间:2024/06/06 16:44
一个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>
<span style="font-size:18px;">// stdafx.h : 标准系统包含文件的包含文件,// 或是经常使用但不常更改的// 特定于项目的包含文件//
- <span style=“font-size:18px;”>// stdafx.cpp : 只包括标准包含文件的源文件
- // defineTest.pch 将作为预编译头
- // stdafx.obj 将包含预编译类型信息
- #include “stdafx.h”
- // TODO: 在 STDAFX.H 中
- // 引用任何所需的附加头文件,而不是在此文件中引用
- </span>
<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++程序编译流程(预处理->编译->汇编->链接)
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接 .
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- 预处理,编译, 优化, 汇编, 链接
- Codeforces 567E President and Roads 题解
- C++二维数组作为函数参数传递
- 三个例子,搞懂java中的main参数String[] args
- 23个设计模式
- java语言基础
- C++ 预处理、编译、汇编、链接
- JavaScript 相等(==)与全等(===)操作符
- python统计考试成绩代码参考
- MyEclipse中快捷键组合
- java中BigDecimal的使用
- Charles安装和抓包
- 大根堆小根堆及其应用
- java基础教程:基础语法之其他(5)
- java IOStream 流学习汇总