강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của m1nq
m1nq

câu hỏi đã được viết

C ngôn ngữ học theo cách làm của Hồng Jeong-mo

16.12 Thư viện

header file과 include 질문드립니다!

Viết

·

442

0

/*
        MyLibrary.c
*/

#include "MyLibrary.h"

#include <stdio.h>

void say_hello()
{
	printf("Hello\n");
}

void say_world()
{
	printf("World\n");
}



/*
        MyLibrary.h
*/

#pragma once


void say_hello();
void say_world();

 

위와 같은 강의 중 코드에서,

Q1. header file의 프로토타입? 과 c file의 몸체가 연결되는 것은 
        external linkage인 function의 특성때문이 아닌가요 !


Q2. 왜 c file에서 h file을 include 해주는지 잘 모르겠습니다!
        일단 include를 안해도 함수가 연결이 되는 것 같고...

         또 굳이 include를 한다면 뭔가 함수의 이름만 있는 header file에서 
         함수의 몸체가 있는 c file을 include 해야 맞는 것 같고...

          어떤 원리고, 이유인가요?

c

Câu trả lời 3

1

아 제가 놓치고 있던 부분이 있었네요. static 안 붙인 일반 함수들은 전역함수이다 보니 같은 프로젝트 내의 c 파일들은 다 다른 c파일에서 정의된 함수를 알고 있는듯 하네요.

보통 선언부는 헤더파일에 모아두고 정의는 소스파일에서 하기를 권장하는데 같은 프로젝트 내의 c 소스파일들끼리 서로의 함수를 알고 있다면 뭐하러 헤더파일을 인클루딩할까 싶어 저도 문득 궁금해졌습니다. 

https://kldp.org/node/154523

찾아보니 이 링크의 답글들에서 자세히 설명을 해주시고 있네요. 

함수 선언부를 모아둔 헤더파일을 굳이 사용하지 않더라도 문제는 없지만 함수 선언부만 모아둔 헤더파일을 사용하면 유지보수 하기가 더 쉽기 때문에 권장을 하는 것 같아요. 사용할 함수들을 한눈에 볼 수 있기도 하구요. 링크 참고해보세요!

1

일단 include를 안해도 함수가 연결이 되는 것 같고... 👉 오 아닙니다..! include 안하면 몰라요!

c파일에서 인클루드하여 바디를 정의해주는 이유는 제가 바로 이전 질문글에 답변드린 것으로 답변이 될 것 같습니다. 

0

m1nq님의 프로필 이미지
m1nq
Người đặt câu hỏi

답변 감사드립니다.

이전 질문에서 말씀해주신 c와 h를 나누는 이유는 이해가 됐습니다.

음... 답변에서 c파일에서 include를 안하면 header파일에서 모른다고 하신 부분이

제가 테스트를 해봤을때는 왜 되는걸까요? ㅠㅠ

<test_header.c >

#include <stdio.h>
void test()

{        printf("didn't include\n"); }

<test_header.h >

void test();

위 두 파일로 lib을 만들고, 아예 다른 프로젝트에서 불러와보았습니다.

<TEST.C>

#include <stdio.h>

#include <test_header.h>

int main()

{        test(); 

         return 0;

}

했을때, 라이브러리의 c파일에서 header를 Include 하지 않았음에도 
test함수가 잘 실행이 되더라구요,,,,, 왜 그런 것일까요?

Hình ảnh hồ sơ của m1nq
m1nq

câu hỏi đã được viết

Đặt câu hỏi