từ Charles Bailey trả lời ở đây: Gramma from conditional-expression
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
Và
1 == 1 ? {1,2} : {3,4};
^ ^ are not expressions
đó là lý do trình biên dịch cung cấp lỗi như:
error: expected expression before ‘{’ token // means after ?
error: expected expression before ‘:’ token // before :
Sửa như @Rudi Russel nhận xét:
Sau đây là một mã hợp lệ trong c:
int main(){
{}
;
{1,2;}
}
chúng tôi sử dụng để kết hợp {}
báo cáo ;
trong C.
lưu ý: nếu tôi viết {1,2}
thì s lỗi (*expected ‘;’ before ‘}’ token*)
, bởi vì 1,2
là một biểu thức nhưng không phải là một tuyên bố.
Đối với OP: những gì là The Expression Statement in C và những gì là Block Statement và Expression Statements
edit2:
Lưu ý: Làm thế nào @ouah sử dụng typecase để chuyển đổi nó thành biểu, vâng:
Để hiểu chạy mã này:
int main(){
printf("\n Frist = %d, Second = %d\n",((int[2]){1,2})[0],((int[2]) {1,2})[1]);
}
Nó hoạt động như:
~$ ./a.out
Frist = 1, Second = 2
Bạn đã thử cách này: int why [2] = (1 == 1)? {1,2}: {3,4}; – luckystars
có: điều này làm cho không có sự khác biệt –
Nó không tồn tại trong cú pháp của việc khởi tạo mảng. – BLUEPIXY