函数调用中的参数不足

时间:2013-10-12 04:10:34

标签: c linux

我在readdir_r的函数调用中因为参数不足而得到错误。 readdir_r的函数原型就像

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

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

我使用readdir_r作为

int re = readdir_r( dir , &entry); 

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用readdir_r()等函数,需要使用 all 参数。

有时参数允许使用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)仅告诉您返回类型。如果编码器做了正确的事情,编译器就无法弄清楚。这种风格早已失宠。