美文网首页
第5周:程序结构——5.2 编译预处理和宏

第5周:程序结构——5.2 编译预处理和宏

作者: hyt222 | 来源:发表于2017-06-24 17:50 被阅读0次

1.编译预处理指令

# 开头的是编译预处理指令(其他语言也可使用,include 不是 C 语言关键字)。

它们不是 C 语言的成分,但是 C 语言离不开它们。

#define 用来定义一个宏

#define <名字> <值>     注意没有结尾的分号,因为不是 C 的语句。#define PI 3.14159

名字必须是一个单词,值可以是各种东西。

在 C 语言的编辑器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值完全的文本替换


2.宏

如果一个宏的值中有其他的宏的名字,也是会被替换的;

如果一个宏的值超过一行,最后一行之前的行末需要加 \

宏的值后面出现的注释不会被当作宏的值的一部分(空格、其他的标点符号都会被当作是宏定义的一部分)。

没有值的宏

#define _DEBUG

这类宏是用于条件编译的,后面有其他的编译预处理指令来检查这个宏是否被定义过了。

存在编译一部分代码,不存在编译另一部分代码。

预定义的宏

表达特殊东西,让编译器替你插入特殊的值。

__LINE__        源代码文件的行号,当前所在行号

__FILE__        源代码文件的文件名

__DATE__      编译时的日期

__TIME__       编译时的时间

__STDC__      当要求程序严格遵循 ANSIC 标准时,该标识符被赋值为 1 。


3.带参数的宏

#define cube(x) ((x)*(x)*(x))      宏可以带参数

带参数的宏的原则: 一切都要括号

整个值都要括号,参数出现的每个地方都要括号。

可以带多个参数 #define  MIN(a,b)   ((a)>(b)?(b):(a))    也可以组合(嵌套)使用其他宏。

在大型程序的代码中,带参数的宏使用非常普遍,代替函数运行运行效率高。

部分宏会被 inline 函数取代。

相关文章

  • 第5周:程序结构——5.2 编译预处理和宏

    1.编译预处理指令 # 开头的是编译预处理指令(其他语言也可使用,include 不是 C 语言关键字)。 它们不...

  • 10/19

    今天老师讲了预处理命令,宏定义分为无参宏定义,带参宏定义和条件编译。宏定义包括宏名和宏展开,和函数相比预处理有很多...

  • 静态库、动态库编译原理

    编译过程 预处理 -> 编译 -> 汇编 -> 链接 预处理 完成宏替换、文件引入,去除空行、注释等。 针对预处理...

  • 基础C语言知识串串香11☞宏定义与预处理、函数和函数库

    六、C语言宏定义与预处理、函数和函数库 6.1、编译工具链 源码.c->(预处理)->预处理过的.i文件->(编译...

  • 编译链接过程gcc以及Makefile

    编译链接过程 预处理 ----> 编译 ----> 汇编 ----> 链接 预处理:任务:处理宏定义,文件包含,条...

  • 10.19

    今天主要讲了预处理 主要是预处理的概念和预处理命令的使用 包括宏定义“文件包含”处理条件编译等等宏定义是老师重...

  • iOS预处理宏使用指南

    预处理宏使用指南 预处理就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。 常用宏说明 ...

  • 编译流程、动态库与静态库

    1、编译流程 编译分为四大过程: 预处理 编译 汇编 连接 预处理: 完成宏替换、文件引入,以及去除空行、注释等,...

  • JNI基础--编译流程、静态库与动态库

    编译流程 编译分为四大步骤: 预处理 编译 汇编 链接 预处理 ●完成宏替换、文件引入,以及去除空行、注释等,为下...

  • c高级自我学习(1)

    1 编译预处理和宏定 #undef指令删除前面定义的宏定义。 无参宏定义:宏名中没有参数。 1,宏定义中宏名用来表...

网友评论

      本文标题:第5周:程序结构——5.2 编译预处理和宏

      本文链接:https://www.haomeiwen.com/subject/dlmkcxtx.html