Mã sau đây biên dịch mà không gặp sự cố:
int main() {
printf("Hi" "Bye");
}
Tuy nhiên, điều này không biên dịch:
int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}
lý do cho điều đó là gì?
"Hi"
và "Bye"
là chuỗi ký tự , không phải chuỗi được sử dụng trong thư viện tiêu chuẩn C. Với chuỗi ký tự , trình biên dịch sẽ nối "H\0i" "B\0ye"
. Không giống vớisprintf(buf,"%s%s", "H\0i" "B\0ye");
a (some_condition ? + : - ) b
printf("Hi" ("Bye"));
sẽ không hoạt động - nó không yêu cầu toán tử bậc ba; dấu ngoặc là đủ (mặc dù printf("Hi" test ? "Bye" : "Goodbye")
cũng sẽ không biên dịch). Chỉ có một số lượng giới hạn mã thông báo có thể theo sau một chuỗi ký tự. Dấu phẩy ,
, dấu ngoặc vuông mở, dấu ngoặc vuông [
đóng ]
(như trong 1["abc"]
- và vâng, thật khủng khiếp), dấu ngoặc tròn )
đóng, dấu ngoặc nhọn đóng }
(trong bộ khởi tạo hoặc ngữ cảnh tương tự) và dấu chấm phẩy ;
là hợp lệ (và một chuỗi ký tự khác); Tôi không chắc có bất kỳ người khác.