출처: C++ Primer Plus 6th Chapter 2
대답해야 하는 질문들
- Function Header는 어떤 정보를 담고 있나요?
- #include는 빌드에서 어떻게 작동하나요?
- Namespace는 왜 사용하나요?
The Function Header
- Funtion Header는 해당 함수를 호출하기 위한 인터페이스를 알려준다.
- Return Type은 Called function이 끝나서 Calling function으로 돌아갈 때, 어떤 정보가 들어오는 지 알려준다.
- argument list 또는 parameter list는 Calling funtion에서 Called function으로의 정보 흐름을 알려준다.
void main()
- main 함수를 선언하는 여러 방법이 있다.
main() // original C style
int main()
int main(void) // very explicit style
void main() // lazy = not compatible all OS
- 여기서 4번째 경우인, void main()을 살펴보자. 처음에 C++을 배울 때, 쓰게 되는 방식이다. 왜냐하면 main이 int를 리턴한다는데, 그 필요성도 공감할 수 없고 void를 해도 잘 돌아가니까 이게 더 예뻐보이기 때문이다.
- 하지만 이런 방식은 C++ standard라고 볼 수 없으므로 지양해야 한다. 애초에 다른 OS에서는 실패할 수 있다.
- 또한 int main(void)는 가장 explicit한 표기방법으로 여기서 void는 argument가 들어오지 않는다는 것을 의미한다.
- int main()이지만 return 0;을 안넣어도 잘 되는데, 이런 것을 implicit return이라고 부르며 이는 c++ standard가 지원하는 기능이다. 단, main에서만 작동한다.
Why main() by Any Other Name Is Not the Same
- 프로그램을 빌드할 때, main 함수가 없으면 컴파일 단계에서 에러가 뜨는 것을 볼 수 있다.
- 왜냐하면 C++ Program이 실행되면, (따로 설정을 해주지않는 한) 무조건 main에서 시작하기 때문이다. 즉, main()이 없으면 완전한 프로그램이 될 수 없다.
- 여기엔 예외가 있는데, DLL(Dynamic Link Library)이 그것이다. DLL은 스탠드얼론 프로그램이 아니라 다른 프로그램에서 쓰이기 위한 코드이므로 main이 없다.
- 특정 프로그래밍 환경에서는 _tmain()과 같은 방식의 main을 작성해야 할 수 있는데, 이 경우엔 main()문이 숨겨져있고 숨겨진 main()문에서 _tmain()을 호출한다.
The C++ Preprocesor and the iostream File
- C++은 (C와 마찬가지로) preprocessor를 가지고 있다.
- preprocessor는 소스 코드를 컴파일 단계 이전에 재구성한다.
- # 로 시작하는 코드가 전처리에 처리되는 directive(지시어)다.
- #include <iostream>은 preprocessor가 iostream의 내용을 여기에다 추가하도록 한다.
- preprocessor의 가장 전형적인 행동이 텍스트를 추가하거나 대체하는 것이다.
Namespaces
- using namespace std; 에서 using이 지시어다.
- Namespace는 큰 프로그램을 만들 때, 기존 코드를 가져다 사용할 텐데 이때에 다양한 vendors의 코드를 컴파일러에게 혼동없이 가져오기 위해 존재한다.
- using namespace std;는 해당 namespace를 생략해서 쓰겠다는 의미다.
Declaration Statements and Variables
int carrots;
- 함수를 정의하는 이 짧은 코드는 2가지 정보를 담는다.
- 메모리 저장소의 타입(ex. int)
- 저장된 메모리 지점의 라벨(ex. carrots)
A New Trick for cout
cout << carrots;
- 간단해 보이는 코드이지만 2단계에 걸친 트릭이 있다.
- cout가 carrots의 현재 숫자 값을 가져온다.
- 가져온 숫자 값을 적절한 문자열로 치환해서 출력한다.
- 여기서 가장 주목해야할 점은 cout이 자기가 쓰는 데이터의 타입을 알 정도로 똑똑하다는 점이다.
'Coding > Unreal, C++' 카테고리의 다른 글
[번역] HTTP 서버: 밑바닥부터 만들어보기 (0) | 2022.05.29 |
---|---|
[C++ Primer Plus] 3. Dealing with Data (0) | 2022.05.27 |
[C++ Primer Plus] 1. Getting Started with C++ (0) | 2022.05.24 |
Replication (0) | 2022.05.23 |
언리얼에서 낮 밤 만들기 (+시간 시스템) (2) | 2022.04.04 |