• 3 宏、条件编译


    3.1 宏

    • 宏定义

    说明:

    1)宏名一般用大写,以便于与变量区别;

    2)宏定义可以是常数、表达式等;

    3)宏定义不作语法检查,只有在编译被宏展开后的源程序才会报错;

    4)宏定义不是C语言,不在行末加分号;

    5)宏名有效范围为从定义到本源文件结束;

    6)可以用#undef命令终止宏定义的作用域;

    7)在宏定义中,可以引用已定义的宏名;

    8)用括号括住每一个参数,并括住宏的整体定义。

    • 宏常量

      • #define PI 3.14

      • 特殊宏定义

        __FILE__:宏所在文件的源文件名

        __LINE__:宏所在行的行号

        __DATE__:代码编译的日期

        __TIME__:代码编译的时间

    • 宏函数

    #define MYADD(x,y)  ((x)+(y))
    /*
    1)宏的名字中不能有空格,但是在替换的字符串中可以有空格。ANSI C允许在参数列表中使用空格;
    
    2)用括号括住每一个参数,并括住宏的整体定义。
    
    3)用大写字母表示宏的函数名。
    
    4)如果打算宏代替函数来加快程序运行速度。假如在程序中只使用一次宏对程序的运行时间没有太大提高。
    */
    

    3.2 条件编译

    • 一般情况下,源程序中所有的行都参加编译。但有时希望对部分源程序行只在满足一定条件时才编译,即对这部分源程序行指定编译条件。

    • 测试存在

    #define 标识符
    ...
    #ifdef 标识符
        程序段1
    #else
        程序段2
    #endif
    
    
    //举个栗子
    #define DEBUG
    
    #ifdef DEBUG
    void func()
    {
    	printf("debug版本调用
    ");
    }
    
    #else
    void func()
    {
    	printf("release版本调用
    ");
    }
    #endif
    
    • 测试不存在
    #define 标识符
    ...
    #ifndef 标识符
        程序段1
    #else
        程序段2
    #endif
    
    • 根据表达式定义
    #if 表达式
        程序段1
    #else
        程序段2
    #endif
    
    
    //举个栗子
    #if 1
    void func()
    {
    	printf("debug1版本调用
    ");
    }
    #else
    void func()
    {
    	printf("debug2版本调用
    ");
    }
    #endif
    
  • 相关阅读:
    南阳oj 82 迷宫寻宝(一)
    杭电 oj 1016 Prime Ring Problem
    杭电 oj 3350 #define is unsafe
    南阳oj 366 全排列 D的小L
    南阳oj 32 组合数
    部分和问题 南阳oj 1058
    HNUSTOJ 1516:Loky的烦恼
    HDU-1874 畅通工程续
    T-聊天止于呵呵
    P-残缺的棋盘
  • 原文地址:https://www.cnblogs.com/chungeyuan/p/12753903.html
Copyright © 2020-2023  润新知