Wenn ich Variable wie folgt initialisiert:Warum gibt ein konstanter Ausdruck keinen Fehler?
static int i = 2 * 2/0;
Dann Compiler mir einen Fehler geben.
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;
Aber, wenn ich ||
statt *
wie folgt verwenden:
static int i = 2 || 2/0;
dann ist es erfolgreich kompiliert.
Gemäß Operator Precedence, Vorrang von *
höher als ||
. Also, zuerst 2/0
Operation ausgewertet. Habe ich recht?
Also, warum gibt static int i = 2 || 2/0;
einen Fehler nicht?
'||' ist kurzgeschlossen, daher wird der zweite Teil des Ausdrucks überhaupt nicht ausgewertet. – Groo
@Groo: Antworten im Bereich Antworten bitte. – Bathsheba
Interessanter ist zu fragen, ob 'a || 2/0' gibt einen Fehler ... –