当我的函数在 .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 = '\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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我们有函数和 lambdas 时,C++ 中的“块”是什么?

无法从main引用.cpp和.h文件中的函数。C ++

混合.c和.h文件

链接.c和.h文件

设计.h和.cpp文件C ++:错误

C:运算符'->'的问题,编译但返回错误。有main.c和.h,.c文件

在.h和.c文件中定义功能

当我在 c 中调用函数时出现问题

当我使用C ++库的函数时失败

在子文件夹中编译.h和.cpp时的C ++未定义引用

C 和 <complex.h> 文件

关于C编程中的.c文件和.h文件?

当我使用javascript登录时,为什么类和函数中的函数具有不同的表达式?

PostgreSQL 9.6 C函数编译错误:elog.h:未知类型'sigjmp'

包含.c文件和.h文件有什么区别

类方法和具有相同名称的变量,在C ++中而不在Java中编译错误?

我想将.h和.c文件都从src移动到dst

如何编译具有“ wlanapi.h”和“ windows.h”依赖项的C ++代码

C++中构造模板函数时编译错误C2664和C2440

C ++当我不知道子类型时,从基类中调用子类函数

当我在FlowableOnSubscribe类中调用onNext时,订户的onNext和onComplete函数无法运行

当我处理信号_handler和主函数中的变量时,如何屏蔽信号

当我尝试使用名称和参数类型相同的两个方法时,为什么会出现编译错误?

当我尝试在 C++ 中调用继承的函数时发生错误

当我错过C中的动态内存分配时,为什么没有编译错误?

当我运行此函数时,为什么我的iex返回“ -C”或“ -A”

当我在c中使用strlcpy函数时,编译器给我一个错误

当我应该使用render时:h => h(App)?

当我在C / C ++中调用recvfrom()函数时,读取逻辑是什么?