gcc警告的未知原因:赋值使指针从整数转换而不强制转换



这应该被编译成一个静态库作为作业。当我使用命令:"gcc -c innoprompt.c inprompt.c"时,我收到警告,它指向innoprompt.c中的"fin = openFilePrompt();"行。我看不出这是怎么引起这个警告的。而且,当我用链接的库编译实际的程序时,我得到了同样的警告。由于赋值的性质,我不允许更改从库中调用函数的文件。

这是我的文件头。

#pragma once
#ifndef LIBINFILEUTIL_H
#define LIBINFILEUTIL_H
#include <stdio.h>
FILE* openInputFile(char* fileName);
FILE* openInputFile();
#endif
这是我的即兴表演# include"libinfileutil.h"
FILE* openFilePrompt(){
    char fileName[100];
    FILE* fin = NULL;
    do{
        printf("nPlease enter file to be opened: ");
        fscanf(stdin,"%s",fileName);
        while(fgetc(stdin) !='n');
        fin = fopen(fileName, "r");
        if(fin==NULL)
            printf("Failed to open file. Please try another file name.n");
    }while(fin==NULL);
    return fin;
}

最后这是我的innoprompt。c

#include "libinfileutil.h"
FILE* openInputFile(char* fileName){
    FILE* fin = NULL;
    fin = fopen(fileName, "r");
        if(fin==NULL)
            fin = openFilePrompt();
    return fin;
}

头文件没有声明函数openFilePrompt(),那么编译器如何知道它返回的是指针而不是int呢?

实际上,头文件声明了同一个函数两次,一次带prototype,一次不带prototype。也许你应该用:

FILE *openFilePrompt(void);

我然后使用void在函数定义也对称。请注意,在C(与c++相反)中,该声明与:

之间有很大的区别。
FILE *openFilePrompt();

这表示'函数openFilePrompt()存在,它返回FILE *,但它接受未指定类型的任意(但固定)数量的参数'。

最新更新