本文参考了以下博客
http://zhoulifa.bokee.com/6099379.html
http://www.cnblogs.com/skyofbitbit/p/3676538.html
1、在linux系统下,打开Terminal终端,进入到你的代码所在路径下:
方法一:在终端输入以下命令
gcc test.c //此处的test.c是我的源程序文件名,你可以改成自己的文件名
将在当前目录下产生一个可执行程序a.out,要运行程序,试试输入命令:./a.out
如果想要产生一个自己命令的程序,即程序名不是默认的a.out,可以用这种命令格式:gcc -o out-file source-file
注意:-o是小写的字母o,产生输出文件的o都是小写的字母o。
-o file 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果file没有指定,缺省文件名是a.out.
后面我们会说到大写字母O的使用。
比如:gcc -o result test.c
将到源程序test.c变成一个可执行程序result,运行这个命令看看你的成果吧:
./result
方法二:在终端输入以下命令
gcc test.c -o result
产生的效果与方法一相同.
如果你的程序源代码比较多,并且分在几个源文件里面,互相之前有调用现象,就要用gcc编译多个源文件了。命令格式如下:
gcc -o out-file source-file-a source-file-b source-file-c ...
可以把所有源代码文件联合编译生成一个程序out-file
3、关于优化处理 -O (大写字母O)
-O 优化编译过的代码
-ON 指定代码优化的级别为N,o<=N<=3
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。 这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。上图中,我们将优化阶段放在编译程序的后面,这是一种比较笼统的表示。
对于前一种优化,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。
后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另 外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重 要的研究课题。
经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。