c - gcc 警告 : assignment makes pointer from integer without cast 的未知原因

标签 c gcc warnings

<分区>

这个应该是编译成静态库做作业的。当我使用命令时:“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;
}

最佳答案

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

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

FILE *openFilePrompt(void);

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

FILE *openFilePrompt();

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

关于c - gcc 警告 : assignment makes pointer from integer without cast 的未知原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475976/

相关文章:

c++ - X 在此函数中使用未初始化

c - 为什么宏展开失败而必须使用一层间接寻址?

c - 如何在C中显示十六进制数?

c - 指向涉及多个 C 源文件的结构的指针

C++ 精确计时器 time.h boost::posix_time

c - 合法的数组赋值。是否可以?

android - 在 Android 4.1.x 上取消 ActionBar 溢出菜单时发出警告

c - 为什么我的 #ifndef 预处理器指令在编译时不能阻止 header 的多次包含?

c++ - .o 文件与 .a 文件

qt - QMessageBox 警告黄色感叹号图标