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;
}
相关推荐
言乐61 分钟前
Python体现逻辑回归和决策树的区别
开发语言·python·算法·决策树·逻辑回归
LOVE️YOU7 分钟前
Python 类与对象的核心逻辑:从 self、cls 到点号、括号与链式调用
开发语言·python
顶点多余13 分钟前
C/C++常见面试题
开发语言·c++
HugoStudio_SWAN14 分钟前
洛谷 B4575 [GESP202609 二级] 直角三角形——临场定义理解与边界质疑
c++·学习·程序人生·算法
(Charon)16 分钟前
【C++面试】右值引用与移动语义:std::move到底做了什么
开发语言·c++
TheITSea16 分钟前
JavaScript Web APIs
开发语言·前端·javascript
空心木偶☜20 分钟前
A2A2A(多智能体协作)
开发语言·python·ai·ai编程
红豆诗人21 分钟前
C++二叉搜索树:查找、插入和删除为什么这样写
数据结构·c++·算法
Cc.Y22 分钟前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
\光辉岁月/24 分钟前
2.java变量
java·开发语言·变量