我试过阅读标准(secs 6.5和6.8 of c99)的relavent部分,但是这导致我更加困惑,没有明确的答案。这是有问题的代码:C语言块语句,逗号和控制表达式C
#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已设置。
这是我不希望看到的代码的类型 - 即使它编译^ _^ –
OT:对于readabilty的缘故按规定使用资金的惯例'#define's:'#定义BLOCK ...'但是'#define block ...' – alk
以这种方式组合语句表达式的'({'和'})''是非常糟糕的风格。海湾合作委员会的人至少应该创建特殊的令牌,以抑制这样的事情。 –