2009-07-01 7 views
5

GCC dường như cho phép "và"/"hoặc" được sử dụng thay cho "& &"/"||" trong mã C++; tuy nhiên, như tôi mong đợi, nhiều trình biên dịch (đặc biệt là MSVC 7) không hỗ trợ điều này. Thực tế là GCC cho phép điều này gây ra một số phiền toái cho chúng ta khi chúng ta có các nhà phát triển khác nhau làm việc trên cùng một nền tảng mã trên nhiều nền tảng và đôi khi, những lỗi "lỗi" này khi mọi người chuyển đổi qua lại giữa phát triển Python và C++.Có thể tắt hỗ trợ cho "và"/"hoặc" sử dụng toán tử logic trong gcc không?

Lý tưởng nhất, tất cả chúng ta sẽ nhớ sử dụng cú pháp thích hợp, nhưng đối với những tình huống mà thỉnh thoảng chúng ta lộn xộn, nó sẽ thực sự tốt đẹp nếu GCC không để nó trượt. Bất kỳ ai có ý tưởng về cách tiếp cận này?

Nếu "và" và "hoặc" chỉ đơn giản là #defines thì tôi có thể #undef khi sử dụng GCC nhưng tôi lo ngại rằng nó có nhiều khả năng được tích hợp vào trình biên dịch ở cấp độ cơ bản hơn.

Cảm ơn.

Trả lời

16

Chúng là một phần của tiêu chuẩn C++, xem ví dụ this StackOverflow answer (trích dẫn các phần có liên quan của tiêu chuẩn).

Một câu trả lời khác trong cùng một câu hỏi đề cập đến cách làm ngược lại: làm cho chúng hoạt động trong MSVC.

Để tắt chúng trong GCC, hãy sử dụng -fno-operator-names. Lưu ý rằng, bằng cách đó, bạn đang chuyển sang một phương ngữ không chuẩn của C++, và có nguy cơ bạn phải viết mã mà có thể không biên dịch chính xác trên các trình biên dịch tuân thủ chuẩn (ví dụ, nếu bạn khai báo biến với tên thường được đặt trước).

0

Bạn đã xem xét bất kỳ công cụ phân tích mã nào chưa? Một cái gì đó tương tự như FxCop? Với FxCop bạn có thể viết các quy tắc của riêng bạn (kiểm tra & &) và bạn có thể đặt nó để chạy trong giai đoạn biên dịch trước.

7

Các từ là tiêu chuẩn trong C++ mà không bao gồm bất kỳ tiêu đề nào.

Các từ là tiêu chuẩn trong C nếu bạn bao gồm tiêu đề <iso646.h>.

MSVC đang làm bạn không có dịch vụ nào bằng cách không hỗ trợ các tiêu chuẩn.

Tuy nhiên, bạn có thể sử dụng các công cụ để thực thi việc không sử dụng các từ khóa. Và nó có thể là một hướng dẫn mã hóa, và bạn có thể nhanh chóng đào tạo nhóm của bạn không làm cho những sai lầm về tính di động ngớ ngẩn. Nó không phải là khó để tránh vấn đề.

-3

-pedantic-errors có thể giúp ích cho điều này, trong số các loại gnu-isms khác.

+1

-1: đây không phải là gnu-ism, nó là một phần của tiêu chuẩn ngôn ngữ. –