0

这应该被编译成一个静态库来做作业。当我使用命令:“gcc -c innoprompt.c inprompt.c”时,我收到警告,它指向“fin = openFilePrompt();”行 来自 innoprompt.c。我看不出这将如何导致此警告。此外,当我使用链接的库编译实际程序时,我会收到相同的警告。由于分配的性质,我不允许更改从库中调用函数的文件。

这是我的文件头。

#pragma once

#ifndef LIBINFILEUTIL_H
#define LIBINFILEUTIL_H

#include <stdio.h>

FILE* openInputFile(char* fileName);
FILE* openInputFile();

#endif

这是我的 inprompt.c #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;
}
4

1 回答 1

4

标头没有声明 function openFilePrompt(),那么编译器如何知道它返回的是指针而不是int

就目前而言,您的标头声明了两次相同的函数,一次带有原型,一次没有。也许您应该将第二个替换为:

FILE *openFilePrompt(void);

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

FILE *openFilePrompt();

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

于 2013-05-10T05:51:30.153 回答