0
如果我初始化這樣的變量:爲什麼常量表達式不給出錯誤?
static int i = 2 * 2/0;
然後,編譯器給我一個錯誤。
prog.c: In function 'main':
prog.c:5:23: warning: division by zero [-Wdiv-by-zero]
static int i = 2 * 2/0;
^
prog.c:5:17: error: initializer element is not constant
static int i = 2 * 2/0;
但是,如果我使用||
代替*
,像這樣:
static int i = 2 || 2/0;
那麼它的成功編譯。
根據Operator Precedence,優先*
高於||
。所以,首先2/0
操作評估。我對嗎?
那麼,爲什麼不static int i = 2 || 2/0;
給出錯誤?
'||'是短路的,所以表達式的第二部分根本不被評估。 – Groo
@格魯:請在答案部分的答案。 – Bathsheba
更有意思的是詢問是否a || 2/0'給出一個錯誤... –