Chapter 02. 전처리기를 이용하여 다중 파일을 사용한다.

 Point

공동으로 프로젝트를 진행하다 보면 여러 소스 파일에서 헤더파일을 인클루드 시켜

링크에러가 많이 발생하며 초보들은 원인은 못 찾는 경우가 많이 있습니다.

  1. #ifndef ~ #ifdef ~ #endif
  2. #pragma once

 이 두 방법 중 하나를 선택하여 사용해서 여y러 파일이 중복 포함 되는 것을 막을 수 있습니다.

 

Content

처음으로 프로그래밍을 하게 되면 한 파일에 모든 소스코드를 작성하는 경우가 많습니다.

그리고 실행을 하기 위해 많은 문법 에러를 만나게 됩니다.


test.c

  1. #include <stdio.h>
  2. #include "data.h"
  3.  extern int Add( int, int );
  4. void main()
  5. {
  6. ....
  7. c = Add( a,b );
  8. printf("%d", c);
  9. printf("%d", diff);
  10. ....
  11. }

 lib.c

  1. #include "data.h"
  2. int Add( int, int );
  3. int Add( int x, int y )
  4. {
  5. diff = x - y;
  6. return x + y;
  7. }

data.h

  1.  int diff;

 이 소스에서 lib.c와 test.c 에서 data.h 를 둘다 include 하면서 두개의 소스파일에서 모두 diff를 전역변수로

선언함으로써 C컴파일러에서 링크에러를 발생 시킵니다.

 

이와 같이 여러 사람과 같이 프로젝트를 진행하게 되면 수십 또는 수백개의 파일을 각자 작성하여 통합하여

실행하면서 헤더파일을 여러번 인클루드 하여 링크 에러를 많이 발생 시킵니다.

문법 에러와는 다르게 링크 에러의 경우에는 원인을 찾기가 힘들어 이를 수정하기가 까다롭습니다.


 data.h

  1. #ifndef _DATA_H // data가 정의 되어 있지 않으면
  2. #define _DATA_H // data를 정의하라
  3. int diff;
  4. #endif                 // 전처리기의 끝

  1. #pragma once
  2. int diff

둘중에 한가지 방식을 사용하여 한번만 인클루드 해주게 하는 것을 습관 들이는 것이 좋습니다.

#pragma once가 간단해 보이긴 하지만 지원하지 않는 컴파일러도 있기 때문에

#ifndef ~ #define ~ #endif 를 사용하는 것이 좋습니다.

이 글은 스프링노트에서 작성되었습니다.

설정

트랙백

댓글