在进行静态代码分析时,我发现了一个奇怪的问题。在这样的通话中:

if(!AfxWinInit(moduleHandle,NULL,::GetCommandLine(),0)


我在第二个参数处收到警告C6309(C6309:参数2为空:它不符合AfxWinInit的函数规范)

医生说,对于Win32应用程序,第二个参数必须为NULL,因此问题是:

a)我的代码,AfxWinInit声明或静态代码分析怎么了?

提前致谢!

最佳答案

    friend BOOL AFXAPI AfxWinInit(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance,
            _In_z_ LPTSTR lpCmdLine, _In_ int nCmdShow);


在我看来,这是错误的,第二个参数应该被注释为_In_opt_。从SAL Annotations文档中:

可选选项
描述缓冲区本身是否是可选的。这些注释可以应用于“参数”层,“返回值”层或“前/后”层中的值。


(没有)
指向缓冲区的指针不能为NULL。
选择_
指向缓冲区的指针可能为NULL。在取消引用之前将对其进行检查。

关于c++ - 为什么在对AfxWinInit的调用中收到警告C6309?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3494137/

10-10 20:05