2010-07-09 35 views
7

Tôi khá ngạc nhiên khi tôi biên dịch mã sau mà không có bất kỳ cảnh báo nào bằng cách sử dụng g ++ 4.1.2 với -Wall -Wextra -Wconversion được bật.cách nhận cảnh báo biên dịch

Tôi muốn g ++ hiển thị cho tôi mọi cảnh báo để tránh gây hại tiềm ẩn. Tôi phải gắn bó với g ++ 4.1.2.

#include <stdint.h> 
#include <string> 

using namespace std; 

int main() 
{ 
    uint8_t u1=1; 
    uint64_t u64=1000; 
    string s1=""; 

    u1=u64; // want warning here 
    s1=u64; // want warning here 
    s1=u1; 
} 
+2

Tôi nghĩ bạn sẽ tìm thấy cụm từ tiếng Anh là "muốn", không phải "muốn". – paxdiablo

+0

Và bạn không muốn cảnh báo trên dòng cuối cùng? Ý nghĩa của việc gán từ unsigned char to string là gì? –

+0

@David: 'string' có' toán tử = (char) '. –

Trả lời

4

Tôi sợ GCC trước 4.3 dường như không hỗ trợ điều này. Các mô tả của -Wconversion thay đổi giữa 4,2 và 4,3 để phản ánh hành vi cảnh báo mới, và không có dấu hiệu cho thấy trước 4.3 GCC sẽ kiểm tra này.

+2

Tôi có thể xác nhận nó, gcc 4.3 tạo cảnh báo, 4.2 không – Anycorn

+0

Tôi cũng có thể xác nhận GCC 4.4 tạo cảnh báo và chỉ với '-Wconversion'enabled – rubenvb

+0

Thx. Sau đó, tôi sẽ phải tìm một số công cụ phân tích mã C++ tĩnh. – lyman

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