ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [따배씨++] 변수, 상수, 전처리기 등 정리
    Study/C & C++ 2022. 9. 16. 18:35

    C++ 기초를 다시 한 번 빠르게 복습할 겸 [홍정모의 따라하며 배우는 C++] 를 다시 보기로 했다.

    초반 내용 정리.

     

    01. 변수

    • 변수
      • 객체를 사용하기 위한 메모리의 주소값을 표현한 것... (일반적인 "변할 수 있는 수" 도 말이 된다. CS적으로 생각해보면 메모리의 주소 표현이 좀 더 맞는 말인듯)
    • L-Valule와 R-Value
      • 나중에 더 심도있게 글을 쓸 예정이지만, L-Value는 변수나 상수 형태로 프로그래머가 메모리에 접근할 수 있는 값, R-Value는 일반적인 방식으로 프로그래머가 접근할 수 없는 값이다. (keyword : 리터럴)
      • int x = 4; x = x + 2 에서, x+2는 L-Value일까 R-Value일까?
        • x+2에서 x는 컴파일러에서 4라는 값으로 대체해주고, 연산을 통해 R-Value로 생성된다. 즉, R-Value임
    • 변수 초기화 방법
      • 복사 초기화 : int x = 3; 과 같은 형태
      • Direct Initialization : int x(3);
      • Uniform Initialization : int x{3};
        • 가장 엄격하게 컴파일러가 검사해준다. int x{3.14}같은 건 컴파일러 단에서 오류남
        • 권장된다고 한다.
    • Initialization과 Assignment는 다르다.

    02. 헤더 가드

    • Visual Studio에서는 헤더 파일에 #pragma once가 붙는다.
    • # ~~~ 형태는 빌드 전에 처리되는 전처리기로, #pragma once는 같은 헤더 파일을 두 번 include하지 않도록 해준다.

    03. namespace

    • namespace는 식별자가 중복되어 충돌하지 않도록 하게 위함이다.
    • 다른 namespace에 같은 이름의 변수, 상수, 함수가 정의될 수 있다.
    • using namespace를 전역에 사용하는 것을 피할 것.

    04. 전처리기

    • 전처리 과정에서 처리되는 구문으로, 멀티 플랫폼 개발 시 자주 보게 될것 ( #define ANDROID ~~~ 이런 식이 아닐까?, #ifdef __DEBUG를 가장 많이 본듯...)

    05. Fixed-Width Integer

    • Integer의 Byte가 환경마다 다를 수 있을 때, 예상치 못한 오류를 방지하기 위해 씀
    • int_fast_t, int_least64_t 등이 있다.
    • 그냥 이런게 있다고 알아두면 좋을듯

    06. 부동소수점 연산이 정확하지 않은 이유

    • 지수부, 가수부로 표현되는 방식이 정확한 10진수를 표현할 수 없기 때문
    • 1/2^n 으로 정확하게 표현되는 경우 아니면 오차가 쌓일 수 밖에 없음
    • == 연산 피하자
    • nan, inf, -inf 등이 나올 수 있다. (0으로 나누는 경우, 0/0 연산 등 하는 경우)
    • nan 여부 판단 함수 std::isnan()

    07. '\n'과 std::endl의 차이

    • '\n'은 그냥 줄바꿈 문자이고, std::endl은 버퍼에 있는 것들을 모두 비우고 출력한 이후, 줄바꿈 하라는 의미가 담긴 객체
    • std::flush는 버퍼에 있는 것들을 모두 비워 출력하고, 줄바꿈하지 않는다.
    • 입출력과 버퍼에 관한 내용 공부 더 필요할듯

    08. Literal Constants, Symbolic Constants

    • 리터럴 상수는 R-Value로, float pi = 3.145 같은 구문에서 3.145를 말한다.
      • 컴퓨터 메모리 구조에서, 3.145같은 리터럴들은 프로그램이 메모리에 로드되면서 Code영역에 위치하는 것으로 알고 있음
    • 심볼릭 상수는 const int A = 123;과 같이 변수 앞에 const를 붙인 형태의 상수이다.
      • 심볼릭 상수는 값을 반드시 초기화해야 한다.
      • 컴파일 타임에 값이 결정되는 상수와 런타임에 값이 결정되는 상수가 있다.
      • 컴파일 타임 상수임을 명시하기 위한 C++11추가 문법으로 constexpr이 있다.
      • 상수들은 하나의 namespace로 묶고 헤더에 넣어서 사용하는 경우가 많음

    댓글

GameDev.