强制将最令人烦恼的解析的歧义消除为函数声明

Force disambiguation of most vexing parse to be function declaration

本文关键字:歧义 声明 函数 烦恼      更新时间:2023-10-16

我在"最麻烦的解析"上看到的所有讨论都讨论了如何强制编译器将case视为带有初始值设定项的变量声明(而不是将实际解释视为函数声明)。例如,请参阅这个stackoverflow线程和Ask Coder的这篇文章。

我的团队有一条规则:强迫尽可能多的警告成为错误。目标是防止cruft潜入代码;成功的编译应该是静默的,禁用警告会导致灾难。这一切都很好,除了我被Most Vexing Parse在一个声明上咬了一口,这个声明实际上是按照我想要的方式解析的。

具体而言:

int some_function();

正如Ask Coder的文章中所示,这个代码片段确实触发了clang中的Most Vexing Parse警告,然后我们将其转换为一个错误,这让我大吃一惊。

在这里的语法中,我能做些什么吗?让它(a)成为一个合法的C声明(不仅仅是C++)和(b)不触发Most Vexing Parse警告?还是我必须跳#pragma舞,让这行代码周围的警告静音?

它能像一样简单吗

int some_function(void);