C/CPLUS

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

2022-01-19  本文已影响0人  NoBugException

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;
}

[本章完...]

上一篇 下一篇

猜你喜欢

热点阅读