我收到错误,因为 readdir_r 的函数调用中的参数不足。readdir_r 的函数原型是这样的
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
其中 dirp - 目录流,条目是目录中的下一个条目,结果是指向返回项的指针。
我使用 readdir_r 作为
int re = readdir_r( dir , &entry);
我是否需要将所有三个参数作为原型传递才能使其工作?
使用类似的函数readdir_r(),需要使用所有参数。
有时参数允许像NULL或 0 这样的值,但这取决于函数。
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
具有包含 的原型的函数...,例如printf()允许从 . 开始的可变数量的参数...。同样,所需的数量和类型取决于功能。编译器不可能知道正确的类型和编号(除非它是标准库函数)。
int printf ( const char * format, ... );
老派原型/声明喜欢int foo()或int bar(a,b,c)只告诉你返回类型。编译器无法弄清楚编码器是否做了正确的事情。这种风格早已失宠。
我是否需要将所有三个参数作为原型传递才能使其工作?
是的,您应该传递三个参数来工作。正如您已经声明的函数应该需要三个参数。
例如
如果您将函数声明为int foo(char,int);
在这里,您指定了参数的数量及其类型。您应该使用相同数量的参数调用函数,并且应该以与函数声明中相同的顺序传递参数。
你应该调用上面的函数
int i=foo('a',1024);
你不应该像下面这样调用上面的函数
int i=foo(10);
如果您将函数声明为 int foo();
在这里,您没有指定参数的数量。然后,如果您传递不同数量的参数,则简单地忽略。
你可以像这样调用函数
int i=foo();
int i=foo(10);
int i=foo(10,20);
但是,这三个结果是相同的。在这些情况下,只是忽略参数。
声明一个不带参数并返回 int 的函数的良好做法是
int foo(void);
如果你想编写一个接受可变数量参数的函数,请参见Variadic_function