Должен ли я передать все три аргумента в качестве прототипа, чтобы заставить его работать?
Да, вы должны передать три параметра для работы. Как вы уже заявили, функция должна требовать три параметра.
Например
Если функция объявлена как int foo(char,int);
Здесь вы указали число аргументов и их типов. вы должны вызывать функцию с одинаковым количеством параметров и должны передавать аргументы в том же порядке, что и в объявлении функции.
Вы должны вызвать выше функции
int i=foo('a',1024);
Вы не должны вызывать выше функции, как показано ниже
int i=foo(10);
Если функция объявлена как int foo();
Здесь Вы не указали количество аргументов. Тогда, если вы передадите другое количество аргументов si mply игнорирует.
вы можете вызвать функцию Понравился
int i=foo();
int i=foo(10);
int i=foo(10,20);
Но, эти три результата одинаковы. в этих случаях просто игнорируются параметры.
И хорошая практика объявления функции, которая не принимает никаких параметров и возвращает ИНТ
int foo(void);
, если вы хотите написать функцию, которая принимает переменное число аргументов см Variadic_function
Да. Вам нужно передать все аргументы. Для третьего аргумента вы должны передать указатель туда, куда хотите вернуть возвращенные данные. – Baldrick
вы должны передать все аргументы, но он все равно может скомпилироваться с двумя аргументами, если вы объявите прототип как int readdir_r(); .... – tristan
Почему вы ожидаете, что функция будет работать правильно, если не будут указаны все аргументы? – chux