c++基础(宏)

作者: zidea | 来源:发表于2019-05-02 05:56 被阅读3次
Cplusplus-tutorial-in-hindi.jpg

有关 c++ 中宏的定义以及使用是今天的重点内容。

C++ 的宏定义将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替。

其实宏就是在源码在编译前一个预处理指令,将代码中指定宏命令找到并以文本的形式进行替换而已。

宏命令可以减少开发者的工作,但是个人并不推荐过渡地使用宏,这样降低了代码的可读性。

#include <iostream>
#include <string>

#define WAIT std::cin.get()

int main(int argc, char const *argv[])
{

    WAIT;
}

是通过#define定义宏的,这里WAIT等同于std::cin.get(),在预处理阶段会将WAIT替换为std::cin.get()后再进行编译。
大家可能注意到后门面的;````。因为定义WAIT的代码段包含;。所以我们需要在WAIT```后面补充上;。这表明这是一种纯文本的替换。

#define WAIT std::cin.get();

int main(int argc, char const *argv[])
{

    WAIT
}

下面例子中我们用OPEN_CURY表示{

#include <iostream>
#include <string>

#define OPEN_CURY {

int main(int argc, char const *argv[])
    OPEN_CURY

    std::cin.get();
}

以上的例子并不会出现在实际开发中,也没有什么具体意义仅是为了说明宏的使用方法,以及宏是如何工作的而已。

#define LOG(x) std::cout << x << std::endl

int main(int argc, char const *argv[])
{
    LOG("hello");
    std::cin.get();
}

通过我们会控制输出作为一个宏来使用,这样可以简化我们一些控制输出代码。

#include <iostream>
#include <string>

#define MAIN            \
    int main()          \
    {                   \
        std::cin.get(); \
    }
MAIN

我们通常在开发调试阶段需要输出一些信息供监控程序运行状况,而在实际发布到生成环境时候处于一些安全问题我们可能需要去掉这些输出,这个时候我们就会用到宏进行实现

#include <iostream>
#include <string>

#ifdef PR_DEBUG
#define LOG(x) std::cout << x << std::endl
#else
#define LOG(x)
#endif

int main(int argc, char const *argv[])
{

    LOG("hello");
    std::cin.get();
}
  • 如果存在PR_DEBUG就将LOG(x) 定义为 std::cout << x << std::endl进行输出。否则定义为空不进行任何输出。
g++ macro1.cpp -D PR_DEBUG -o marco1

我们可以通过-D PR_DEBUG定义宏

#if PR_DEBUG == 1
#define LOG(x) std::cout << x << std::endl
#else
#define LOG(x)
#endif

可以通过给自定义宏PR_DEBUG传递参数来控制流程。

 g++ macro1.cpp -D PR_DEBUG=1 -o marco1

相关文章

  • c++基础(宏)

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

  • iOS如何搞定各种打印

    基础打印 C/C++/Objective-C中用于日志输出的预处理宏. 在Xcode中 : _cmd会返回一个SE...

  • 深入理解C++11 2.5 static_assert

    在C++中,标准在或者 头文件中未程序员提供了assert宏,例如: C++中,可以通过定义宏N...

  • 《大学专业生涯 计划书单》

    1、基础中的基础 →C++ 《C++Primer》 《EffectiveC++》 《Inside the C++ ...

  • [C++面试]宏相关问题

    1. 宏常量与宏函数 C++中用#define <宏名> <字符串>命令定义宏,在代码中将字符串替换宏名出现的位置...

  • C++面向对象基础(二)

    目录 C++ 基础(一) C++面向对象基础(二) 一、类 C++ 中可以使用 struct、class 来定义一...

  • C++中的内联函数

    1、常量与宏回顾 C++中的const常量可以替代宏常数定义,如: const int A = 3; <===>...

  • 面试

    程序员面试宝典 一、C++ 基础 1. 位运算 返回x二进制数中的1的个数? 2. 宏定义 3. const 3...

  • Java与C++的差异(基础)

    Java与C++的差异(基础)
    JAVA基础 C++的成员方法(函数) 在JAV...

  • c++技巧

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

网友评论

    本文标题:c++基础(宏)

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