네임 스페이스에 여러 파일에 #include 기능을 포함시키는 것이 올바른 방법입니까?다중 정의 및 네임 스페이스
test.h
#pragma once
#ifndef TEST
#define TEST
namespace test{
namespace {
bool test(){
return true;
}
}
}
#endif //TEST
네임 스페이스에 여러 파일에 #include 기능을 포함시키는 것이 올바른 방법입니까?다중 정의 및 네임 스페이스
test.h
#pragma once
#ifndef TEST
#define TEST
namespace test{
namespace {
bool test(){
return true;
}
}
}
#endif //TEST
포함 보호 이름 TEST
은 다른 매크로와 충돌하기 때문에 HEADERNAME_H
과 같이 더 정교한 것을 사용하십시오.
참고 : 밑줄로 시작하는 이름과 대문자로 시작하는 이름과 두 개의 연속 된 밑줄이있는 이름은 구현을 위해 예약되어 있습니다.
둘째, 헤더 파일에 넣으려면 함수 정의가 inline
이어야합니다. 그렇지 않으면 여러 번역 단위에 포함될 때 다중 정의 링커 오류가 발생합니다. 또는 공식적으로 표준의 ODR (One Definition Rule)은 모두가 inline
이고 실제로 동일하지 않은 한 이러한 여러 정의를 금지합니다.
편집 : 내가 익명의 네임 스페이스의 사용을 보지 않았기 때문에 위의 삭제합니다.
익명 네임 스페이스 대신 각 변환 단위에서 별도의 네임 스페이스를 제공하고 위의 각 네임 스페이스에서 별도의 (동일한) 함수 정의를 사용하는 대신 위의 텍스트에서 설명한대로 inline
–을 사용하면됩니다.
건배 & HTH.,
예. 동일한 이름의 동일한 이름을 붙이고 이름을 간단하게 유지할 수 있기 때문에
익명 네임 스페이스는 줄 바꿈 모든 식별자를 구성하는 번역 단위가.에 (조만간)에 포함되는 헤더에 익명의 네임 스페이스를 넣는 독특한 서로 다른 번역 단위를 사용하면 해당 익명 네임 스페이스에 정의 된 모든 식별자가 각 번역 단위에 별도로 (동일하게) 이됩니다..
나는 이것을 원한 유스 케이스를 아직 보지 못했다.
조언 해 주셔서 감사합니다. – Stals