当前位置: 首页 > 工具软件 > GNU Hurd > 使用案例 >

GNU编译器

能帅
2023-12-01

GNU编译工具

1、早起是GNU组织为了编译Linux源码而开发的一款C语言编译器,后期逐渐支持了各种平台的各种编程语言。

2、构建C/C++编译过程

​ 预处理–>编译–>汇编–>链接

​ gcc -E code.c -o code.i

​ gcc -S code.i -> code.s

​ gcc -c code.s -> code.o

​ gcc code.o -> a.out

3、支持、产生的文件类型

​ .h 头文件

​ .h.gch 头文件的编译结果

​ .c 源文件

​ .i 预处理文件

​ .s 汇编文件

​ .o 目标文件

​ .a 静态库文件

​ .so 动态库文件

4、常用参数

​ -E 预处理

​ -S 编译

​ -c 汇编

​ -g 生成添加调试信息

​ -I 指定额外的头文件的路径

​ -L 指定额外的库文件的路径 例:-lm

​ -D 在编译时定义宏

​ -o 指定编译结果的文件名

​ -Wall 以严格的语法来检查代码

​ -Werror 把警告当错误处理

​ -On 代码的优化级别

​ -std 指定编译的语法标准

​ -pedantic 对不符合ANSI标准的代码产生警告

5、所支持的预处理指令

​ #include 将指定的文件导入至当前文件 <> " "

​ #define 定义宏或者宏常量

​ ## 与#define配合使用,链接两个标识符

​ # 与#define配合使用,把标识符转换成字符串字面值

​ #undef 删除宏

​ #if 判定

​ #else 判断条件为假,可以与#if #ifdef #ifndef配合使用

​ #elif 分支判定

​ #endif 判定的结束标志

​ #ifdef 判定宏存在为真

​ #ifndef 判定宏不存在为真

​ #line n 指定该行的行号

​ #error 产生错误信息,并阻止产生编译结果

​ #warning 产生警告信息

​ #pragma once 保证头文件只被包含一次,相当于#ifndef/#define/#endif配合

​ 但并不是所有的编译器都支持

​ #pragma pack(1/2/4/8) 指定内存对齐和补齐的最大字节数,只能从大往小改,且必须是2的n次方

​ #pragma GCC poison <标识> 把某个标识符定义为病毒

​ #pragma GCC dependency <文件名> 如果文件的修改时间比当前文件晚,则产生警告

6、编译器预定义的宏

_func_ 获取当前函数名

_FILE_ 获取当前文件名

_LINE_ 获取行号

_DATE_ 获取当前日期

_TIME_ 获取当前时间

_linux_ / _APPLE_ / _WIN32_ / _WIN64_ 判断系统类型

_cplussplus_ 是否被C++编译器所编译

 类似资料: