美文网首页
C++宏的使用

C++宏的使用

作者: wywindz | 来源:发表于2018-11-14 09:37 被阅读0次
"##"与"#"

看一个栗子🌰:

#include <iostream>

int main(int argc, char** argv) {
    float dataA[2][2] = {{1,2}, {3,4}};
    float dataB[2][2] = {{5,6}, {7,8}};
#define ELEMENT(w,h)        \
    a##w##h = dataA[w][h],  \
    b##w##h = dataB[w][h]
    float ELEMENT(0,0),ELEMENT(0,1),ELEMENT(1,0),ELEMENT(1,1);
#undef ELEMENT
    std::cout << a00 << " " << a01 << " " << b00 << " " << b01 << std::endl;
}

上述示例中,ELEMENT(w,h)宏中“a##w##h”和"b##w##h"表示字符串"a00"(w=0,h=0)或"b11"(w=1,h=1),"##"符号把两个宏参数贴合在一起;

相对地,“#”可以把宏参数变为一个字符串,以下是一个将枚举转换为字符串的示例:

#include <iostream>

enum Color {
    RED, YELLOW, GREEN
};

std::string get_color_str(Color c) {
#define STR(c)      \
    case c:         \
        return #c;  \
        break

    switch(c) {
        STR(RED);
        STR(YELLOW);
        STR(GREEN);
    }

#undef STR
}

int main(int argc, char** argv) {
    Color c = RED;
    std::cout << get_color_str(c) << std::endl; 
}
为什么要即时#undef

#define是在编译期展开的,类似于文件的查找替换,它不尊重任何C++范围。所以为了避免宏的泛滥,要给宏手动增加作用域,即#define#undef之间的范围,同时为了避免错误,应当尽量以大写来命名宏。

do{...}while(0)技巧

do{...}while(0)是一个非常好用的增加程序健壮性的技巧,能够避免很多意想不到的问题,参见https://dream-notes.readthedocs.io/language/cpp/cpp_micro.html

相关文章

  • C++宏的使用

    "##"与"#" 看一个栗子?: 上述示例中,ELEMENT(w,h)宏中“a##w##h”和"b##w##h"表...

  • const常量与define宏定义的区别

    在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。以下是const和define...

  • c++技巧

    使用c/c++宏进行编程 c/c++中宏的是在预处理的过程中进行展开,可以用来进行函数的声明和定义. 在阅读lib...

  • CINTERFACE 宏的作用

    CINTERFACE宏用于在c++项目中使用c风格(规范)的COM 接口调用。

  • c++基础(宏)

    有关 c++ 中宏的定义以及使用是今天的重点内容。 C++ 的宏定义将一个标识符定义为一个字符串,源程序中的该标识...

  • C++编程思想重点笔记(下)

    上篇请看:C++编程思想重点笔记(上) 宏的好处与坏处 宏的好处:#与##的使用 三个有用的特征:字符串定义、字符...

  • Google c++ style 学习

    最近在整理c++代码,顺便参考谷歌的c++编译规范,总结了几点是我们日常碰到比较多的。 一 宏使用 C语言写多了容...

  • 使用awk命令将C/C++ 宏定义转换为Java定义

    使用awk命令将C/C++ 宏定义转换为Java定义 项目中Hal 层的头文件的宏定义数字需要被上层应用的Java...

  • 第九章 内联函数

    简介:C++中预处理器宏存在的问题,在C++中如何用内联函数解决这些问题以及使用内联函数的方针和内联函数的工作机制...

  • project_icrane

    icrane项目中学到的小知识点 一 c++中 DEBUG宏定义 使用宏定义可以方便的更改打印方式和格式。比如在q...

网友评论

      本文标题:C++宏的使用

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