2013-03-11 2 views
5

파이썬에서 오는 C++의 초보자로서, 왜 C++이 전역 네임 스페이스의 함수 외부에서 코드를 허용하지 않는지 잘 모르겠습니다. main()이 호출되거나 다른 함수가 선언되기 전에 초기화를하는 것이 유용 할 것 같습니다. (나는 컴파일러와 논쟁하려고하지 않고, 이런 방식으로 구현하는 생각 프로세스를 알고 싶다.)왜 함수 내에 C++ 코드를 포함해야합니까?

+0

함수가없는 경우 어떻게 그러한 코드가 실행됩니까? –

+0

지저분한 전역 코드를 포함하지 않는'main' 전에 코드를 실행하는 방법은 여전히 ​​있습니다. – chris

+1

그다지 유용하지는 않습니다. –

답변

12

파이썬 프로그램을 실행할 때, 인터프리터는 위에서 아래로 아래쪽 실행. C++에서는 그렇게되지 않습니다. 컴파일러는 모든 함수를 기계어 코드로 작성한 다음 링커가 연결합니다. 런타임에 운영 체제가 main 함수를 호출하면 모든 것이 계속됩니다. 그 맥락에서, 함수 밖의 코드는 의미가 없습니다. 언제 실행됩니까?

+0

이 답변은 내가 배운 C++에서 다소 광택있는 핵심 아이디어로 많은 도움이되었습니다. 즉 그것이 컴파일 된 언어라는 것입니다. –

+0

나는 이것이 C에서도 마찬가지라고 생각하고 있나? –

+0

예, C와 동일합니다. –

1

main()은 프로그램에 대한 액세스 지점입니다. 따라서 작성하고자하는 코드는 그 시점부터 실행 순서가 있어야합니다.

정적 변수는 main()이 실행되기 전에 시작되므로, 그 전에 필요한 변수를 초기화 할 수 있습니다.

그러나 프로그램의 상태를 시작하는 실행 코드를 원한다면 프로그램 시작 부분에서 실행하고 정적 변수를 남용하고 일부 생성자를 수행해야합니다.

3

이것은 C++과 Python의 스타일 차이로 생각할 수 있습니다. 그러나, 그것도 꽤 좋은 이유가 있습니다. C와 C++에서 코드의 실행이 시작되는 매우 명확하고 구체적인 장소가 있습니다. 이것은 main() 함수의 시작입니다. (물론 이것은 근사값에 불과합니다. 그러나 지금은 무시할 수 있습니다) 사실, C/C++ 프로그램은 main() 함수로 시작하고 끝납니다. 제 의견으로는 프로그램이 실제로 무엇을하는지 이해하려고 할 때 상당히 도움이됩니다. 프로그램의 높은 수준의 흐름이 명확합니다. 이것을 대안과 대조하십시오. 파일을 통해 그리고 함수와 겹침 선 사이에 코드가 흩어져 있습니다.

잘 정리되고 평범하지 않은 Python 프로그램에서도 코드의 본문을 if __name__ == "__main__":으로 두겠습니까?

이제 좀 더 진보 된 몇 가지 사항이 있습니다. main() 함수가 호출되기 전에 코드를 실행하는 방법이 있습니다. 여기에 그들 중 하나입니다 :

#include <iostream> 
using namespace std; 

bool RunBeforeMain() 
{ 
    cout << "Before main()!" << endl; 
    return true; 
} 

// This variable here causes the above function to be called 
bool ignore_this_variable = RunBeforeMain(); 

int main() 
{ 
    cout << "Start of main()" << endl; 
    return 0; 
} 

는 또한 모든 글로벌 변수의 생성자와 클래스의 모든 static 회원들과 어떤 플랫폼에 따라 물건을 main() 전에 실행됩니다. 마찬가지로, main()이 완료된 후 코드를 실행할 수있는 방법이 있습니다. 그것들은 보통 main()이 시작되기 전에 생성 된 객체의 소멸자이며 atexit() 함수로 등록 된 함수입니다.

관련 문제