C语言编译到运行

C语言从源代码到可执行文件需要经过以下步骤
      C语言源代码->预处理->汇编->翻译->链接->计算机执行

预处理

      作用: 预编译过程主要处理源代码文件中以“#”开始的与编译指令
      命令:gcc -E hello.c :只做预处理,不做后续的动作。
什么是预处理命令?
      所有以“#”开头的语句,都叫做预处理语句。
以下显示了部分的预处理命令

#define bit(n) (1<<(n))
#define max(a,b) (((a)>(b))?(a):(b))
#undef
#include 
#if 0
#ifndef
#endif
#else
#elif
#ifdef
#line
#error
#parama

预处理宏:
LINE
FILE
TIME
DATE
STDC

汇编

      作用:将高级语言转换成汇编语言
      命令:gcc -S hello.c :只汇编,不翻译。

编译

      作用:编译器能够识别代码中的词汇、句子以及各种特定的格式,并将他们转换成计算机能够识别的二进制形式,这个过程称为编译(Compile)。C语言代码经过编译以后,并没有生成最终的可执行文件(.exe 文件),而是生成了一种叫做目标文件(Object File)的中间文件(或者说临时文件)。
      编译是针对一个源文件的,有多少个源文件就需要编译多少次,就会生成多少个目标文件。

      命令:gcc -c hello.c :只编译,不链接。

链接

       作用:编译只是将我们自己写的代码变成了二进制形式,它还需要和系统组件(比如标准库、动态链接库等)结合起来,这些组件都是程序运行所必须的。链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。
       命令:gcc *.o -o target

      多个源文件的编译

       1. 对每一个源文分别进行编译。gcc -c *.c -o *.o
       2. 最后统一链接。gcc *.o -o target

gcc命令参数

      -o :对输出的目标文件或可执行文件重命名。
      -c : 只编译不链接
      -I :指定头文件位置
      -L :指定库文件所在的位置
      -l :指定库文件名

你可能感兴趣的:(C)