【问题标题】:Why am i getting this warning in "if (fd=fopen(fileName,"r") == NULL)"?为什么我在“if (fd=fopen(fileName,"r") == NULL)”中收到此警告?
【发布时间】:2011-01-08 05:31:13
【问题描述】:
FILE *fd;
if (fd=fopen(fileName,"r") == NULL)
{   
    printf("File failed to open");
    exit(1);
}

这是一个代码 sn-p。当我用 gcc 编译它时,我收到以下警告:-

warning: assignment makes pointer from integer without a cast

当我把 fd=fopen(argv[2],"r") 放在括号内时,问题就解决了..

我无法理解我在哪里将整数转换为指针,如果没有放置括号。

【问题讨论】:

    标签: c file-handling


    【解决方案1】:

    由于运算符优先级规则,条件被解释为fd=(fopen(fileName,"r") == NULL)== 的结果是整数,fd 是指针,因此是错误信息。

    考虑您的代码的“扩展”版本:

    FILE *fd;
    int ok;
    fd = fopen(fileName, "r");
    ok = fd == NULL;
    // ...
    

    您是否希望最后一行被解释为(ok = fd) == NULLok = (fd == NULL)

    【讨论】:

    • 这个答案实际上解释了警告。
    【解决方案2】:

    等号运算符的优先级高于赋值运算符。只需将您的代码更改为:

    FILE *fd;
    if ((fd=fopen(fileName,"r")) == NULL)
    {   
        printf("File failed to open");
        exit(1);
    }
    

    【讨论】:

      【解决方案3】:

      == 的优先级高于=,因此它将fopen() 的结果与NULL 进行比较,然后将其分配给fd

      【讨论】:

        【解决方案4】:

        你需要在赋值两边加上括号:

        if ((fd=fopen(fileName,"r")) == NULL)
        ....
        

        【讨论】:

          【解决方案5】:

          == 的优先级高于 =。

          【讨论】:

            【解决方案6】:

            你做了以下事情吗?

            #include <stdio.h>
            

            没有这个,编译器假定所有函数都返回一个int

            【讨论】:

            • 没有 cmets 的降价?不良形式 ppl。帮助我从错误中吸取教训。另请注意 - 这是一个问题,而不是一个断言。
            猜你喜欢
            • 2015-02-19
            • 1970-01-01
            • 1970-01-01
            • 2012-07-27
            • 1970-01-01
            • 2011-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多