C/C++中宏定义的使用

  • 宏在预处理阶段被替换为其定义的文本;
  • 如果宏从未被使用,则不会生成任何代码或数据,对程序无影响;
  • 宏本身不是常量或变量,仅是文本模板------其展开结果是否可修改,取决于内容;
  • 在代码中写出宏名时,会被预处理器替换为对应的文本(可能是值、代码、类型等);
  • 若需在宏中动态拼接标识符(如 C_Person),必须使用 ## 操作符,例如 C_##name;
  • 宏定义不受作用域影响,但是可以通过#define定义一个宏,也可以通过#undef取消定义;
  • 宏定义不作类型检查;
  • # 和 ##只能放在#define的后面:
    • #argument表示将argument转成字符串"argument";
    • argument1##argument2表示将表示将argument1和argument2拼接成一个标识符。
c++ 复制代码
#include <iostream>
#include <string>

#define DECLARE_SETTER(type, name) \
    void set_##name(const type &name) \
    { \
        m_##name = name; \
    }

#define DECLARE_GETTER(type, name) \
    type name() const \
    { \
        return m_##name; \
    }

#define DECLARE_VARIABLE(type, name) \
    type m_##name;

#define DECLARE_CLASS(className) \
class className \
{ \
public: \
    DECLARE_SETTER(std::string, name) \
    DECLARE_GETTER(std::string, name) \
\
    DECLARE_SETTER(int, age) \
    DECLARE_GETTER(int, age) \
\
private: \
    DECLARE_VARIABLE(std::string, name) \
    DECLARE_VARIABLE(int, age) \
};

#define TO_STRING(str) #str

int main()
{                                                                                                
    std::string str = TO_STRING(123);
    std::cout << str << std::endl;

    str = TO_STRING(Hello World);
    std::cout << str << std::endl;
    
    DECLARE_CLASS(Person)
    Person person;
    person.set_name("tom");
    person.set_age(23);
    
    std::cout << person.name() << " " << person.age() << std::endl;
    
    return EXIT_SUCCESS;
}
相关推荐
小成202303202652 小时前
C++~07补充
开发语言·c++
水饺编程3 小时前
第2章:Linux 基础,切换用户
linux·c语言·汇编
hold?fish:palm3 小时前
40 二叉树的直径
c++·leetcode
解决小子3 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
知识分享小能手4 小时前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
爱读书的小胖4 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
pipixia200334 小时前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
lunar_coder4 小时前
【C++】如何解决智能指针的析构函数,如何实现shared_ptr的引用计数以及解决shared_ptr的循环引用
c++·1024程序员节
白白白小纯5 小时前
C++进阶.多态
c++