c程序的预处理,编译,连接过程。
自己搜集并且整理,用于参考。
1.完整流程:
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件
pic from http://edmulroy.portbridge.com/oview.htm
2. c的预处理
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,
生成一个没有宏定义(#define Name );
没有条件编译指令(#ifdef,#ifndef,#else,#elif,#endif);
#ifndef ***_H
#define ***_H
............
#endif
没有特殊符号的输出文件(#include...);
这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
即将#include等的内容作为text复制黏贴成一个文件。
3.编译阶段
经过预编译得到的输出文件中,将只有常量。如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{,},+,-,*,\,等等。预编译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
4.链接
链接器将目标文件和你所用到的C++类库文件一起链接生成exe文件.
相关文档:
本文介绍了使用Pro*C/C++在Visual
C++环境下开发Oracle数据库接口程序的方法
设计思路其实这样:首先通过VC建立一个工程,自动化建立MAKEFILE,UNIX需要自己写MAKEFILE。
其次配置VC的环境,将PROC的.H,.LIB的路径加入DERECTIRY。写一个PC文件,即PROC文件。放到工程相应的目录下。然后把PC文件加入工程。使用PROCUI.E ......
表达式的副作用
运算符的优先级与结合性规定了表达式中相邻两个运算符的运算次序,但对于双目
运算的操作数,C++没有规定他们的计算次序。例如,对于表达式:
exp1 + exp2;
先计算 exp1 还是 exp2?不同的编译器有不同的做法。
在数学上,对于双目运算符,不论先计算哪一个操作数,要求最终计算结果一样。
在 C++ ......
编译程序,提示C盘空间不足,我清理c盘后,删除没用的软件后,发现空间还是很少,仅仅提升200M左右,很是奇怪,我得空间都被什么占去了呢?
经过查看,发现C:\Documents and Settings\tangh\Application Data\VisualAssist目录竟然有5G多,我的妈呀,上网一查,网上说他说C盘杀手,干脆栅了,没有什么影响!
......
发信人: RoachCock (反动学术权威), 信区: CPlusPlus
标 题: extern "C" 阅读笔记
发信站: 水木社区 (Fri Mar 7 00:22:47 2008), 站内
本以为很简单,仔细阅读了一下 C++ 标准,发现内容还不少。总结了一下。
要点:
函数类型,函数名,变量名具有语言链接性,language linkage。
语言链接性可能会影响到 ......
1.
printf("%.9lf\n",sum);
//输出小数点后9位不省去末尾多余的0
2.
printf("%.10g\n",sum);
//输出小数点后9位不省去末尾多余的0
3.
#include<iomanip>
cout<<setprecision(10)<<sum<<endl;
//输出小数点后9位省去末尾多余的0
4.
#include<iomanip>
cout.pre ......