【问题标题】:C error: expected expression before ‘FILE’C 错误:“文件”之前的预期表达式
【发布时间】:2015-01-03 02:09:47
【问题描述】:

下面是我的程序代码的一部分,这是我在论坛帖子的第一个答案中找到的: http://www.gamedev.net/topic/266856-how-to-check-if-a-file-exists-in-c/

另外,这里有一些我已经阅读但仍未弄清楚的材料的链接:

http://www.dreamincode.net/forums/topic/333715-error-expected-expression-before-file/ http://www.avrfreaks.net/forum/error-expected-expression-struct

char filename[100];
char mode[2];

bool exists(const char * filename)
{
    FILE * fp;
    if (FILE * fp = fopen(filename, mode))
    {
        fclose(fp);
        return true;
    }
    return false;
}

我想要在整个程序中做的只是创建一个文件,然后检查它是否存在并打印到屏幕是否文件创建成功与否。它应该很简单,但我得到了这个错误:

foo.c:35:6: error: expected expression before ‘FILE’

对不起,如果我看起来有点过分,请帮我解决这个问题。如果您希望我包含更多数据,请询问。提前致谢!

【问题讨论】:

    标签: file c


    【解决方案1】:

    这就是问题

    if (FILE * fp = fopen(filename, mode))
    

    应该是

    if ((fp = fopen(filename, mode)) != NULL)
    

    你在这行之前声明了fp

    该语法在 c 中无效,但在 c++ 语法中有效。请注意,您声明了两次 fp,因此 C++ 编译器无论如何都会抱怨。

    【讨论】:

    • 是的。这是他从gamedev那里得到的例子,它是有效的C++,但不是有效的C。
    • 好的,我现在没有收到任何错误,但我确实收到了以下警告:foo.c:35:2: 警告:建议在赋值周围使用括号作为真值 [-Wparentheses]
    • 这很正常,你应该加上括号,因为你是as the warning says,使用赋值作为真值。更新了答案,用更好的写法。
    • @mee,这是因为x = y 看起来很像x == y,而后者在if 语句中更常见。编译器告诉你你可能打错了。将语句括在括号中以告诉编译器您确实想将赋值用作条件。
    • 不,问一个新问题。这个解决了,还是,你初始化mode吗?试试char mode[2] = "r";fopen(filename, "r") 因为如果你想检查文件是否存在,你应该尝试以只读模式打开它。此外,还有其他方法可以检查文件是否存在,但它们可能是特定于平台的。
    猜你喜欢
    • 2014-02-22
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多