当我的函数在 .h 和 .c 文件中具有相同的配置文件时出现冲突类型编译错误



我有以下编译错误:

gcc -Wall -ggdb -c code_generation.c
code_generation.c:3:6: error: conflicting types for ‘generateFile’
void generateFile(FILE *fp, char *filename, char *result){
     ^
code_generation.h:4:6: note: previous declaration of ‘generateFile’ was here

我不明白它来自哪里。这是我在 code_generation.h 文件中的函数声明:

#pragma once
#include <stdio.h>
#include <string.h>
void generateFile(FILE *fp, char *filename, char *result);
void generateInitDec(FILE *fp, char *filename);

这是我在 code_generation.c 文件中的定义:

#include "code_generation.h"
void generateFile(FILE *fp, char *filename, char *result){
    char *res = NULL;
    memset(result, 0, sizeof(result));
    res = strrchr(filename, '.');
    if(res != NULL)
    *res = '';
    sprintf(result, "%s.nasm", filename);
    fp = fopen(result, "w");
    fprintf(fp, "%s 'io.asm'n", "%include");
}

如您所见,两个配置文件完全相同,所以我很难理解错误,也不知道如何纠正它。

你能告诉我这个错误的含义是什么,以及如何解决它吗?

提前谢谢。

编辑:按照建议,我将 -H 添加到我的编译器命令行中。当编译器出现在 code_generations.c/h 时,我有以下几行:

gcc -Wall -ggdb -H -c code_generation.c
! code_generation.h.gch
 code_generation.c

在其他文件上时,它看起来像这样: gcc -Wall -ggdb -H -c affiche_arbre_abstrait.c

没有关于 .h 文件的进一步警告。我的 code_generation.h 文件与其他任何文件没有什么不同,那么它来自哪里?

编译器

输出中的以下行:

! code_generation.h.gch

声明您实际使用的是预编译标头(前面的!表示该文件有效(。 如果按如下方式自行编译头文件,则可以生成此文件:

gcc -Wall -ggdb -c code_generation.h

如果存在这样的预编译头,则将使用它而不是实际的头文件。 发生的情况是,您可能在函数的签名与现在的签名不同时编译了此头文件,因此现在.h文件的内容与.gch文件中的内容不匹配。

删除 .gch 文件,编译器将使用 .h 文件。

最新更新