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.