Tôi có một số mã (cũ) mà tôi đang xây dựng bằng tiếng kêu đầu tiên. Mã này là một cái gì đó như:Có công tắc nào để vô hiệu hóa các dấu vết với tiếng kêu không?
sprintf(buf, "%s <%s ????>", p1, p2);
Clang đưa ra cảnh báo sau (lỗi với -Werror
):
test.c:6:33: error: trigraph converted to '}' character [-Werror,-Wtrigraphs]
sprintf(buf, "%s <%s ????>", p1, p2);
^
rõ ??>
không có ý định như một trigraph, vì vậy tôi muốn vô hiệu hóa trigraphs hoàn toàn (các nguồn không cố ý sử dụng chúng ở bất cứ đâu).
Tôi đã thử -no-trigraphs
nhưng đó không phải thực sự là một lựa chọn:
clang: warning: argument unused during compilation: '-no-trigraphs'
tôi có thể tắt trigraphs cảnh báo với -Wno-trigraphs
nhưng tôi không muốn chuyển đổi trigraph để thực sự diễn ra ở tất cả.
LƯU Ý: Trigraphs được kích hoạt như là một tác dụng phụ không mong muốn khi sử dụng -std=c89
.
Ouch! GCC có một chính sách hợp lý để bỏ qua các trigraph, ngay cả trong chế độ tuân thủ nghiêm ngặt, trừ khi bạn nắm tay nó vào lửa với '-trigraphs'. Thời gian để thoát ra khỏi 'sed'? Hoặc tương đương. –
Trên thực tế các chế độ tuân thủ nghiêm ngặt của GCC ('-std = c89',' -std = c99', v.v.) bật chuyển đổi trigraph. – zwol
Và nếu có ai thắc mắc WTH là một dấu vết. [Đây là con ngựa] (http://stackoverflow.com/questions/7825055/what-does-the-c-operator-do) ... – Mysticial