Tôi đã nhìn qua code golf và có một ý tưởng để thử mã này:Có thể định nghĩa một chỉ thị tiền xử lý khác không?
#define D #define
sau khi thêm dòng này, mọi thứ đều hoạt động tốt, tuy nhiên tôi mở rộng nó vào đây:
#define D #define
D VALUE
Và ở đây tôi có 5 lỗi biên dịch. Nếu tôi thay đổi D
thành #define
mọi thứ đều ổn, ai đó có thể giải thích, tại sao mã này là bất hợp pháp?
LƯU Ý: Tôi đã sử dụng trình biên dịch VS2008.
EDIT: Sau một số câu trả lời tôi thấy rằng tôi cần thiết để cung cấp cho biên soạn danh sách lỗi:
- lỗi C2121: '#': nhân vật không hợp lệ: có thể là kết quả của một sự bành trướng vĩ mô
- lỗi C2146 : lỗi cú pháp: thiếu ';' trước số nhận dạng 'VALUE'
- lỗi C4430: thiếu thông số loại - int giả định. Lưu ý: C++ không hỗ trợ mặc định-int
- lỗi C2144: lỗi cú pháp: 'void' phải được bắt đầu bởi ';'
- lỗi C4430: thiếu thông số định kiểu - int giả định. Lưu ý: C++ không hỗ trợ mặc định-int
Lỗi đầu tiên cho thấy D
không chỉ là define
mà còn bao gồm #
.
Vì nó có thể phụ thuộc vào việc triển khai thực hiện, vui lòng nêu rõ trình biên dịch bạn đang sử dụng. –
"tại sao mã này là bất hợp pháp?" - Bởi vì bạn không thể xác định lại chỉ thị tiền xử lý. –
@ H2CO3 Tôi đã có thể xác định lại nó, bởi vì lần đầu tiên nó hoạt động, tuy nhiên sau khi sử dụng định nghĩa đó tôi nhận được lỗi biên dịch. – ST3