我正在开发跨平台项目,我发现了一些奇怪的东西。 在 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 */
}
最外面的括号((
...)
(是为了确保解析器将块视为表达式,而不是更典型的空代码块。