8

Tôi có một số mã để thử nghiệm mà tôi thêm trả trước phần còn lại của mã, do đó phần còn lại sẽ không bao giờ đạt được trong các thử nghiệm. Kể từ khi tôi đã cảnh báo cấp 4 bộ, điều này dẫn đến một c4702: unreachable mã cảnh báodisable c4702 cảnh báo dường như không làm việc cho VS 2012

tôi đã cố gắng vô hiệu hóa như thế này:

//do something 
    return 0; 

    /*-------------------------------------------------------------------------*/ 

#pragma warning(disable: 4702) 
    //real code 

nhưng trình biên dịch vẫn rên rỉ. Và bởi vì tôi đã thiết lập để điều trị tất cả các cảnh báo như là một lỗi, điều này sẽ không biên dịch ...

Tôi đang sử dụng Visual Studio 2012 cao cấp ...

Bất kỳ trợ giúp sẽ được vui vẻ đánh giá cao.

Trả lời

17

Bạn có thể chỉ cần đặt pragma trước khi bắt đầu chức năng bị ảnh hưởng thay vì bên trong nó.

Từ MSDN docs:

Đối với số cảnh báo trong khoảng 4700-4999, đó là những người gắn liền với thế hệ mã, tình trạng cảnh báo có hiệu lực khi trình biên dịch gặp nẹp xoăn mở của một chức năng sẽ có hiệu lực cho phần còn lại của hàm. Sử dụng pragma cảnh báo trong hàm để thay đổi trạng thái cảnh báo có số lớn hơn 4699 sẽ chỉ có hiệu lực sau khi kết thúc hàm.

Vì vậy, ví dụ:

#pragma warning(push) 
#pragma warning(disable: 4702) 
bool Do() { 
    return true; 
    return true; // No warning generated 
#pragma warning(pop) 
} 

bool DoDo() { 
    return true; 
    return true; // Generates C4702 
} 
+0

Cảm ơn! Điều này cũng áp dụng cho Visual Studio 2010. –

+0

Nó cũng áp dụng cho Visual Studio 2013 –