Это должно быть
MessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
Это не так.
Подсказка показывает объявление функции, как объявлено в заголовке MingGW winuser.h
.Это объявление определяет прототип функции , состоящий из:
- Тип возврата функции, затем
- Имя функции, затем
- Типы параметров в списке параметров в квадратных скобках в правильном порядке.
в качестве подсказки:
int MessageBoxW (HWND, LPCSTR, LPCSTR, UINT)
То, что вы называете "метками"являются именами параметров.Они являются необязательными и избыточными в объявлении функции, поскольку компилятору не нужно, чтобы они понимали, как будет вызываться объявленная функция и что она возвращает.MessageBoxW
вызывается с аргументами, которые являются HWND
, LPCSTR
, другим LPCSTR
и UINT
в этом порядке;и возвращает и int
.
Компилятору требуется, чтобы параметры были названы в функции Definition :
add.c
// 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, собственные заголовки Micorosoft не содержат комментариев для документирования API, но они do содержит имена параметров, а также SAL Annotations имен параметров.Например, в 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, и они используются для этой цели компиляторами Microsoft.
Такой статический анализ на основе SAL требует имен для аннотированных параметров взаказ на содержательную диагностику;следовательно, параметры имеют имена в аннотированных объявлениях в заголовках Microsoft.
GCC, включая порты MinGW, не поддерживает SAL;поэтому имена параметров остаются избыточными в объявлениях функций.