【win】【CPP】visual studio 编译告警常见处理手段

43 阅读2分钟

我正在参加「掘金·启航计划」

😜🤞🤞🤞持续补充……

[TOC]

C4100

windows 代码文件中使用

UNREFERENCED_PARAMETER(X)

如果是在Qt中,则可以使用

    Q_UNUSED(X);

另外,也不建议使用上述两种方式。当实现接口或标准导出内的方法时,有一些参数没有被引用是相当常见的。编译器会发现未 使用的参数,并产生一个警告,有些组件甚至会认为这是一个错误。为避免发生如此情况, 将未使用的参数使用/* 参数名 */ 语法将其注释掉。不要使用 UNREFERENCED_PARAMETER() 宏,因为其 1)太繁琐,2)并不能保证参数实际上真的未被引用。

最好的方法就是在函数接口中注释掉未使用的变量。

LRESULT WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM /* lParam */

C4805

操作类型混合不安全:一般在操作 boolint 时会触发这一警告

简单处理就是不要使用这种作为判断的依据,要么用 bool 类型,要么用 int 类型。

  • 也可以使用强制转换。

C4996

  1. 'qsort':Use std::sort

C5208

出现这个问题的原因是 C 风格代码和 C++ 风格代码混用导致的,结构体在 C 和 C++ 中是不一样的:

C

typedef struct
{
     char *yyy=new zzz[ttt];
}xxx;

CPP

struct xxx 
{
     char *yyy=new zzz[ttt];
};

具体原因是:最新的C++20标准中,为了更好的实现模块module的特性,typedef 一个未命名的struct被限制为只能使用纯粹的c语言语法,它不能通过赋值进行类内初始化了。

所以修改的方案就是不要声明匿名结构体,在声明时创建结构体名。