当前位置: 首页 > ai >正文

宏函数 和 C++ 内联函数

当然可以,下面我会并列展示几个常见例子,对比 宏函数C++ 内联函数 的写法与效果,并指出各自的优劣。


✅ 示例一:平方函数

🔹宏函数写法

#define SQUARE(x) ((x) * (x))

🔹C++内联函数写法

inline int square(int x) {return x * x;
}

📌使用对比

int a = 5;
int b = SQUARE(a + 1);      // 展开为 ((a + 1) * (a + 1)) → OK
int c = square(a + 1);      // 也是 (6 * 6) = 36,安全

🧨 若写成 #define SQUARE(x) x * x,就会错:
SQUARE(1 + 2)1 + 2 * 1 + 2 = 1 + 2 + 2 = 5

在这里插入图片描述


✅ 示例二:获取最大值

🔹宏函数写法

#define MAX(a, b) ((a) > (b) ? (a) : (b))

🔹C++内联函数写法(推荐模板)

template<typename T>
inline T max(T a, T b) {return (a > b) ? a : b;
}

📌使用对比

int a = 10, b = 20;
int c = MAX(a++, b++);   // ❌ a 或 b 可能被加了两次(副作用问题)
int d = max(a++, b++);   // ✅ 只调用一次

✅ 示例三:是否为偶数

🔹宏函数写法

#define IS_EVEN(x) ((x) % 2 == 0)

🔹C++内联函数写法

inline bool is_even(int x) {return x % 2 == 0;
}

📌对比

if (IS_EVEN(4)) { /* OK */ }
if (is_even(4))  { /* OK */ }

两者在这里效果一致,但 inline 更安全、类型明确,调试也方便。


✅ 示例四:交换两个变量

🔹宏写法(有风险)

#define SWAP(a, b) { typeof(a) temp = a; a = b; b = temp; }  // GCC专用

🔹C++模板内联函数

template<typename T>
inline void swap(T& a, T& b) {T temp = a;a = b;b = temp;
}

📌对比使用

int x = 3, y = 7;
SWAP(x, y);     // ✅ 但依赖 typeof,不是标准
swap(x, y);     // ✅ C++标准,类型安全,推荐

📌 总结对比

特性宏函数(#define内联函数(inline
替换方式预处理阶段文本替换编译阶段函数调用/展开
类型安全❌ 无✅ 有类型检查
副作用控制❌ 可能多次求值✅ 每个参数只求值一次
可调试性❌ 调试困难✅ 可设置断点查看调用栈
模板支持❌ 无✅ 支持泛型(如 max<T>)
推荐场景非常短、极简替换绝大多数普通函数操作

http://www.xdnf.cn/news/1241.html

相关文章:

  • java知识点
  • Swoole-添加自定义路由实现控制器访问
  • 互联网三高-高性能之IO网络技术底层机制
  • 《TCP/IP详解 卷1:协议》之第四、五章:ARP RARP
  • CLIP | 训练过程中图像特征和文本特征的在嵌入空间中的对齐(两个投影矩阵的学习)
  • 武装Burp Suite工具:RouteVulScan插件_被动扫描发现漏洞.
  • python高级特性01
  • 代码随想录算法训练营Day34
  • (16)VTK C++开发示例 --- 转换文件格式
  • ProxySQL 性能调优工具推荐
  • day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)
  • 【随机过程】柯尔莫哥洛夫微分方程总结
  • 算力网络的早期有关论文——自用笔记
  • 在Pytorch中使用Tensorboard可视化训练过程
  • 基于DeepSeek的网络爬虫技术创新与实践应用
  • 若依如何切换 tab 不刷新
  • Google 开发者政策中心 - 3 月版
  • 【Spring】AutoConfigureOrder与Order注解的区别与使用方式
  • Gboard安卓版手势输入与多语言支持全面评测【输入顺滑】
  • Java数组
  • C++抽象基类定义与使用
  • linux kallsys
  • 探索Cangjie Magic:仓颉编程语言原生的LLM Agent开发新范式
  • mcp 客户端sse远程调用服务端与本地大模型集成实例
  • Python简介与入门
  • 多路转接select服务器
  • 数据结构:链表
  • 近几年字节测开部分面试题整理
  • 明远智睿2351开发板四核1.4G Linux处理器:驱动创新的引擎
  • Protues8.11安装只需5步骤即可。