는이 같은 변수를 초기화합니다.상수 표현식에서 오류가 발생하지 않는 이유는 무엇입니까?</p> <pre><code>static int i = 2 * 2/0; </code></pre> <p>그런 다음, 컴파일러는 나에게 오류를 제공합니다 :
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
@Groo : 답변 섹션의 대답을 참조하십시오. – Bathsheba
더 흥미로운 것은 'a || 2/0'은 에러를냅니다 ... –