我的代码如下:
FILE *test
char line[50];
fp = fopen(arg[5], "r");
doSomething(File test, char line[50]); // declare function
doSomething(fp, line[50]); // call function
我在'FILE'错误之前得到了一个“预期的错误表达式。我已经尝试了很多不同的语法变体,但我仍然遇到这个错误,或者更多错误。我知道当我调用函数时,我只需要让参数在同一范围内,并事先声明函数,我以为我做了。
我只是希望能够无错误地调用该函数。
答案 0 :(得分:1)
代码中的问题是,如果没有前向声明,第一个 assummed 声明实际上被解释为函数调用[函数的隐式声明]。在那里,File test
被解释为实际参数,而不是参数。在那里,FILE
是保留关键字而File test
没有有效参数,则抛出错误。
在函数声明的代码中,将th3声明移到main()
之外,请指定函数的返回类型并更正第一个参数的类型。
更改
doSomething(File test, char line[50]);
到
int doSomething(File * test, char line[50]);
注意:始终启用[并注意]编译器警告。启用警告后,编译器应显示警告
警告:隐含的功能声明
在这些情况下。
此外,通话错误。 line[50]
将在您的数组之后引用该字符。将通话更改为:
doSomething(fp, line); // call function
答案 1 :(得分:0)
doSomething(File test, char line[50]);
应该是
doSomething(File *test, char line[50]);
我看到函数fopen()返回FILE *
并且您试图将返回值传递给函数doSomething()
,因此第一个参数应该是FILE *
类型而不是{ {1}}
FILE
答案 2 :(得分:0)
功能声明应该是这样的。
doSomething(File *, char);
答案 3 :(得分:0)
在C中打开文件时,会返回指向文件开头的指针。这是你应该传递的,而不是实际的文件。 正如Gopi所说的那样是正确的。