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++基础(宏)

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