Tôi đã cố gắng một số tiền xử lý vụng về và đã đưa ra một cái gì đó như thế này:Preprocessor lỗi khi xác định =
#include <stdio.h>
#define SIX =6
int main(void)
{
int x=6;
int y=2;
if(x=SIX)
printf("X == 6\n");
if(y=SIX)
printf("Y==6\n");
return 0;
}
gcc mang lại cho tôi những lỗi:
test.c: In function ‘main’:
test.c:10:8: error: expected expression before ‘=’ token
test.c:12:8: error: expected expression before ‘=’ token
Tại sao vậy?
Bản sao có thể có của [Macro thực tế tệ nhất/lạm dụng tiền xử lý tồi tệ nhất mà bạn từng gặp phải là gì?] (Http://stackoverflow.com/questions/652788/what-is-the-worst-real -world-macros-pre-processor-abuse-youve-ever-come-across) Chỉ đùa thôi, câu hỏi hay. –
Chạy điều này thông qua bộ tiền xử lý, các phép thử chuyển thành 'if (x = = 6)'. Tôi không chắc tại sao không gian được chèn vào ... có lẽ ai đó biết một trong những đặc điểm kỹ thuật C tốt hơn nhiều so với tôi sẽ đi cùng ... – cdhowie
Các giao dịch tiền xử lý trong thẻ, hợp lý với các khoảng trống tách các thẻ. Khi nó mã hóa 'if (x = SIX)', nó có 'if',' (',' x', '=' và 'SIX'. Khi macro mở rộng' SIX', nó có thêm mã thông báo '=' và '6'. Nhưng hai mã thông báo liền kề' = 'không giống như một mã thông báo' == '(và thực tế là cú pháp C không hợp lệ) - do đó lỗi biên dịch –