Khi bạn biên dịch C++ file nguồn sau trong Visual Studio 2010 với mức cảnh báo/W4 kích hoạtVisual Studio 2010 (C++): ngăn chặn C4706 cảnh báo tạm thời
#include <cstdio> // for printf
#include <cstring> // for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
if (result = strcmp(str0, str1)) // line 11
{
printf("Strings are different\n");
}
}
bạn nhận được cảnh báo sau đây
cảnh báo C4706: chuyển nhượng trong biểu thức có điều kiện
cho dòng 11.
Tôi muốn chặn cảnh báo này chính xác tại địa điểm này. Vì vậy, tôi đã cố gắng Google và tìm thấy trang này: http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx
Vì vậy, tôi đã thay đổi mã như sau - hy vọng điều này sẽ giải quyết vấn đề:
#include <cstdio> // for printf
#include <cstring> // for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
#pragma warning(push)
#pragma warning(disable : 4706)
if (result = strcmp(str0, str1))
#pragma warning(pop)
{
printf("Strings are different\n");
}
}
Nó không giúp đỡ.
biến thể này không giúp được gì:
#include <cstdio> // for printf
#include <cstring> // for strcmp
char str0[] = "Hello";
char str1[] = "World";
int main()
{
int result;
#pragma warning(push)
#pragma warning(disable : 4706)
if (result = strcmp(str0, str1))
{
#pragma warning(pop)
printf("Strings are different\n");
}
}
Để tránh một cuộc điều tra thêm: Tôi làm sạch các giải pháp trước mỗi biên dịch. Vì vậy, đây có lẽ không phải là lỗi.
Vì vậy, trong kết luận: làm thế nào để loại bỏ C4706 chính xác ở nơi này?
Chỉnh sửa Có, viết lại là có thể - nhưng tôi thực sự muốn biết tại sao cách tôi cố gắng ngăn chặn cảnh báo (được ghi lại chính thức trên MSDN) không hoạt động - lỗi ở đâu?
Hầu hết các trình biên dịch thực hiện "bạn có chắc" yếu tố bằng cách yêu cầu một cặp thêm dấu ngoặc, tôi muốn MSVC có thể làm như vậy. – Thomas