【问题标题】:Getting an error "error: expected expression before..." when I try to call a function with parameters in C当我尝试在 C 中调用带有参数的函数时出现错误“错误:预期的表达式...”
【发布时间】:2015-02-05 09:42:13
【问题描述】:

我的代码如下:

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'错误之前得到一个“预期的错误表达式。我尝试了许多不同的语法变体,但我仍然得到这个错误,或者更多错误。我意识到当我调用函数时,我只需要让参数在同一范围内并事先声明函数,我以为我做到了。

我只是希望能够正确调用该函数。

【问题讨论】:

    标签: c function call declare


    【解决方案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
    

    【讨论】:

    • @KlasLindbäck 谢谢先生的补充。 :-)
    • 将它添加到现有的最佳答案中比我自己写一个完整的答案要少得多。 ;)
    • @AnthonyJ 很高兴它有帮助。干杯!!
    【解决方案2】:
    doSomething(File test, char line[50]);
    

    应该是

    doSomething(File *test, char line[50]);
    

    我看到函数 fopen() 返回 FILE * 并且您正在尝试将返回值传递给您的函数 doSomething() 所以第一个参数的类型应该是 FILE * 而不是 FILE

    void doSomething( FILE *f,char a[])
    {
      // Do your stuff
    }
    
    int main()
    {
      char b[100] = "";
      FILE *fp = fopen("file","mode");
      doSomething(fp,b);
    }
    

    【讨论】:

    • 这实际上是我已经尝试过的事情之一,但我也遇到了同样的错误。
    【解决方案3】:

    函数的声明应该是这样的。

         doSomething(File *, char); 
    

    【讨论】:

      【解决方案4】:

      当您在 C 中打开文件时,将返回指向文件开头的指针。这是您应该传递的内容,而不是实际文件。 正确的是正如 Gopi 建议的那样。

      【讨论】:

        猜你喜欢
        • 2019-07-25
        • 1970-01-01
        • 2019-11-12
        • 2022-11-30
        • 1970-01-01
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多