在Visual Studio中使用括号时编译错误,但在G ++ / CLang ++中传递

compile error when using parenthesis in visual studio but pass in g++/clang++

本文关键字:但在 CLang 错误 编译 Studio Visual      更新时间:2023-10-16

我正在开发跨平台项目,我发现了一些奇怪的东西。 在 Visual Studio 中,以下代码将失败。但是 Linux 环境中的 g++/clang++ 可以编译而不会出错。此外,我在VS上搜索关键字,但一无所获。有人知道吗?

int main(){
({;});
return 0;
}
error C2059: syntax error: '{'
error C2143: syntax error: missing ';' before '{'
error C2059: syntax error: ')'

Visual Studio 版本我有:Microsoft Visual Studio Professional 2019,版本 16.5.1

在Visual Studio中,它被解释为vc++。在 c++ 中, ;标记语句结束。所以你的代码 ({;});被编译器精确地取为 1 ({; 和 2 }(;作为一个在逻辑上不正确的陈述。检查 c++ 中编写代码的语法。我不知道 g++/clang。对不起。

使用我们看到的-pedantic -Werror标志编译clang++

dummy.cc:2:4: error: use of GNU statement expression extension [-Werror,-Wgnu-statement-expression]
({;});
^
1 error generated.

MSVC编译器(cl,通常由Visual Studio使用(不支持许多特定于GCC的非标准扩展,包括其语句表达式。

在这种情况下,块{;}被视为(无用的(语句表达式:

{
/* nothing */
;
/* nothing */
}

最外面的括号((...)(是为了确保解析器将块视为表达式,而不是更典型的空代码块。

相关文章: