Tại sao điều này không thể biên dịch?Sử dụng macro có chuỗi bị lỗi trên VC 2015
char programDate[] = "("__DATE__")";
Nhưng điều này biên dịch tốt (xem gian):
char programDate[] = "(" __DATE__")";
tôi biết VC2015 bây giờ hỗ trợ đen-nhà khai thác. Nhưng không nên có trong giai đoạn biên dịch? __DATE__
nên được xử lý bởi bộ xử lý trước. Chuyện gì đang xảy ra ở đây?
Tôi đã nghĩ về một số vấn đề kết hợp với tính năng tạo Unicode/không phải Unicode - nhưng nó không có tác dụng. Nó không chỉ phát hành với các macro được xác định trước, nhưng với người dùng định nghĩa thêm:
#define MACRO "abc"
char data[] = "("MACRO")";
EDIT:
Error C3688 invalid literal suffix '__DATE__'; literal operator or literal operator template 'operator ""__DATE__' not found
Tôi nghĩ bạn có thể đang nói về điều gì đó trong nhận xét của bạn về các chữ được người dùng xác định. Nói chung, các trình phân tích cú pháp C++ là ** munch tối đa **, đối với mỗi mã thông báo, chúng chiếm nhiều ký tự nhất có thể cho đến khi nó không còn là mã thông báo hợp lệ nữa. –
Bạn có thể viết lỗi biên dịch. –