我有以下编译错误:
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 = '\0';
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 文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句