Inflearn Community Q&A
header file과 include 질문드립니다!
Written on
·
445
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 해야 맞는 것 같고...
어떤 원리고, 이유인가요?
Quiz
전처리기(preprocessor)가 프로그램 빌드 과정에서 하는 주된 역할은 무엇일까요?
소스 코드를 기계어로 번역합니다.
다른 소스 파일이나 헤더 파일의 내용을 복사하여 붙여넣고 매크로를 확장합니다.
여러 목적 파일을 합쳐 실행 파일을 만듭니다.
프로그램 실행 중 발생하는 오류를 처리합니다.
Answer 3
1
아 제가 놓치고 있던 부분이 있었네요. static 안 붙인 일반 함수들은 전역함수이다 보니 같은 프로젝트 내의 c 파일들은 다 다른 c파일에서 정의된 함수를 알고 있는듯 하네요.
보통 선언부는 헤더파일에 모아두고 정의는 소스파일에서 하기를 권장하는데 같은 프로젝트 내의 c 소스파일들끼리 서로의 함수를 알고 있다면 뭐하러 헤더파일을 인클루딩할까 싶어 저도 문득 궁금해졌습니다.
찾아보니 이 링크의 답글들에서 자세히 설명을 해주시고 있네요.
함수 선언부를 모아둔 헤더파일을 굳이 사용하지 않더라도 문제는 없지만 함수 선언부만 모아둔 헤더파일을 사용하면 유지보수 하기가 더 쉽기 때문에 권장을 하는 것 같아요. 사용할 함수들을 한눈에 볼 수 있기도 하구요. 링크 참고해보세요!
1
일단 include를 안해도 함수가 연결이 되는 것 같고... 👉 오 아닙니다..! include 안하면 몰라요!
c파일에서 인클루드하여 바디를 정의해주는 이유는 제가 바로 이전 질문글에 답변드린 것으로 답변이 될 것 같습니다.
0
답변 감사드립니다.
이전 질문에서 말씀해주신 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함수가 잘 실행이 되더라구요,,,,, 왜 그런 것일까요?





