c语言怎么编译(详细示例)


本文摘自PHP中文网,作者anonymity,侵删。

gcc命令其实依次执行了四步操作:1.预处理(Preprocessing), 2.编译(Compilation), 3.汇编(Assemble), 4.链接(Linking)。

为了下面步骤讲解的方便,我们需要一个稍微复杂一点的例子。假设我们自己定义了一个头文件mymath.h,实现一些自己的数学函数,并把具体实现放在mymath.c当中。然后写一个test.c程序使用这些函数。程序目录结构如下:

1

2

3

4

├── test.c

└── inc

    ├── mymath.h

    └── mymath.c

程序代码如下:

1

2

3

4

5

6

7

8

9

// test.c

#include <stdio.h>

#include "mymath.h"// 自定义头文件

int main(){

    int a = 2;

    int b = 3;

    int sum = add(a, b);

    printf("a=%d, b=%d, a+b=%d\n", a, b, sum);

}

头文件定义:

1

2

3

4

5

6

// mymath.h

#ifndef MYMATH_H

#define MYMATH_H

int add(int a, int b);

int sum(int a, int b);

#endif

头文件实现:

1

2

3

4

5

6

7

// mymath.c

int add(int a, int b){

    return a+b;

}

int sub(int a, int b){

    return a-b;

}

1.预处理(Preprocessing)

预处理用于将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。gcc的预处理是预处理器cpp来完成的,你可以通过如下命令对test.c进行预处理:

gcc -E -I./inc test.c -o test.i

或者直接调用cpp命令

$ cpp test.c -I./inc -o test.i

上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-I指定头文件目录,这里指定的是我们自定义的头文件目录;-o指定输出文件名。

经过预处理之后代码体积会大很多:

X 文件名 文件大小 代码行数

预处理前 test.c 146B 9

预处理后 test.i 17691B 857

预处理之后的程序还是文本,可以用文本编辑器打开。

2.编译(Compilation)

这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程。编译的指定如下:

$ gcc -S -I./inc test.c -o test.s

阅读剩余部分

相关阅读 >>

C语言如何求最大值

如何用C语言实现单词统计

精通C语言能做什么

“\n\n”在C语言中是什么意思?

C语言实现向有序数组中插入一个数并保持有序

C语言简单数据类型有哪些

C语言*p++是什么意思?

C语言怎么定义宏定义

C语言规定在一个源程序中main函数的位置是什么?

C语言中return的用法

更多相关阅读请进入《C语言》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...