• Log in
Anwen  Share and Create
  • Book
  • Movies
  • Music
  • SF
  • Goodlink
  • Asks
  • Eyeopen
  • Create

C++ 的多行宏定义方式

Sharer: 阅微堂 January 27, 2020 at 11:00 pm
Link Share :https://zhiqiang.org/coding/multi-line-macros.html - via RSS

C++的多行宏有标准定义方式,boost和folly库都采用了这种方式:

#define MACRO(X)        \
    do {                \
        X = 1;          \
        std::cout << X; \
    } while (0) 

其中\用来换行,其它最关键之处为实际运行语句用do {} while (0)包起来。这是为什么呢?

如果直接定义如下:

#define MACRO1(X)        \
    X = 1;              \
    std::cout << X; 

那么下面语句展开的结果可能不符预期:

    int x = 0;
    if (x == 0) 
        MACRO1(X);

直接用{}包起来也不行:

#define MACRO2(X)        \
    {                   \
        X = 1;          \
        std::cout << X; \
    }

它在下面语句展开会造成语法错误:

    int x = 0;
    if (x == 0) 
        MACRO2(X);
    else 
        x = 2;

在标准定义中引入了多余的语句,但在现代编译器会自动优化掉这些语句,不会增加指令。

作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。

Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.


Support author:
Author's Filecoin address:
Or you can use Likecoin to support author:
tags:编程 C++ 宏

0 0

2012-2018 Anwen All of our posts are default licensed under CC BY 4.0 About Help Changelog Telegram
Today Quote: 我们“记得”过去,但和这个“过去”相逢时却对面不识。思想总在回溯,但是时光一直前行,一旦分离,即是永诀。 --《时光的背叛》阿尔弗雷德·贝斯特