C에서 자신의 헤더 파일 만들기


답변:


299

foo.h

#ifndef FOO_H_   /* Include guard */
#define FOO_H_

int foo(int x);  /* An example function declaration */

#endif // FOO_H_

foo.c

#include "foo.h"  /* Include the header (not strictly necessary here) */

int foo(int x)    /* Function definition */
{
    return x + 5;
}

main.c

#include <stdio.h>
#include "foo.h"  /* Include the header here, to obtain the function declaration */

int main(void)
{
    int y = foo(3);  /* Use the function here */
    printf("%d\n", y);
    return 0;
}

GCC를 사용하여 컴파일하려면

gcc -o my_app main.c foo.c

2
@ Anu : 나는이 형식으로 읽을 수 없습니다. 이 코드를 포함하도록 원래 질문을 편집 할 수 있습니다.
— Oliver Charlesworth

3
버튼으로 만 코드를 작성하려고하면 (예 : Code :: Blocks의 "build and run")이 코드가 작동하지 않습니다. 그것은 당신에게 명백해 보일지 모르지만 나에게는 그것이 처음 일어난 일이며 문제가있는 곳을 알아내는 데 꽤 시간이 걸렸습니다.
— Jeyekomon 2016 년

5
@ Jeyekomon : 글쎄, 문제 는 어디에 있습니까?
— Oliver Charlesworth

2
"빌드 및 실행"버튼으로는 모든 것이 충분하지 않다고 말한 사람이 없습니다. :-) 저에게는 정말 놀라운 일이었습니다 (저는 초보자입니다). 이제 명령 줄이나 makefile을 먼저 사용하는 법을 배워야 할 것 같습니다.
— Jeyekomon 2016 년

1
필요한 모든 파일을 컴파일하고 gcc 프로그램 인수에 foo.c를 포함시킬 필요가없는 방법에 대해 자세히 설명 할 수 있는지 궁금했습니다. 이 기술은 무엇입니까? 또는 IDE 외부에서이를 수행 할 수있는 프로그램은 무엇입니까? – 제 생각에는
— nf071590

26
#ifndef MY_HEADER_H
# define MY_HEADER_H

//put your function headers here

#endif

MY_HEADER_H 이중 포함 가드 역할을합니다.

함수 선언의 경우 다음과 같이 서명, 즉 매개 변수 이름없이 만 정의하면됩니다.

int foo(char*);

실제로 원하는 경우 매개 변수의 식별자를 포함 할 수도 있지만 식별자는 함수 본문 (구현)에서만 사용되므로 헤더 (매개 변수 서명)의 경우 누락되기 때문에 필요하지 않습니다.

이것은 a를 받아들이고 a 를 반환하는 함수 를 선언 합니다 .foochar*int

소스 파일에는 다음이 있습니다.

#include "my_header.h"

int foo(char* name) {
   //do stuff
   return 0;
}

"함수 헤더"가 아니라 함수 선언 또는 함수 프로토 타입 이라고합니다. 헤더는 포함 된 파일이며 그 안에있는 선언은 아닙니다.
— Jonathan Wakely

@JonathanWakely 헤더 파일입니다. 헤더 파일에는 헤더가 포함되어 있습니다. 그러나 의견을 보내 주셔서 감사합니다.
— Flavius

아니, 헤더는 파일 자체이며 포함 된 선언은 아닙니다. "헤더"사용을 백업하는 평판이 좋은 단일 참조를 찾을 수 있습니까? 예를 들어 K 표준, C 표준, UNIX 프로그래밍 환경 및 Wikipedia 와 모순됩니다 .
— Jonathan Wakely

@JonathanWakely 실제로 K & R을 읽었습니까? TOC에는 "4.5 헤더 파일"섹션이 있으며 "헤더 파일"은 이탤릭체로 작성되어 용어를 나타냅니다. 이 책의 나머지 부분에서 저자들은 간결성을 위해 단순히 "헤더"를 작성하지만 형식과 TOC를 통해 올바른 용어가 무엇인지 분명합니다. 그러니 전문가가되어 틀렸을 때 알아주십시오.
— Flavius

예. "헤더"는 파일 의 선언이 아니라 파일을 나타냅니다 . 제 2 판에 대해 이야기 표준 헤더의 논의 및 페이지 33 페이지 241를 참조 정의 및 선언 명확하게 (실수 "기능 헤더를"전화)과는 정의 헤더 : "평소 연습 수집하는 것입니다 extern변수의 선언과 역사적라는 별도의 파일에 기능 헤더 가 포함되어, #include각 소스 파일의 선두. 표준 라이브러리의 기능은, 예를 들어, 헤더 등을 선언 <stdio.h>. "
— Jonathan Wakely

8

myfile.h

#ifndef _myfile_h
#define _myfile_h

void function();

#endif

myfile.c

#include "myfile.h"

void function() {

}

void function();A와 선언 않는 등의 호출을 방지하지 function(42);. 사용 void에서 선언 과 같은void function(void);
— chux - 분석 재개 모니카

5

헤더 파일에는 .c 또는 .cpp / .cxx 파일에서 정의한 함수의 프로토 타입이 포함되어 있습니다 (c 또는 c ++를 사용하는 경우에 따라 다름). 프로그램의 다른 부분에 동일한 .h를 두 번 포함하면 프로토 타입이 한 번만 포함되도록 # ifndef / # defines를 .h 코드 주위에 배치하려고합니다.

client.h

#ifndef CLIENT_H
#define CLIENT_H

short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize);


#endif /** CLIENT_H */

그런 다음 .h를 .c 파일에 다음과 같이 구현하십시오.

client.c

#include "client.h"

short socketConnect(char *host,unsigned short port,char *sendbuf,char *recievebuf, long rbufsize) {
 short ret = -1;
 //some implementation here
 return ret;
}

"프로그램의 다른 부분에 동일한 .h를 두 번 포함하면 프로토 타입이 한 번만 포함됩니다." 오해의 소지가 있습니다. 동일한 소스 파일에서 동일한 헤더 파일을 두 번 포함하지 않도록 보호 합니다 (두 개의 다른 소스 파일에 헤더를 두 번 포함하는 것이 좋습니다. 일반적으로 필요합니다!). 함수 프로토 타입을 다시 선언해도 문제가되지 않습니다. 조심해야합니다.
— Jonathan Wakely
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.