美文网首页
我不会C++,没问题,跟凯哥一起学(二)

我不会C++,没问题,跟凯哥一起学(二)

作者: violet小咔咔 | 来源:发表于2018-12-22 17:19 被阅读0次

有时候我们做东西,不管懂不懂,看不到效果和结果很多人就会失去进行下去的动力,失去自信。上一篇我们说到了简单的执行一个helloWorld.c。我不会C++,没问题,跟凯哥一起学(一)。让大家看到了效果.

有小伙伴问:这么吊?怎么从C语言变成输出的HelloWord?

小编我啊从四面八方search然后粘贴在这里简单的告诉大伙,从源码到出现helloword,经历了:1、预处理:生成.i的文件[预处理器cpp] 2、编译:将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3、汇编:有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4、链接:连接目标代码,生成可执行程序[链接器ld]


gcc编译过程.png
编译过程对应主要命令.png

又有小伙伴问:额,gcc\g++ 后面跟的那些参数是什么意思。

接下来我们继续讲,这里我整理了如下:

-o

最常用的编译选项,用于指定要生成的可执行文件的名称。

gcc -o hello hello.c

需要体会的一点是:gcc对于参数的位置无要求!比如也可以写作

gcc hello.c -o hello

惟一要注意的就是-o后面一定要紧跟要生成的可执行文件名。

编译出的可执行文件,在Windows下就是exe(executive)。但Linux下,后缀名无限制。一般不指定后缀就可以了。

-g

用于给生成的可执行文件加上调试信息,只有这样才可使用gdb调试。

gcc -g -o hello hello.c

同样参数-g的也可写在hello.c后面。

-c

终止链接器的运行,输出文件为汇编后的目标文件*.o

gcc -c hello.c

生成文件为hello.o

-O2

对源码进行优化,使编译出的程序,运行效率更高。注意是大写的英语字母O,不是阿拉伯数字0

gcc -O2 hello.c -o hello

O是<kbd style="box-sizing: border-box; font: 11px/10px SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; background-color: rgb(250, 251, 252); border-width: 1px; border-style: solid; border-color: rgb(198, 203, 209) rgb(198, 203, 209) rgb(149, 157, 165); border-image: initial; border-radius: 3px; box-shadow: rgb(149, 157, 165) 0px -1px 0px inset; color: rgb(68, 77, 86); display: inline-block; padding: 3px 5px; vertical-align: middle;">Optimize</kbd>之意。同样还有O1,但是优化效果不如O2,缺省是O0

-D

给编译的源文件传递一个宏。

gcc a.c -DHELLO -DWORLD=10 

相当于:

//在a.c中定义了
# define HELLO
# define WORLD 10

-E

gcc -E 指示gcc对源代码进行预处理,结果直接输出到终端。

实际上和命令cpp 源文件相同。cpp是c预处理器的意思,而非c++的意思。

-I

包含自定义头文件的路径

-S

生成汇编代码以.s为后缀。
默认是AT&T汇编语法,加选项masm=intel可生成Intel语法的汇编。

gcc -S -masm=intel test.c

相关文章

网友评论

      本文标题:我不会C++,没问题,跟凯哥一起学(二)

      本文链接:https://www.haomeiwen.com/subject/hbaikqtx.html