typedefunsignedlonguint32_t;// 假设平台中 unsigned long 是 32 位
4. 关键区别
特性
#define
typedef
本质
预处理指令,基于文本替换
关键字,定义类型别名
作用时间
编译前(预处理阶段)
编译时
类型检查
无类型检查,完全基于文本替换
有类型检查,确保类型安全
作用范围
文件级(或直到 #undef)
遵循作用域规则
灵活性
更灵活,可用于定义常量、宏函数、条件编译等
仅限于定义类型别名
调试难度
难以调试,因为是文本替换,可能导致意外错误
易于调试,因为是类型定义
5. 示例对比
(1) 使用 #define 定义常量
#defineMAX100int arr[MAX];// 等价于 int arr[100];
在编译前,MAX 被替换为 100。
(2) 使用 typedef 定义类型别名
typedefint Number;
Number a =10;// 等价于 int a = 10;
Number 是 int 的别名,编译器会将其识别为 int。
(3) 对比复杂类型
// 使用 #define#definePTR_INTint*
PTR_INT a, b;// 等价于 int* a, b; (b 是 int 类型,不是指针)// 使用 typedeftypedefint* IntPtr;
IntPtr a, b;// 等价于 int* a, *b; (a 和 b 都是指针)
#define 会导致意外结果,而 typedef 更加安全。
6. 注意事项
(1) #define 的陷阱
副作用:宏函数可能引入副作用。
#defineSQUARE(x)((x)*(x))int a =5;int result =SQUARE(a++);// 展开后为 ((a++) * (a++)),导致未定义行为
括号问题:忘记加括号可能导致错误。
#defineADD(x, y) x + yint result =ADD(2,3)*4;// 展开后为 2 + 3 * 4,结果为 14(而非预期的 20)
题目描述
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。每列的元素从上到下升序排列。
class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, in…
环境 JDK 13 IDEA Build #IC-243.26053.27, built on March 16, 2025 Demo
MP3Parser
MP3
MP3全称为MPEG Audio Layer 3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.mp3的文件,基本保持源文件的音…