파이썬에서 오는 C++의 초보자로서, 왜 C++이 전역 네임 스페이스의 함수 외부에서 코드를 허용하지 않는지 잘 모르겠습니다. main()이 호출되거나 다른 함수가 선언되기 전에 초기화를하는 것이 유용 할 것 같습니다. (나는 컴파일러와 논쟁하려고하지 않고, 이런 방식으로 구현하는 생각 프로세스를 알고 싶다.)왜 함수 내에 C++ 코드를 포함해야합니까?
답변
파이썬 프로그램을 실행할 때, 인터프리터는 위에서 아래로 아래쪽 실행. C++에서는 그렇게되지 않습니다. 컴파일러는 모든 함수를 기계어 코드로 작성한 다음 링커가 연결합니다. 런타임에 운영 체제가 main
함수를 호출하면 모든 것이 계속됩니다. 그 맥락에서, 함수 밖의 코드는 의미가 없습니다. 언제 실행됩니까?
이 답변은 내가 배운 C++에서 다소 광택있는 핵심 아이디어로 많은 도움이되었습니다. 즉 그것이 컴파일 된 언어라는 것입니다. –
나는 이것이 C에서도 마찬가지라고 생각하고 있나? –
예, C와 동일합니다. –
main()은 프로그램에 대한 액세스 지점입니다. 따라서 작성하고자하는 코드는 그 시점부터 실행 순서가 있어야합니다.
정적 변수는 main()이 실행되기 전에 시작되므로, 그 전에 필요한 변수를 초기화 할 수 있습니다.
그러나 프로그램의 상태를 시작하는 실행 코드를 원한다면 프로그램 시작 부분에서 실행하고 정적 변수를 남용하고 일부 생성자를 수행해야합니다.
이것은 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()
함수로 등록 된 함수입니다.
- 1. 네임 스페이스 내에 헤더 파일을 포함해야합니까?
- 2. 헤더 파일에 소스 코드를 포함해야합니까?
- 3. 왜 stack.c를 stack.c에 포함해야합니까?
- 4. setTimeout 함수 내에 코드를 구현할 때의 문제
- 5. CSS 이름 내에 계층 구조를 포함해야합니까?
- 6. 왜 피연산자가 하나의 열만 포함해야합니까?
- 7. R 함수 내에 함수 포함
- 8. C 코드를 컴파일하고 링크하여 C++ 함수 호출
- 9. C 코드를 사용하는 순열 함수
- 10. 클래스 함수 내에 클래스 함수 정의하기 : Python
- 11. 배열 내에 함수 저장
- 12. 왜 각 aspx 페이지에 네임 스페이스를 포함해야합니까?
- 13. 왜 재귀 함수에 "return"키워드를 포함해야합니까?
- 14. AVR C++ 프로젝트에 stdint를 포함해야합니까?
- 15. C#은 정적 메서드를 포함해야합니까?
- 16. 함수 매개 변수가 함수 내에 없습니다.
- 17. 함수 선언에 매개 변수 이름을 포함해야합니까?
- 18. PageObject 요소를 함수 내에 작성하십시오.
- 19. C++ 함수 포인터 다음 코드를 감안할 때
- 20. 함수 안에 코드를 넣어야합니다.
- 21. R 스크립트 내에 함수 포함
- 22. C++ STL 함수 호출을 왜 장황하게해야합니까?
- 23. main 함수 내에 함수의 반환 값을 저장하는 방법. C 프로그래밍
- 24. 왜 함수 선언과 함수 정의를 C 헤더 파일 (redis 소스에서)
- 25. 코드를 실행할 함수 만들기
- 26. C++에서 클래스 정의에 비표준 라이브러리를 포함해야합니까?
- 27. 함수가 PHP에서 함수 내에 있습니다.
- 28. 함수 내에 전역 변수 설정하기
- 29. 클래스가 지정된 문서 내에 인라인 코드를 작성하십시오.
- 30. 왜/optimize 스위치를 사용하여 C# 코드를 컴파일해야합니까?
함수가없는 경우 어떻게 그러한 코드가 실행됩니까? –
지저분한 전역 코드를 포함하지 않는'main' 전에 코드를 실행하는 방법은 여전히 있습니다. – chris
그다지 유용하지는 않습니다. –