> 백엔드 개발 > C++ > 포함 가드를 사용했음에도 불구하고 내 헤더 파일이 여전히 다중 정의 오류를 일으키는 이유는 무엇입니까?

포함 가드를 사용했음에도 불구하고 내 헤더 파일이 여전히 다중 정의 오류를 일으키는 이유는 무엇입니까?

DDD
풀어 주다: 2025-01-01 11:11:09
원래의
296명이 탐색했습니다.

Why Are My Header Files Still Causing Multiple Definition Errors Despite Using Include Guards?

내 코드가 왜 포함 가드로 보호되지 않나요?

재귀적 포함

포함 가드는 헤더 파일의 상호 재귀적 포함을 방지하는 데 효과적입니다. #include 지시문을 처리할 때 전처리기는 헤더 내용을 구문 분석하기 전에 기존 매크로 정의를 확인합니다. 매크로가 이미 정의된 경우 헤더 내용을 건너뛰어 재귀를 효과적으로 방지합니다.

다중 정의

상호 포함과 달리 포함 가드는 다중 기호 정의를 방지하도록 설계되지 않았습니다. 헤더가 여러 번역 단위(별도의 .cpp 파일)에 포함되면 기호 정의가 각 단위에 복제됩니다. 이로 인해 C의 단일 정의 규칙 위반으로 인해 링커 오류가 발생할 수 있습니다.

솔루션

재귀 포함:
앞으로 상호 연결 없이 종속성을 허용하기 위해 헤더 파일에 클래스 또는 데이터 구조를 선언합니다. inclusion.

다중 정의:

  • 인라인: 포함된 헤더 파일에 정의된 함수 또는 전역 변수에 대해 inline 키워드를 사용합니다. 여러 번역 단위로. 컴파일러는 여러 기호 정의를 피하면서 호출 사이트에서 함수를 인라인하려고 시도합니다.
  • 내부 연결: 정적 또는 이름이 지정되지 않은 네임스페이스를 사용하여 기호 내부 연결을 제공하여 가시성을 현재로 제한합니다. 번역 단위. 이는 실행 파일 크기를 늘릴 수 있으므로 인라인보다 덜 바람직합니다.

위 내용은 포함 가드를 사용했음에도 불구하고 내 헤더 파일이 여전히 다중 정의 오류를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿