预处理面——宏是危险的(inline)

宏是危险的

宏可以充当函数使用,但又不是真正的函数。
宏展开体属于函数体出现时的定义,并不是函数真实调用时的定义。

#define CAL ((x)*(x)*(x))


---use--
int i;
......
int a=CAL(++i);//未定义或者说歧义

使用内联函数或者静态函数替换

inline int  cal(int i){
  return i*i*i;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 3,771评论 0 7
  • 目录 一.预处理的工作方式... 3 1.1.预处理的功能... 3 1.2预处理的工作方式... 3 二.预处理...
    朱森阅读 1,432评论 0 2
  • 宏,简单来说就是按预定义的规则来替换相应的文本内容,被替换的文本内容可以是对象也可以是函数。既然是替换,那就需要遵...
    金小俊阅读 4,711评论 6 54
  • 第一天 一.内联函数(inline) 函数调用的时候需要建立栈内存环境,进行参数传递,并产生程序执行转移,这些工作...
    陈果123阅读 1,145评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139