The joy of max

查看原文

这篇文章给出了最近的一次 Linux 内核的 max() 宏的实现,我们可以看到它和我们在 C 语言教材上入门的实现有多大的区别。

  • 这段代码视图解决的问题在这个的 Patch 中可以查看: PATCH v6 kernel.h: Retain constant expression output for max()/min(),简单来说,是想要让 max(a, b) 返回常量表达式,而非常量值。
  • 关于 __builtin_choose_expr, 这是 GCC 的一个 builtin funcion,可以在 __builtin_choose_expr (const_exp, exp1, exp2)const_exp 值为 整型常量时返回 exp1,否则 exp2.
  • 评论区有人给出了 remarkably sane and readable 的评价, 我认为确实没办法一眼看懂但稍微看一会儿也就看懂了,代码确实还蛮好读的。
  • 评论区还有个人问为什么非要这么写,有个回复蛮有意思:写出这样的代码需要对 C standard 阅读得非常仔细(例如 (int *)0 其实是 (void *)),此外还要对大量的 GCC 做测试。需要知道编译器不同版本不同实现对标准有不同的行为,这些都要被考虑到。

衍生思考:这种级别的基础代码在现在还在不断演化,说明软件行业的边界 Case 真是非常多。好好看文档,多做测试,多思考使用场景,是写出好代码的必备条件。