我試過閱讀標準(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
以這種方式組合語句表達式的'({'和'})''是非常糟糕的風格。海灣合作委員會的人至少應該創建特殊的令牌,以抑制這樣的事情。 –