2009-04-02 5 views

답변

27

는 한 번만 포함되는 각 파일을 제한 할 필요가있다. 당신은 2 가지 방법으로 이것을 할 수 있습니다. 헤더 파일의 상단에

1) 넣어 :

#pragma once 

또는 2) 컴파일러가 헤더 파일의 맨/마지막에 넣어 그, 지원하지 않는 경우

#ifndef _MYFILE_H_ 
#define _MYFILE_H_ 
... 
#endif 

MYFILE을 파일 이름으로 바꾸고 ...을 헤더 파일의 내용으로 바꿉니다.

+1

내가의 #pragma는 GCC에서, VC++에없는 일이라고 생각 사용하여 모든 헤더 파일 만, 각 소스 파일에 대해 한 번 포함될 수 있음을 확인 . #define 트릭은 이식성이 있습니다. – Gorpik

+0

gcc 및 vC++에 의해 supoprted –

+0

위키피디아에서는 #pragma once는 VC++ 및 gcc http://en.wikipedia.org/wiki/Pragma_once에서 지원됩니다. –

10

오류는 한 위치에서 정의 된 기호가 있고 다른 위치에서 대체 정의가 작성되었음을 의미합니다.

경우이 같은 경우에 발생할 수 있습니다

  • 가 아닌 사소한를 호출하는 기능과의 프로토 타입 사이에 불일치가있는 경우 같은 이름
  • 로 두 가지 기능을 정의하는 경우 함수가 정의되기 전에 프로토 타입이없는 경우

이 마지막 경우에는 실제 함수와 컴파일러에서 가정하는 "암시 적 선언"사이의 불일치가 있습니다 그것은 사용할 프로토 타입이 없을 때입니다. . 그 함수의 프로토 타입은 그들이 static을 경우 모든 기능은 파일 내에서 즉, 해당 범위 (내에서 고유 한 이름을 가지고 있음을 보장 한 번

  • 를 선언 보장

    • , 또는 :

      이러한 상황

      을 방지 할 수 있습니다
    • 소스 파일에서 extern 문을 사용하여 프로토 타입을 선언하는 경우주의하십시오. 적절한 헤더 파일에서 프로토 타입을 사용하는 것이 더 좋습니다.
    • static 함수의 경우 원본 파일 내에서 또는 다른 개체 파일에서 사용될 경우 헤더 파일에서 모든 함수에 프로토 타입이 있는지 확인하십시오.
    • 중 하나 메흐 다드와 브라이언 R. 본디에 의해 제안 된 구조의