美文网首页C/CPLUS
C++<第十一篇>:宏定义define用法

C++<第十一篇>:宏定义define用法

作者: NoBugException | 来源:发表于2022-01-19 20:03 被阅读0次

    define分为无参宏定义和有参宏定义

    一、无参宏定义

    无参宏的宏名后不带参数。

    其定义的一般格式为:

    #define 标识符 字符串
    

    # 表示预处理命令,凡是以 # 开头的均为预处理命令;
    define 是宏定义关键字;
    标识符 为所定义的宏名;
    字符串 可以是常数、表达式、格式串;

    程序中,常常使用 表达式 做为 字符串,如:

    #include <iostream>
    #define M (x + 2)
    
    using namespace std;
    
    int main()
    {
    
        int x = 1;
    
        x = x * M;
    
        cout << x << endl;
    
        return 0;
    }
    

    在预处理时,代码中所有的宏名M将被替换成 (x + 2),输出的结果为:3;

    关于无参宏定义还需要说明以下几点:

    (1)字符串可以是任何字符,比如常量:
    
        #define PI 3.1415926
    
    (2)宏定义并不是语句,末尾不需要添加分号;
    
    (3)宏定义不能在函数内,其作用域从宏命令到程序结束,如果想要提前结束,使用它可以提前结束:
    
        #undef PI
    
    (4)习惯上,宏名用大写的英文字母表示,不过写成小写是被允许的;
    
    (5)可以使用宏定义表示数据类型
    
        #include <iostream>
        #define M struct MyStruct
        #define INTEGER int
    
        using namespace std;
    
        M
        {
            INTEGER index;
        };
    
        int main()
        {
            M m;
    
            m.index = 1;
    
            cout << m.index << endl;
    
            return 0;
        }
    
    使用 typedef 也可以表示数据类型,需要注意的是 define 和 typedef 的区别:
    define 本质上是字符串的替换,如果使用 define 替换类型是一个比较危险的事情,然而 typedef 却没有这个风险。
    
    二、带参宏定义

    C++语言允许宏带有参数。

    带参宏定义的一般形式为:

        #define 宏名(形参表) 字符串
    

    代码演示:

    #include <iostream>
    #define M(x) (x + 1)
    #define Max(a, b) (a > b ? a : b)
    
    using namespace std;
    
    int main()
    {
        int k = M(2);
        cout << k << endl;
    
        int q = Max(2, 3);
        cout << q << endl;
        return 0;
    }
    

    [本章完...]

    相关文章

      网友评论

        本文标题:C++<第十一篇>:宏定义define用法

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