GCC扩展命令
-
system()函数和printf()函数的区别
-
system()函数:执行系统命令
-
printf()函数:输出信息
-
system()函数可执行的一些命令:
system("cmd");//控制打开dos窗口 system("calc");//控制打开计算器 system("mspain");//控制打开画图工具 system("notepad");//控制打开记事本
-
GCC编译四步骤:(源文件变成可执行文件的过程)
-
预处理:gcc -E hello.c -o hello.i (-E)
-
编译:gcc -S hello.i -o hello.s (-S)
-
汇编:gcc -c hello.s -o hello.o (-c)
-
链接(无参数):gcc hello.o -o hello.exe
注:-o是重命名 多次执行会覆盖掉
或者直接使用一个命令:gcc hello.c -o hello.exe
-
PS:ctrl+d批量复制快捷键(复制当前一段内容)
-
步骤细节:
-
预处理阶段:
-
头文件展开(不检查语法错误,可以展开任何文件,只提示warning继续生成文件)
-
宏定义替换(将宏名替换为宏值)
-
替换注释(变成空行)
-
条件编译(根据条件展开指令)
-
-
编译阶段:
-
将C程序翻译成汇编指令
-
逐行检查语法错误(报错error,不生成文件,若有之前生成的会被删除掉,是整个4步骤中最耗时的过程)
-
-
汇编阶段:(生成二进制机器指令,以16进制来显示)
-
翻译:将汇编指令翻译成二进制编码生成目标文件
注:乱码:以一种错误的方式打开该文件,解码方式错误
-
-
链接阶段
-
数据段合并
-
数据地址回填
-
库引入
-
-
总结:(例如:可直接从.c文件生成.o文件,引入-c命令即可)
-
可以不按照顺序执行命令,跳过步骤也可以正常生成文件
-
不可以逆向执行命令,会将之前所生成的文件直接删除
-
例如:gcc hello.exe -o hello.i执行命令将报错并删除hello.i文件