函数参数的注释里有[in][out]等前缀是什么意思?
前言
也许各位在一些技术文档看到一些函数参数的注释有诸如:[in]、[out]、[in/out]等前缀,或者是看到"value-result parameter"、”value-only parameter“ 这样的单词。其实都是在说明函数参数更加具体的职能,下面一一来介绍。
输入参数(Input Parameter)
- 术语:通常直接称为“输入参数”或使用前缀如[in]。
- 定义:这些参数是向函数或方法提供数据的,函数或方法不会(或不应该)修改这些参数的值(尽管在某些情况下,如果参数是对象或指针,函数内部可以修改对象的状态,但参数本身的引用或指针不会改变)。
这可以说是函数参数最原始、最基本的功能了了
输出参数(Output Parameters):
- 术语:通常称为“输出参数”或使用前缀如[out]。
- 定义:这些参数用于从函数或方法接收数据。调用者需要在调用之前为这些参数分配适当的空间(例如,对于指针或引用类型),因为函数或方法将在这个空间内写入结果。
一般使用了这种参数的函数,它的返回值一般返回该函数是否执行成功等信息,而结果信息则保存在该参数
以下是win32库中的GetDlgItemTextA()
函数,用于获取与对话框中的控件关联的标题或文本
UINT GetDlgItemTextA(
[in] HWND hDlg,
[in] int nIDDlgItem,
[out] LPSTR lpString,
[in] int cchMax
);
该函数返回值类型为UINT,如果执行成功,则返回被拷贝缓冲区里的字符的数量,反之则返回0字符。
而我们想要获取的文本则被保存在lpString这个参数中。
输入/输出参数(Input/Output Parameters):
- 术语:通常称为“输入/输出参数”或使用前缀如[in/out]。
- 定义:这些参数既是输入也是输出。它们向函数或方法提供初始数据,并且函数或方法可能会修改这些数据并将修改后的值返回给调用者。这种参数类型在需要函数或方法既处理输入数据又返回处理结果时非常有用。