GCC的学习
(图片来源于牛客项目课程)
备注:
1、默认Ubuntu 没有安装GCC (安装需要一定时间)
2、gcc编译c文件,g++编译c++文件
3、ctrl+l 清空命令行
gcc 介绍
优点: 跨平台(支持 多软件平台和硬件平台)
软件平台支持 windows linux Android
硬件平台支持 arm x86 sh4 mips …
visual studio 只支持windows平台
gcc hello.c —> 生成a.out可执行文件
gcc hello.c -o hello -o 指定生成文件名称 hello
./hello 执行hello*
编译过程
gcc 在生成一个可执行文件过程中,要做四步处理
-
预处理 (将.c 程序变成 .i的与处理文件)
gcc hello.c -E -o hello.i
第一步: 将 头文件 copy到源文件中
第二步: 会将注释删除掉
第三步: 将 宏定义 用宏值替换宏名
#include <stdio.h>
//create by yangwengang
//2021.11.11
#define MAX 100
int main()
{
int a = MAX;
//this is printf fun
printf(“hello world\n”);
printf(“MAX is %d\n”, MAX);
}
/usr/include/stdio.h
-
编译 (将c代码 变成汇编源代码)
gcc -S hello.c -o hello.s
cat hello.s //cat 可以查看文本文件
-
汇编 (将汇编代码变成 .o 目标文件) hello.o 中是机器码
gcc -c hello.c -o hello.o
-
链接 (将多个.o 文件 和 库文件 放在一起生成一个可执行文件)
gcc hello.c -o hello
如果直接gcc hello.c -S 直接跳过了-E(顺便完成了预处理,进行编译指定源文件)
同理 直接gcc hell.c (直接把四个步骤全部做了)
默认情况gcc代码检查不是很严格的,有些警告不显示
如果想显示警告
-Wall 显示所有警告, 建议加-Wall
-w 忽略所有警告, 建议不加此选项
gcc -O (性能、反汇编 等)
数越大 优化级别越高,linux程序员一般使用 -O2 会对程序在时间效率和空间效率上进行优化
gcc-O0 不优化
gcc -O1 hello.c -o hello1 //-O1 1级优化
gcc -O2 hello.c -o hello2 //-O2 2级优化
gcc -O3 hello.c -o hello3 //-O3 3级优化
gcc和g++的区别: