我正在创建一个只是向文件写“hello”的函数。我把它放在一个不同的文件中并将其标题包含在程序中。但是gcc给出了一个错误:错误:未知类型名称'FILE'。 代码如下:
app.c:
#include<stdio.h>
#include<stdlib.h>
#include"write_hello.h"
int main(){
FILE* fp;
fp = fopen("new_file.txt","w");
write_hello(fp);
return 0;
}
write_hello.h:
void write_hello(FILE*);
write_hello.c:
void write_hello(FILE* fp){
fprintf(fp,"hello");
printf("Done\n");
}
通过gcc编译时会发生以下情况:
harsh@harsh-Inspiron-3558:~/c/bank_management/include/test$ sudo gcc app.c
write_hello.c -o app
write_hello.c:3:18: error: unknown type name ‘FILE’
void write_hello(FILE* fp){
^
对于任何错误抱歉。我是初学者。
答案 0 :(得分:10)
FILE在stdio.h中定义,您需要将其包含在使用它的每个文件中。所以write_hello.h和write_hello.c都应该包含它,而write_hello.c也应该包含write_hello.h(因为它实现了write_hello.h中定义的函数)。
另请注意,每个头文件的标准做法是定义一个同名的宏(IN CAPS),并将整个头部包含在#ifndef,#endif之间。在C中,这可以防止标题两次获得#included。这被称为“内部包含守卫”(感谢Story Teller指出这一点)。所有系统头文件(如stdio.h)都包含一个内部包含防护。所有用户定义的标题还应包含内部包含保护,如下例所示。
<强> write_hello.h 强>
#ifndef WRITE_HELLO_H
#define WRITE_HELLO_H
#include <stdio.h>
void write_hello(FILE*);
#endif
<强> write_hello.c 强>
#include <stdio.h>
#include "write_hello.h"
void write_hello(FILE* fp){
fprintf(fp,"hello");
printf("Done\n");
}