美文网首页
第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 编译预处理和宏

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