Tôi đang cố gắng xây dựng Amaya. Khi bản dựng không thành công vớiGỡ lỗi bộ tiền xử lý C++
error: expected unqualified-id before ‘(’ token
Tôi chạy g ++ chỉ với bộ tiền xử lý (thay thế tùy chọn -c bằng -E) trên tệp không biên dịch để xem điều gì đang diễn ra. Điều này tạo ra một tập tin 80.000 dòng, cho tôi thấy rằng 'Xanh' đã được thay thế bằng (2 < < 8), trong đó giải thích rõ ràng lỗi. Nếu tôi sửa lỗi này, tệp sẽ biên dịch tốt. Tôi đoán tôi có thể sống với điều đó, nhưng tôi muốn tìm hiểu lý do tại sao điều này xảy ra.
Có cách nào tôi có thể theo dõi cách bộ xử lý trước thay thế một chuỗi cụ thể, trong trường hợp này là 'Xanh'?
================= Cập nhật ===================
Vâng, tôi đã tìm thấy thủ phạm:
> headers=`g++ [omited for brevity] -M \
../../thotlib/dialogue/AmayaClassicNotebook.cpp`
> for file in $headers ; do grep -s -H Blue $file | grep "(2 << 8)";done
/usr/local/include/gc.h:#define Blue (2 << 8)
Vì vậy, thêm #undef Màu xanh đã khắc phục được sự cố. Vì vậy, sử dụng sự kết hợp này của -M và grep có vẻ OK nhưng đôi khi định nghĩa tiền xử lý C++ có thể là một khu rừng thực sự; Tôi đã tò mò liệu có một số cách tốt hơn, một số công cụ GNU thông minh có thể.
Nền tảng nào? – laalto
i686 GNU/Linux. – Alex