C 헤더에서 네임스페이스와 "네임스페이스 사용"의 위험
그의 저서 "Thinking in C"에서 Bruce Eckel은 다음과 같이 경고합니다. 헤더 파일에 "using 네임스페이스" 지시문을 포함합니다. 이 지시문은 네임스페이스 보호를 제거하여 네임스페이스의 기호가 컴파일 단위 내에서 전역적으로 액세스되도록 허용합니다.
예시
다음 프로그램을 고려하세요.
<code class="cpp">#include <string> using namespace std; // Custom definition of a struct named "string" struct string { const char* p; }; int main() { string x; // Error: Ambiguous, which "string" is intended? }</code>
컴파일을 시도할 때 컴파일러는 모호성 문제에 직면합니다. 주 함수의 식별자 "문자열"은 사용자 정의 구조체 또는 표준 라이브러리 클래스를 참조할 수 있습니다.
헤더 파일에 미치는 영향
프로그램의 상단 부분(라인 1~5)을 별도의 헤더 파일로 추출하여 주요 기능이 포함된 소스 파일에 포함하면 모호성 문제가 지속됩니다. . 이는 "using 네임스페이스" 지시문이 문제가 있는 헤더를 직간접적으로 포함하는 모든 헤더를 포함하여 전체 컴파일 단위로 정규화되지 않은 이름 확인의 효과를 확장하기 때문입니다.
결과 및 제한 사항
헤더에서 "네임스페이스 사용"을 사용하면 여러 가지 문제가 발생할 수 있습니다.
즉, 헤더 파일의 특정 클래스나 함수 범위 내에서 "네임스페이스 사용"을 사용하는 것은 그렇지 않습니다. 지침의 효과는 나타나는 범위로 제한되므로 동일한 위험을 초래합니다.
위 내용은 C 헤더 파일에서 `using 네임스페이스` 사용을 피해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!