GCC – GNU C Compiler

GCC – GNU C Collection(如今)

GNU是一个组织 gcc是编译器,将人类语言翻译为机器语言

使用

gcc -o output gcc -o 输出文件名 输入文件名 -v 显示过程

//在编译时define,相当于文件内define
gcc -DABC1 ==> #define ABC1

编译过程

  • 预处理(gcc -E) 把define,include替换出来

    • 输入c
    • 输出i文件
  • 编译cc1 (gcc -S)

    • 输入c/i
    • 输出s文件
  • 汇编as (gcc -c)

    • 输入s
    • 输出o文件
  • 链接collect2(gcc -o)

    • 输入o与库o
    • 输出最终程序
  • define 和 include 不是关键字,因为他们在预处理阶段就被替换了,而关键字是在编译环境中被处理的。

错误

预处理错误

找不到库

#include "" //当前目录下找
#include <> //环境变量找

-I 找找不见的库,指定一个目录去找 gcc -I -o …..

语法错误

  1. 分号
  2. 括号

链接错误

函数声明未定义或者函数多定义

预处理器使用

  1. #include–>包含一个源代码文件
  2. #define 宏名 宏体–>不进行语法检查
  3. /#undef 取消已定义宏
  4. #ifdef \ifndef #else #endif
    1. 程序维护时,做开关
    2. 日志开关
  5. 预定义宏(直接用,可以快速定位)
    1. _FUNCTION_-函数名称
    2. _FILE_-函数所在文件
    3. _LINE_-函数行
  6. #error 停止编译并显示错误信息

#与##

# 字符串化 ## 连接符号

#define ABC(x) #x
#define ABCD(x) myday##x

ABC(1) == 1
ABCD(1) == myday1