当我的函数在.h和.c文件

时间:2018-04-08 15:30:16

标签: c gcc

我有以下编译错误:

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文件与其他文件没有什么不同,所以哪里可以来自哪里?

1 个答案:

答案 0 :(得分:3)

编译器输出中的这一行:

---
- hosts: my-test
  remote_user: myuser
  become: true
  become_method: sudo

  tasks:
#Extend /opt to 1GB
  - name: Extend /opt 2048m.
    lvol:
      vg: rootvg
      lv: rootvg-opt
      size: 1024m

说明您实际使用预编译标头(前面的fatal: [my-test.host.nu]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Shared connection to my-test.host.nu closed.\r\n", "module_stdout": "/usr/bin/python: can't open file '/home/myuser/.ansible/tmp/ansible-tmp-1523204435.39-113929450187838/setup.py': [Errno 13] Permission denied\r\n", "msg": "MODULE FAILURE", "rc": 1} 表示该文件有效)。如果您按如下方式编译头文件,则可以生成此文件:

! code_generation.h.gch

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

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