C++/Syntax 2021. 3. 9. 19:20

namespace

  • 함수, 객체 등의 이름 충돌 방지

  • namespace 내부에 또 다른 namespace를 넣을 수 있다.

'C++ > Syntax' 카테고리의 다른 글

C++ 소수점 (Decimal Point)  (0) 2021.03.09
C++ 자료형 (Data Type)  (0) 2021.03.09
C++ 전처리기 (Preprocessor)  (0) 2021.03.09
C++ 헤더가드 (Header Guard)  (0) 2021.03.09
C++ 초기화 (Initialization)  (0) 2021.03.09
C++/Syntax 2021. 3. 9. 19:19

헤더 가드 (Header Guard)

#include guard

  • internal include guard : 헤더파일 내부에서 매크로를 검사하는 것

    header.h

    #ifndef HEADER_H
    # define HEADER_H
    ...
    #endif
  • external include guard : 헤더파일을 외부에서 include할 때 매크로를 검사하는 것

    main.cpp

    #ifndef HEADER_H
    #include "header.h"
    #endif
  • 장점

    • 컴파일러에 의존하지 않는다.
  • 단점

    • 한 번 읽은 헤더 파일도 내용을 읽어야 해서 컴파일 속도가 느릴 수 있다.

      • 귀찮지만 external include guard를 적용하면 해결 가능하다.
    • 매크로 이름이 충돌할 가능성 존재한다.

      • 대규모 프로젝트에선 명명 규칙을 정해서 사용한다.

        ex) _MODULE_HEADER_H_

  • gcc에서는 이를 #pragma once와 비슷하게 처리하는 기능을 추가했다고 한다. (Include Guard Optimization)

  • 참고


#pragma once

#pragma once
  • 장점

    • 한 번 읽은 헤더 파일은 따로 기억하여 읽지 않는다. -> 빠르다.

    • MS, gcc 등에서 예전부터 지원했다.

  • 단점

    • 전처리기에서 버그가 있거나, 파일 시스템 상에서 동일성을 파악하지 못하면(소프트 링크 등) 중복으로 포함할 가능성 존재한다.

    • 컴파일러마다 지원 여부가 다르기 때문에 일단은 비표준이다.

'C++ > Syntax' 카테고리의 다른 글

C++ 소수점 (Decimal Point)  (0) 2021.03.09
C++ 자료형 (Data Type)  (0) 2021.03.09
C++ 전처리기 (Preprocessor)  (0) 2021.03.09
C++ Namespace  (0) 2021.03.09
C++ 초기화 (Initialization)  (0) 2021.03.09
C++/Syntax 2021. 3. 9. 19:18

초기화 (Initialization)

  • C에서는 솔직히 별로 의미가 없었다고 생각하는데, C++에서는 생성자의 개념 때문에 중요한 것 같다.

  • 메모리를 할당함과 동시에 값을 부여한다.


할당

  • 생성자에서 값을 대입하는 방식이다.

    int num;
    num = 42;

초기화

  • 초기화 리스트로 지정

  • Copy Initialization

    • 등호를 통해 초기화하는 방식이다.
    int width = 5;
  • Direct Initialization

    • 소괄호로 값을 감싸서 초기화하는 방식이다.
    int width(5);
  • Uniform Initialization

    • List Initialization, Brace Initialization

    • C++11

    • 위의 두 가지(Copy Initialization, Direct Initialization)보다 더 엄격하다.

      ex) int에 float을 저장하면 에러가 발생한다. (위의 두 가지는 warning이라 실행은 된다.)

      int width{ 5 };     // direct uniform initialization(preferred)
      int width = { 5 };  // copy uniform initialization
  • MS의 Visual Studio의 경우 Debug, Release 모드가 있다.

    • Release 모드의 경우 자료형에 따라 기본적인 초기화를 해준다.

    • Debug 모드에서 초기화를 하지 않으면 MS에서 정한 magic debug value가 들어간다.

      ex. 0xcccccccc : 초기화 하지 않은 스택 영역에 들어가는 값

    • Magic debug value

  • gcc의 경우 O2, O3 등의 옵션으로 최적화를 해서 릴리즈를 하는 것 같은데, 초기화까지 해주는지는 모르겠다.

'C++ > Syntax' 카테고리의 다른 글

C++ 소수점 (Decimal Point)  (0) 2021.03.09
C++ 자료형 (Data Type)  (0) 2021.03.09
C++ 전처리기 (Preprocessor)  (0) 2021.03.09
C++ Namespace  (0) 2021.03.09
C++ 헤더가드 (Header Guard)  (0) 2021.03.09

'C++/Syntax'에 해당되는 글 33건