q语言编译c,gcc编译C语言的步骤

一、预处理

gcc -E  xx.c------> 生成 .i  文件

进行预处理工作  不会自动生成文件

工作内容:

① 宏替换、头文件导入、条件编译等

② 去掉注释内容

二、编译

gcc -S  xx.i ------->生成汇编程序.s

检查语法错误  生成汇编程序

工作内容:

检查源代码或者经过预处理之后代码的语法错误

三、汇编

gcc -c xx.s------->生成目标文件 .o

工作内容:

把汇编代码汇编成目标文件(二进制)其实是用as命令

四、链接

gcc  xx.o------>生成可执行程序a.out

链接一个或者多个目标文件生成可执行程序   默认是a.out   其实是用ld命令

工作内容:链接函数调用

gcc *.o    链接所有的目标文件 生成 可执行程序

-o  可以指定目标文件名字

注意:

语法错误检查:在编译阶段

函数调用检查:在链接阶段

预处理指令

在预处理阶段就会进行处理的指令

以#开头的指令

一、#include   包含头文件

导入头文件中的代码

调用了标准库的函数时需要导入头文件

#include <> 与 #include ""的区别

<> 从系统指定的路径(可配置)搜索包含的头文件

"" 从当前目录搜索包含的头文件,

如果在当前目录下没有找到,则去系统指定的目录下搜索

如果是包含自己写的头文件时用"",包含标准库的一般用<>

二、#define

宏名 一般用大写字母

1.宏定义 在预处理阶段进行简单的宏替换

#define PI 3.14

2.宏函数

#define POW(x) ((x)*(x))

预处理阶段不进行运算 只进行替换

注意:不要在宏定义后面加上 ;

宏函数需要给每个参数都加上小括号 以及最后整体加上小括号 避免产生歧义

宏函数和参数列表之间不能有额外的空格

3. \ 可以连接宏定义

一般而言 宏只能放在一行 但是可以通过 \ 来连接多行 作为同一个宏定义

4. # 可以把一个标识符变成一个字面值字符串

#define TOSTR(x) #x

#define print(x) printf(#x"=%d\n",x)

5. ## 可以生成新的标识符

6.宏的作用:

① 方便修改

② 简化编程

③ 参数没有类型限制 灵活

7.宏可以在代码中用 #define 定义,也可以在编译时用 -D 宏名称 来定义宏

三、条件编译

分支选择语句   只有当执行时才确定执行哪一个分支 会把两个分支的语句都编译到代码中去

编译时 可以选择 编译的代码

#if 根据宏的值来进行条件编译

#elif

#else #否则

#endif #条件编译结尾

#ifdef #if defined 如果定义了某个宏 用宏是否定义来进行条件编译

#ifndef 如果没有定义某个宏

#undef 删除一个宏 取消宏定义

#ifdef/#ifndef/#if defined #endif //宏是否定义来进行条件编译

#if /#elif #endif //宏的值来进行条件编译

头文件卫士:

用于防止多次引用该头文件

如果不加 程序稍微复杂一些就可能引发重复定义的错误

#ifndef XXX_H__

#define XXX_H__

#endif //XXX_H__

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值