作者:蓝雪帝国666 | 来源:互联网 | 2022-12-10 13:25
在C11中,编写是合法的,例如:
int b = (some_function_returning_void(), 1020);
你会回来1020.但它不会让你写:
int b = (_Static_assert(2 > 1, "all is lost"), 304);
gcc回归
error: expected expression before '_Static_assert'
_Static_assert
有时候在表达式之外使用是不方便的,因为你运气好的基于预处理器宏的伪函数可以验证它们的参数.
1> AnT..:
_Static_assert
不幸的是,它是一种特殊的声明,而不是功能或操作者.除非你使用非标准的东西,否则你将无法将其滑入表达式.例如编译器扩展,如GCC的"语句表达式"
int b = ({ _Static_assert(2 > 1, "all is lost"); 304; });
要么
int b = (({ _Static_assert(2 > 1, "all is lost"); }), 304);