我有以下编译错误:
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 文件。