2011-01-27 4 views

답변

12

"함수 구현 파일"은 .h 파일 또는 .cpp 파일을 의미합니까? (보통 .cpp 파일을 "구현"파일이라고 부르며 .h 파일은 "인터페이스"파일입니다.)

.cpp 파일을 의미하는 경우 물론입니다. 그 곳에서 보통 using namespace std이 표시됩니다. 이 .cpp 파일의 모든 코드는 인증없이 std에 액세스 할 수 있음을 의미합니다.

.h 파일을 의미하는 경우 일 수 있지만 그렇게해서는 안됩니다. .h 파일에 포함 시키면 .h 파일이 포함 된 .cpp 파일에 자동으로 적용됩니다.이 파일은 많은 파일 일 수 있습니다. 일반적으로 다른 모듈을 가져올 네임 스페이스로 말하기를 원하지 않습니다. 일반적인 .h 파일 대신 모든 .cpp 파일에 저장하는 것이 가장 좋습니다.

+0

예, 저는 cpp 파일을 의미합니다. main cpp 파일에서 namespace std를 사용하고 함수 ".cpp"(주 함수가 아님) 파일에서 "std ::"를 사용하므로 함수 cpp 파일에서 네임 스페이스를 사용하는 것에 대해 궁금합니다. – Sean

+2

@Sean : "main".cpp 파일에 대한 특별한 규칙은 없습니다. 'main'_function_ (단지'int' 등등)에 관한 몇 가지 규칙이 있지만 그 규칙은 같은 파일에 정의 된 다른 함수 나 클래스에 아무런 영향을 미치지 않습니다. – MSalters

4

"기능 구현 파일"은 .C/.cpp 등의 파일을 의미하지만 피할 수는 있습니다. 대신, 예를 들어, , std::endl 등등에 대해서 <iostream>이 필요하다면 using std::cout;using std::endl;에이 두 가지를 주입하면 이제는 coutendl으로 간단하게 쓸 수 있습니다.

6

나는이 같은 것을 의미 있으리라 믿고있어 :

// Foo.h 

void SayHello(); 

...

// Foo.cpp 

#include "Foo.h" 

using namespace std; 

void SayHello() 
{ 
    cout << "Hello, world!" << endl; 
} 

이 그 예 다음의 경우합니다. 그러나 큰 프로젝트에서 using namespace std;을 사용하는 것은 나쁜 습관으로 간주됩니다.

+1

나중에 구현 파일에서 "네임 스페이스 사용"을 사용하지 않으려합니다. 나중에 단일 번역 단위를 사용하려는 경우 이름 충돌이 발생합니다. – GameDeveloper

70

아마도 아래와 같이 기능 몸체에 using namespace std;을 넣을 수도 있습니다. 이렇게하면 using namespace 문 범위가 제한됩니다.

void f() { 
    using namespace std; 
    cout << "Foo" << endl; 
    //.. 
}; 

void g() { 
    cout << "Bar" << endl; //ERROR: cout and endl are not declared in this scope. 
}; 

이 당신이 가끔 확인하지 자체해야하지만, 어떤 (헤더 파일에 기록되는 함수의 본문에 네임 스페이스의 요소를 많이 사용하려는 경우 유용 할 수 있습니다 또는 거의 필요한 (예 : 템플릿).