c++ define 用法

PS:凡是以 # 开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

宏定义

宏定义分为有参和午餐,一般而言无参更多用constexpr代替

  1. 无参
cpp 复制代码
#define  标识符  字符串

// example
#define Tang Tang Panfan
  1. 有参
cpp 复制代码
 #define  宏名(形参表)  字符串

// example
#define add(x+y) (x+y)

特殊操作符

define 中的特殊操作符有\,#,##,#@,... and VA_ARGS

  1. **
    首先明白,宏定义一定是一行,这样就造成了可读性差,想要多行,可以
    宏多行定义
cpp 复制代码
#define PRINT               \
{                           \
    printf("define 1\n");   \
    printf("define 2\n");   \
    printf("define 3\n");   \
}

PS:最后一行不能加****,这是因为该符号表示将下一行链接起来;每一行最后不能加空格,否则会转义

  1. #

把语言符号转化为字符串,即字符串化
直接转为字符串

cpp 复制代码
#define PRINT(x) printf(#x "is val: %d\n", x)
int a = 1;
PRINT(a)
// a is val: 1

#define SUM(a,b) printf(#a " + "#b" = %d\n",((a) + (b)))    //宏定义,运用 # 运算符
SUM(1 + 2, 3 + 4);                                          //宏调用
//输出结果:1 + 2 + 3 + 4 = 10
  1. ##
    用于字符连接
cpp 复制代码
#define EPS(n) (1e##-##n)
#define EPS(n) (1e-n) // 报错
  1. #@
    字符化操作符
    上面的**#**是字符串化^ _ ^
  2. ...
    VA_ARGS 是一个可变参数的宏
    实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏__VA_ARGS__就可以被用在替换部分中,替换省略号所代表的字符串
cpp 复制代码
#define PRINT(...) printf(__VA_ARGS__)
int main()
{
    int wt=1,sp=2;
    PRINT("hello\n");
    //输出:hello
    PRINT("weight = %d, shipping = %d",wt,sp);
    //输出:weight = 1, shipping = 2
    return 0;
}

取消宏

cpp 复制代码
//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]

防止文件冲突

cpp 复制代码
#ifndef __XXX__
#define __XXX__
...
文件内容
...
#endif
相关推荐
Anastasiozzzz3 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步7 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机18 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经26 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L36 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
我在人间贩卖青春1 小时前
C++之this指针
c++·this
云姜.1 小时前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法
陳10301 小时前
C++:红黑树
开发语言·c++