Tôi phát triển nền tảng chéo C++ sử dụng Microsoft Visual Studio trên Windows và GCC trên uBuntu Linux.Có thể nhận GCC để biên dịch UTF-8 với các tệp nguồn BOM không?
Trong Visual Studio tôi có thể sử dụng biểu tượng unicode như "π" và "²" trong mã của tôi. Visual Studio luôn lưu các tệp nguồn dưới dạng UTF-8 với BOM (Dấu thứ tự byte).
Ví dụ:
// A = π.r²
double π = 3.14;
GCC hạnh phúc biên dịch những tập tin này chỉ khi tôi tháo BOM đầu tiên. Nếu tôi không loại bỏ các BOM, tôi nhận được lỗi như thế này:
wwga_hydutils.cpp:28:9: error: stray ‘\317’ in program
wwga_hydutils.cpp:28:9: error: stray ‘\200’ in program
đó mang lại cho tôi câu hỏi:
Có cách nào để có được GCC để biên dịch file UTF-8 mà không cần loại bỏ các BOM ?
Tôi đang sử dụng:
- Windows 7
- Visual Studio 2010
và:
- Ubuntu Oneiric 11.10
- GCC 4.6.1 (theo quy định của apt-get install gcc)
Chỉnh sửa:
Khi commenter đầu tiên chỉ ra, vấn đề của tôi là không HĐQT, nhưng có các ký tự không phải ascii nằm ngoài chuỗi hằng số. GCC không thích các ký tự không phải ascii trong các tên biểu tượng, nhưng hóa ra GCC hoàn toàn tương thích với UTF-8 với BOM.
Làm việc tốt cho tôi trong gcc 4.4.5, sử dụng chuỗi chứa cả hai ký tự UNICODE trong câu hỏi của bạn. Tập tin với BOM. Ngoài ra, lỗi bạn nhận được không liên quan gì đến BOM, nhưng dường như các ký tự UNICODE được đề cập nằm ngoài bất kỳ chuỗi nào (đó là lý do tại sao chúng được gọi là _stray_.) –
@JoachimPileborg có các ký tự unicode nằm ngoài chuỗi, "π" tôi đã sử dụng làm tên biểu tượng, "²" chỉ ở trong nhận xét. Khi tôi loại bỏ các BOM, nó loại bỏ lỗi từ đầu ra giao diện điều khiển, nhưng tôi đoán đó là không có gaurantee rằng GCC thực sự xử lý các ký tự như thế nào tôi mong đợi. – Boinst
@JoachimPileborg, tôi đã cập nhật câu hỏi để bao gồm ngữ cảnh trong đó tôi đang sử dụng các ký tự unicode. – Boinst