Зачем указывать имя параметра в прототипах?
Ответы (1 шт):
Автор решения: MSDN.WhiteKnight
→ Ссылка
Вероятно, речь о том, что компилятор может при выводе сообщения об ошибке несоответствия типов указать имя параметра, который задан неправильно, для удобства исправления ошибки. Это, впрочем, не реализовано в Visual C++ (VS 2017), хотя реализовано в GCC. Возьмем такой ошибочный код:
fread(nullptr,"Hello, world",0,nullptr);
Вывод Visual C++:
error C2664: "size_t fread(void *,size_t,size_t,FILE *)": невозможно преобразовать аргумент 2 из "const char [13]" в "size_t"
Указан только номер параметра (хотя в прототипе есть имена).
Вывод GCC:
main.cpp:15:19: error: invalid conversion from 'const char*' to 'size_t' {aka 'long unsigned int'} [-fpermissive]
15 | fread(nullptr,"Hello, world",0,nullptr);
| ^~~~~~~~~~~~~~
| |
| const char*
In file included from /usr/local/include/c++/9.2.0/cstdio:42,
from /usr/local/include/c++/9.2.0/ext/string_conversions.h:43,
from /usr/local/include/c++/9.2.0/bits/basic_string.h:6493,
from /usr/local/include/c++/9.2.0/string:55,
from /usr/local/include/c++/9.2.0/bits/locale_classes.h:40,
from /usr/local/include/c++/9.2.0/bits/ios_base.h:41,
from /usr/local/include/c++/9.2.0/ios:42,
from /usr/local/include/c++/9.2.0/ostream:38,
from /usr/local/include/c++/9.2.0/iostream:39,
from main.cpp:1:
/usr/include/stdio.h:709:53: note: initializing argument 2 of 'size_t fread(void*, size_t, size_t, FILE*)'
709 | extern size_t fread (void *__restrict __ptr, size_t __size,
| ~~~~~~~^~~~~~
Здесь в последней строке указано имя параметра.
Кроме того, наличие имен параметров полезно для всплывающих подсказок в IDE или для генераторов документации. Так что да, правильно написано, что рекомендуется их указывать.
