這個int c = (a==b)
正是我想在我的C程序中說的,用GCC編譯的。我可以做到,顯然(它工作得很好),但我不知道它是否會導致未定義的行爲。我的程序不會與其他編譯器或其他體系結構一起編譯。這是合法的ANSI C嗎?謝謝。對作業右側的評估
Q
對作業右側的評估
1
A
回答
4
1
int c = (a == b);
這是完全合法的。初始化是C標準(C99§6.7.8)的一部分,右側可以是任何賦值表達式,包括a == b
(當然,假設a
和b
被定義並且具有可比類型)。
+0
謝謝。正是我需要的答案。 – 2012-02-09 20:14:42
0
那麼,這取決於a
和b
是什麼類型。如果他們是支持平等檢查的類型,那麼是的,這是完全合法的。
1
如果在塊範圍聲明c
,這是完全有效的。
在文件範圍聲明時,它是無效的,因爲初始化器必須是常量表達式。
a == b
是一個表達式,在這個意義上說與另一個表達式a + b
或a & b
沒有什麼不同。
有什麼不明確的地方呢? o_O – kennytm 2012-02-09 20:11:08
什麼編譯器不接受它? – cnicutar 2012-02-09 20:11:54
所以,你的意思是答案是「是的,這是合法的」?你爲什麼會用另一個問題回答一個問題? – 2012-02-09 20:12:16