-1

我收到错误,因为 readdir_r 的函数调用中的参数不足。readdir_r 的函数原型是这样的

int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);

其中 dirp - 目录流,条目是目录中的下一个条目,结果是指向返回项的指针。

我使用 readdir_r 作为

int re = readdir_r( dir , &entry); 

我是否需要将所有三个参数作为原型传递才能使其工作?

4

2 回答 2

1

使用类似的函数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)只告诉你返回类型。编译器无法弄清楚编码器是否做了正确的事情。这种风格早已失宠。

于 2013-10-12T04:47:10.217 回答
1

我是否需要将所有三个参数作为原型传递才能使其工作?

是的,您应该传递三个参数来工作。正如您已经声明的函数应该需要三个参数。

例如

如果您将函数声明为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

于 2013-10-12T04:16:09.137 回答