Lobsters | 📄 原文链接 | 2026-08-11 收录

C89 里一个永远不会被修复的歧义:gcc 与 clang 的解读分歧

来源:sebsite.pw — 2026-08-10

📋 概述

作者在 C89/C90 标准里发现一处措辞歧义,gcc 与 clang 对隐式函数声明的解释互不一致。C89 有个'特性':调用不存在的函数时不会报错,而是被隐式声明为返回 int、参数未指定的函数;具体来说,调用表达式中未在作用域内的裸标识符会被插入为 extern int ()。这一特性在 C99 中被移除,因此这个歧义从未被澄清。文章从 `int f(int [sizeof(f())])` 这样的自引用声明出发,构建出 gcc 与 clang 分歧的有趣边界案例。

🔑 核心要点

💡 金句

标准里那些被时代淘汰的'特性',成了编译器永无定论的灰色地带。
← 返回 Lobsters 首页