dalla risposta di Charles Bailey qui: Gramma from conditional-expression
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
E
1 == 1 ? {1,2} : {3,4};
^ ^ are not expressions
questo è il motivo per cui il compilatore restituisce un errore del tipo:
error: expected expression before ‘{’ token // means after ?
error: expected expression before ‘:’ token // before :
Modifica come @Rudi Rüssel commentato:
seguente è un codice valido in c:
int main(){
{}
;
{1,2;}
}
usiamo {}
combinare dichiarazioni ;
in C.
nota: se scrivo {1,2}
quindi errore s (*expected ‘;’ before ‘}’ token*)
, perché 1,2
è un'espressione ma non una dichiarazione.
Per OP: ciò che è e ciò che è The Expression Statement in CBlock Statement e Expression Statements
EDIT2:
Nota: Come @ouah Typecase usa per convertirlo in espressione, sì:
per capire eseguire questo codice:
int main(){
printf("\n Frist = %d, Second = %d\n",((int[2]){1,2})[0],((int[2]) {1,2})[1]);
}
funziona così:
~$ ./a.out
Frist = 1, Second = 2
Hai provato questo: int perché [2] = (1 == 1)? {1,2}: {3,4}; – luckystars
sì: questo non fa differenza –
Non esiste nella sintassi dell'inizializzazione dell'array. – BLUEPIXY