inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

16.7 조건에 따라 다르게 컴파일하기

ifndef와 macro 질문드립니다.

333

m1n_q

작성한 질문수 24

0


안녕하세요! ifndef와 header guard 가 궁금하여 질문드려요!


어떻게 중복방지가 되는 것인지 그 원리가 궁금합니다!
#ifdef GUARD
#define GUARD

.

.

.

#endif 

Q1. 위와같은 구조에서,
        한번 include 됐으면 define이 되었을테니 
        다음에 include될때 ifndef에서 걸러져서 ifndef ~ endif 사이 ... 을 실행 안하는 것인가요?
        define 된 GUARD가  flag같은 느낌??? 으로 이해하면 될지...! 

Q2.  강의 동영상 7:52 경, static이라서 header에서 정의가 가능하다는게 무슨 말인지 잘 모르겠습니다 ㅠㅠ
          header 내에서는 function을 정의하면 안되는 것인가요?!

c

답변 1

5

안소

1. 네 제대로 이해하고 계십니다!

2. 헤더는 여러 c 파일에 복사될 수 있는 특수한 파일이죠! 만약 my_function 함수가 static이 아니라면 이 헤더파일을 인클루딩 하는 여러 c파일에 my_function 함수 바디가 정의되는 것이나 마찬가지입니다. 그러니 "중복 정의"가 되어 에러가 발생하겠죠. static 이 붙어있는 함수면 c 파일안에서만 유효한 함수라는 것이 보장되니(즉, c파일마다 이름은 같지만 별개인 함수) static 함수는 헤더파일에서 바디까지 정의해도 아무런 문제가 발생하지 않습니다. static을 붙이지 않은 그냥 일반 extern 전역 함수라면 헤더파일 내에 바디가 정의되어 있을 때 이것을 인클루딩하는 모든 c파일에 다 복사가되니 중복 정의 문제가 발생합니다. 그래서 보통 일반 함수(extern)는 헤더파일(aaa.h)에선 프로토타입 void func(int i ); 요런식으로만 두고 c파일 (aaa.c)에서 void func의 바디를 정의하는 이런식으로 구현을 많이 합니다. 여러 c파일에서 func 함수를 사용하긴 해야하니 헤더파일에 두긴 해야하는데 바디까지 정의하면 여러 c파일에서 인클루딩 할시 중복 정의 문제가 발생하니 헤더엔 프로토타입만, 그리고 아무 c 파일 하나에서 바디 정의해주는 식으로 구현을 많이 합니다.

0

m1n_q

이해에 도움 주셔서 감사합니다 ㅠㅠ static은 헤더가 인클루드 될 c파일들을 위한 거였군요...

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

47

3

main 함수에서 왜 int만 선언이 되는걸까요

1

52

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

53

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

46

1

프로토타입과 함수간의 인자 불일치

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

134

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

112

2

소스파일안에 여러 파일

1

74

2

F5와 F7의 차이

1

75

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

52

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2

11.5 코드 구현

1

67

2