我有以下编译错误:
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文件与其他文件没有什么不同,所以哪里可以来自哪里?
答案 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文件。