
void main()? int main()?
void main()
{
...
}
vs
int main()
{
...
return 0;
}
void main()은 컴파일 에러를 뱉진 않지만 C++표준이 아니기에 int main()을 권장합니다.
int main()함수가 return한 값은 어디로?
- 부모 - 자식이 나뉘어진 경우
부모 프로그램은 자식 프로그램의 main() 함수에서 리턴한 값을 알아내는 함수를 통해, 자식 프로그램의 종료 상태를 알게 됩니다.
- 부모 - 자식이 나뉘어지지않은 경우(1개의 파일 등)
모든 프로그램의 부모는 운영체제이며, 운영체제와 응용프로그램 사이에 특별한 종료 관계가 설정되어있지 않기 때문에 응용프로그램이 0이 아닌 다른 정수를 리턴한다고 해도 아무런 의미가 없습니다.
#include<iostream>
: 전처리기에 대한 지시문
c++ 소스파일을 컴파일 하기 전 <iostream> 헤어 파일을 읽어 c++ 소스파일 안에 삽입할 것을 지시하는 지시문 입니다.c++ 컴파일러는 처음에 전처리기를 호출하여 #include로 된 라인을 모두 처리하도록 한 후 c++ 소스파일을 컴파일 합니다.
<iostream> 헤더 파일에는 c++표준 입출력을 위한 클래스와 객체가 선언되어있기 때문에 키보드 입력이나 화면 출력을 위해서는 필수 입니다.
namespace 와 std::
namespace란?
: 이름 공간
namespace는 여러 프로젝트나 여러 사람들이 작성한 프로그램에서 변수, 함수, 클래스 등의 이름(identifier)이 충돌하는 것을 막기 위해, 개발자가 자신만의 고유한 이름 공간을 생성할 수 있습니다.
std:: 란?
2003년 c++표준에서 정한 표준 이름 공간으로서, 모든 c++ 표준 라이브러리는 std 이름 공간에 만들어져있습니다.
우리가 자주쓰는 using namespace std; 이 문구는 즉,
std 이름 공간에 선언된 모든 이름에 std::를 붙이는 것을 생략한다는 뜻 입니다.
충돌을 방지하기 위해 만들어졌지만 이것이 오히려 취약점이 될 수 있습니다.
사용자가 작성한 코드와 동일한 이름의 변수나 함수가 std 이름 공간에도 존재한다면
using namespace std;를 추가한다면 사용자의 의도와 다르게 동작하는 경우가 발생할 수 있습니다.
또한 예측하기 힘든 충돌이 일어나므로 using namespace std 사용을 지양합니다.