它应该是
MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
事实并非如此。
工具提示将向您显示功能的声明,如MingGW的header中所声明winuser.h
。该声明指定了函数的原型,包括:
正如工具提示所做的:
int MessageBoxW (HWND, LPCSTR, LPCSTR, UINT)
您所谓的“标签”是参数名称。它们在函数声明中是可选的,并且是多余的,因为编译器不需要它们来了解将如何调用已声明的函数以及返回的内容。MessageBoxW
将使用依次为a HWND
,a LPCSTR
,anotherLPCSTR
和a的参数来调用UINT
;它返回和int
。
编译器要求在函数定义中命名参数:
添加
// definition
int add(int x, int y)
{
return x + y;
}
main.c
#include <stdio.h>
extern int add(int,int); // Declaration
int main()
{
printf("%d\n",add(3,4));
return 0;
}
严格编译,链接并运行:
$ gcc -Wall -Wextra -pedantic -o prog main.c add.c
$ ./prog
7
另请参见C中的函数声明
参数声明在函数声明中附有函数文档时,对人类读者很有用,因为文档随后可以引用参数名来解释函数的行为:
/*
Return the sum of `x` and `y`
*/
int add(int x, int y);
但是它们对于编译器来说是不必要的。
像MinGW Windows标头一样,Micorosoft自己的标头不包含用于记录API的注释,但它们确实包含参数名称以及参数名称的SAL注释。例如,在Microsoft WinUser.h
(SDK 2017)中,声明MessageBoxW
为:
int
WINAPI
MessageBoxW(
_In_opt_ HWND hWnd,
_In_opt_ LPCWSTR lpText,
_In_opt_ LPCWSTR lpCaption,
_In_ UINT uType);
该SAL注释,( _In_opt_
,_In_
和类似的)是一个非标准的Microsoft语言扩展,支持的代码执行或调用的API,它们被用于这一目的通过微软的编译器是正确的静态分析。
这种基于SAL的静态分析需要带注释的参数名称,以便提供有意义的诊断。因此,参数在Microsoft标头的带注释的声明中具有名称。
GCC,包括MinGW端口,不支持SAL;因此参数名称在函数声明中仍然是多余的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句