This question already has answers here:
Closed 5 years ago.
Are compound statements (blocks) surrounded by parens expressions in ANSI C?
(2个答案)
我试过阅读标准的相关章节(c99的第6.5和6.8节),但这让我更加困惑,没有一个明确的答案。这是所讨论的代码:
代码是否有效c99/c1x?它在clang和gcc上编译,即使设置了-Wall和-Wextra,也不会产生任何错误。
(2个答案)
我试过阅读标准的相关章节(c99的第6.5和6.8节),但这让我更加困惑,没有一个明确的答案。这是所讨论的代码:
#include <stdio.h>
#include <time.h>
int t;
#define block {\
int temp = 1; \
t = time(NULL); \
if (t == (time_t) -1 && temp) puts("turbulance ahead!");\
}
int main(){
if (((block), t%2)) {
puts("nice 'n even");
}
else {
puts("odd..");
}
return 0;
}
代码是否有效c99/c1x?它在clang和gcc上编译,即使设置了-Wall和-Wextra,也不会产生任何错误。
最佳答案
不。在标准C(C99/C11)下无效。
它在GNU C中是有效的,这个扩展名叫做statement expressions。
关于c - C中的块语句,逗号和控件表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21778013/
10-13 07:03