2011-12-08 20 views
12

Trình biên dịch của tôi (gcc) cho tôi cảnh báo này. Xin hãy giúp tôi hiểu ý nghĩa của nó:trigraph ??/ignore, use -trigraphs để kích hoạt

cảnh báo: trigraph ??/phớt lờ, -trigraphs sử dụng để cho phép

+0

'?? /' tương đương với dấu gạch chéo ngược, bạn có thể thay thế dấu vân tay thành "\" –

+1

Trừ khi bạn đang nói (chỉnh sửa) mã C trên một máy tính lớn 3270 thiết bị đầu cuối, v.v. để viết một sự xuất hiện của "??" là "? \?", vì lợi ích của hoang tưởng. (Một số ký tự, như {} [] \, không có trong nhiều bộ ký tự mainframe, cũng như một số bàn phím không phải tiếng Anh cho các hệ thống khác.) – BRFennPocock

+1

Các góc bụi C tấn công một lần nữa ... –

Trả lời

16

Bạn có "vô tình" được viết một trigraph nơi nào đó trong mã nguồn của bạn (trình biên dịch của cảnh báo sẽ xác định dòng). Kể từ khi trigraphs được phát minh để giải quyết một vấn đề mà không đi vào chơi trên hệ thống hiện đại, bạn không thực sự muốn các dấu phẩy ??/ được thay thế bằng các ký tự \.

Do đó, cảnh báo này có thể bị bỏ qua (bạn có thể yêu cầu trình biên dịch tắt bằng cách thêm -Wno-trigraphs sau -Wall trong dòng lệnh của bạn; xem docs). Nhưng nó sẽ là tốt để hiển thị mã nguồn của bạn để chúng tôi có thể chắc chắn.

4

Thay vì thêm cờ trình biên dịch, bạn chỉ có thể thoát từng dấu chấm hỏi bằng \, tức là \?\?-. Điều này đã giúp trong trường hợp của tôi.

+0

Cờ biên dịch được giả định cho các trường hợp nơi bạn viết một dấu vết mà không nhận thấy nó là một. Sau đó trình biên dịch sẽ không làm phiền bạn về nó. Nếu bạn biết tại thời điểm viết rằng nó là một trigraph không mong muốn, sau đó bạn có thể thoát khỏi nó như bạn đề nghị và quên cờ biên dịch. –

Các vấn đề liên quan