C++ Chapter 1.1 : C++의 기초 1

Date:     Updated:

카테고리:

태그:

C++의 기초

C++은 원래 C에 객체지향 개념을 추가하려는 목적으로 설계했기 때문에 '클래스가 추가된 C'라고도 부른다

C++로 작성된 소스 코드를 프로그램으로 만드는 빌드build작업은 세 단계를 거친다.

  1. 전처리Preprocess는 소스 코드에 담긴 메타 정보를 처리한다.
  2. 컴파일Compile 소스 코드를 머신이 읽을 수 있는 객체 파일로 변환한다.
  3. 링크link 앞에서 변환한 여러 객체 파일을 애플리케이션으로 엮는다.
  • 지시자는 전처리기에 전달할 사항을 표현한다. (# 문자로 시작한다.)

  • 헤더 파일의 주 용도는 소스파일에서 정의할 함수를 선언하는 것이다.
    이러한 함수 선언declaration은 그 함수의 호출 방식, 매개변수의 개수와 타입, 리턴 타입 등을 컴파일러에 알려준다.

  • 함수 정의definition(구현)는 실제로 수행할 동작을 작성한다.

C++20의 모듈이 등장하기 전에는 선언문은 주로 확장자가 .h인 헤더 파일에 작성하고, 정의는 확장자가 .cpp인 소스 파일에 작성했다.
하지만 모듈이 추가되면서 더 이상 선언과 정의를 분리할 필요가 없게 되었다.

main() 함수

  int main(int argc, char* argv[])

argc는 프로그램에 전달할 인수의 개수를 지정, argv는 전달할 인수의 값을 담는다.

I/O 스트림

C++20부터는 스트링 포맷은 std::format()으로 지정하는 방식을 권장한다.

  std::cout << std::format("There are {} ways I love you.", 219) << std::endl;
  • C에서 주로 사용하는 printf(), scanf()는 타입 안정성type safety을 보장하지 않기 때문에 format()과 스트림 라이브러리 사용 지향

네임스페이스

네임스페이스namespace는 코드에서 이름이 서로 충돌하는 문제를 해결하기 위해 나온 개념이다.
네임스페이스를 적용한 foo()를 호출하려면 스코프 지정 연산자scope resolution operator(::)를 이용한다.

  mycode::foo();

using 지시자로 네임스페이스 접두어를 생략할 수도 있다.
컴파일러는 using지시자를 보면 그 뒤에 나오는 문장부터는 using에 지정된 네임스페이스에 속한다고 처리한다.

  using namespace mycode;

  int main()
  {
    foo(); // mycode::foo()와 같다.
  }

중첩 네임스페이스

중첩 네임스페이스nested namespace는 다른 네임스페이스 안에 있는 네임스페이스를 말한다.

  namespace myLibraries::Networking::FTP{
    /* ... */
  }

네임스페이스 앨리어스

네임스페이스 앨리어스namespace alias를 사용하면 네임스페이스의 이름을 다르게 만들거나 또는 더 짧게 만들 수 있다.

  namespace MyFTP = MyLibraries::Networking::FTP;

변수

변수를 선언할 때 반드시 값을 대입(초기화)할 필요는 없다.
하지만 초기화하지 않은 변수는 선언할 시점의 메모리 값을 기반으로 무작위 값이 대입될 수 있는데, 그냥 사용하면 버그가 발생할 수 있다.
이를 위해 C++에서는 변수의 선언과 동시에 초기값을 대입하는 기능을 제공한다.

  int uninitializedInt;
  int initializedInt { 7 }; // 균일초기화 문법
  cout << format("{} is a random value", uninitializedInt) << endl;
  cout << format("{} was assigned an initial value", initializedInt) << endl;

C++은 강타입strongly typed언어다. 그러므로 항상 타입을 구체적으로 지정해야 한다.

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글남기기