我想知道在C ++中进行Windows开发时使用注释是否重要? 例如,
#include <windows.h> int WINAPI WinMain( __in HINSTANCE hInstance, __in HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nCmdShow ){ return 0; }
这可以写成:
#include <windows.h> int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ return 0; }
我不使用它们会失去什么? 我很难搞清楚这些是为了什么,似乎没有任何为凡人写的指南。
您必须使用旧版本的SDK。 版本7.0声明这样的参数:
WinMain ( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd );
请注意__in_opt注释,它将该参数标记为可选参数,指示传递NULL是可接受的。 这些是SAL注释的早期版本,是源代码注释语言的缩写。 有一个MSDN文章 ,但是它记录了在C / C ++库#include文件中使用的语法。 不太清楚为什么SDK组不使用相同的,他们往往有点迟钝追赶。
由于声明更具可读性,消除了C声明的歧义,注释对于工具也是有用的。 好的例子是VS2008和VS2010的高版本代码分析器(它捕捉编程错误)。 P / Invoke Interop Assistant是一个使用从注释的SDK头文件生成的dbase生成C#或VB.NET p / invoke声明的工具。 注释对生成良好的C#声明至关重要。
你也可以在你自己的代码中使用这些注释,如果你这样做,代码分析器会自动进行验证。 请使用MSDN文章中记录的现代语法。 我认为所需的sal.h头文件被包含在任何包含CRT头文件的源文件中。
注释是添加到源代码中的标记(例如__in,__out和__inout),为开发人员和静态分析工具提供有关函数及其参数的附加信息及其预期用途。 注释类似于添加到代码中的注释,被编译器忽略,但被静态分析工具使用。 注释的使用有助于提高开发人员的效率,有助于提高静态分析结果的准确性,并使工具能够更好地确定是否存在特定的错误。
资料来源: http : //msdn.microsoft.com/en-us/library/ff550230%28VS.85%29.aspx
关于WINAPI
东西请看http://unixwiz.net/techtips/win32-callconv.html
IIRC, __in
和__out
关键字是#define
d什么也不是。 他们只是为了澄清每个参数的目的。 __in
参数被设计为由函数读取,但未被修改,而__out
参数被设计为由函数修改以传回一些返回码。
你可以把__in
看作C ++的“通过const
引用”或者“按值传递”,而__out
是“通过非const
引用”。 这不是字面上的意思,但它有相同的内涵。