预处理——宏定义

本文详细介绍了C语言中的预处理过程,包括预处理的概念、宏定义(无参宏、带参宏及其副作用)、条件编译的概念和使用场景。宏在源码中用于替换表达式,提高可读性和运行效率,但存在直接文本替换的副作用。条件编译允许根据宏定义的状态决定编译哪些代码,常用于控制调试语句和根据不同配置编译不同代码块。
摘要由CSDN通过智能技术生成

一、预处理

概念:

        在C语言程序源码中,凡是以井号(#)开头的语句被称为预处理语句,这些语句严格意义上并不属于C语言语法的范畴,它们在编译的阶段统一由所谓预处理器(cc1)来处理。所谓预处理,顾名思义,指的是真正的C程序编译之前预先进行的一些处理步骤,这些预处理指令包括:

  1. 头文件:#include

  2. 定义宏:#define

  3. 取消宏:#undef

  4. 条件编译:#if、#ifdef、#ifndef、#else、#elif、#endif

  5. 显示错误:#error

  6. 修改当前文件名和行号:#line

  7. 向编译器传送特定指令:#progma

基本语法

- 一个逻辑行只能出现一条预处理指令,多个物理行需要用反斜杠连接成一个逻辑行
- 预处理是整个编译全过程的第一步:预处理 - 编译 - 汇编 - 链接
- 可以通过如下编译选项来指定来限定编译器只进行预处理操作:

gcc example.c -o example.i -E
 编译过程

编译过程分为以下四个阶段:

1)预处理:处理预处理语句(#开头的语句),删除注释、头文件展开、宏替换...
            

gcc  hello.c  -o  hello.i  -E

2)编译:将C语言程序转化为汇编语言
            

gcc  hello.c  -o  hello.s  -S

3)汇编:将程序代码转化为二进制代码
            

gcc  hello.c  -o  hello.o   -c

4)链接:将所有二进制代码合并起来,根据应用规则生成一个专门针对某个平台执行的应用程序镜像
            

gcc  hello.c  -o  hello

 二、宏

 1.概念

        宏(macro)实际上就是一段特定的字串,在源码中用以替换为指定的表达式。

#define PI 3.14

        此处,PI 就是宏(宏一般习惯用大写字母表达,以区分于变量和函数,但这并不是语法规定,只是一种习惯),是一段特定的字串,这个字串在源码中出现时,将被替换为3.14。

#include <stdio.h>

#define PI 3.14

int main()
{
    printf("圆周率:%f\n",PI);

    return 0;
}

宏的作用:

  • 使得程序更具可读性:字串单词一般比纯数字更容易让人理解其含义。

  • 使得程序修改更容易:修改宏定义,即修改了所有该宏替换的表达式。

  • 提高程序的运行效率:程序的执行不再需要函数切换开销,而是就地

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

提弦木偶OB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值