2017-03-12 8 views
5

파일에 "hello"를 쓰는 기능을 만들고 있습니다. 나는 그것을 다른 파일에 넣고 프로그램의 헤더를 포함 시켰습니다. 그러나 gcc는 오류를 제공합니다 : 오류 : 알 수없는 유형 이름 'FILE'.오류 : 알 수없는 형식 이름 'FILE'

#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에서 컴파일 발생 코드는

가 APP.C

이하 주어진다 :

[email protected]:~/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){ 
       ^

나는 실수를해서 죄송합니다. 초보자입니다.

+7

#INCLUDE ''도. 'FILE'은'stdio.h '에 정의되어 있습니다. –

답변

4

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 덕분에 그것을 지적했습니다).

write_hello.h

#ifndef WRITE_HELLO_H 
#define WRITE_HELLO_H 
#include <stdio.h> 
void write_hello(FILE*); 
#endif 

write_hello.c write_hello.c` '에서

#include <stdio.h> 
#include "write_hello.h" 
void write_hello(FILE* fp){ 
    fprintf(fp,"hello"); 
    printf("Done\n"); 
} 
+1

당신이 찾고있는 용어가 "내부 가드 포함"이라고 생각합니다 – StoryTeller

+0

그래, 고마워. 하지만 여러 파일에서 stdio.h를 반복해서 사용하면 stdio.h가 두 번 이상 포함되거나 stdio.h에도 "내부 포함 가드"가 있음을 의미합니까? 감사합니다. –

+1

@HarshDave, 예, stdio.h에는 내부 포함 가드, 표준 포함 파일 모두 포함. 헤더를 처음으로 포함하면 가드를 정의하고 그 내용을 포함합니다. 두 번째로, 가드가 이미 정의되어 있으므로 #ifndef가 거짓이며 전체 헤더가 건너 뜁니다. 이것은 gcc의 컴파일러가보기 전에 C 전처리 기인 cpp에 의해 수행됩니다. 따라서 stdio.h는 컴파일 단위 당 한 번만 포함됩니다. – ScottK

관련 문제