• 선언(declaration)은 코드에 사용 되는 '어떤 대상'의 이름과 타입을 컴파일러에게 알려주는 것 
extern int x;                        // 객체 선언
std::size_t numDigits(int number)    // 함수 선언

extern

  • 외부 참조 지정자
  • 다른 모듈에 존재하는 변수를 전역 변수처럼 사용하기 위해 사용함
  • extern을 이용해 외부 모듈 어딘가 변수나 함수가 선언되어 있다고 정보를 알려줌으로써 컴파일시에 식별자를 찾지 못한다는 에러를 일으키지 않음
  • 링크 과정에서 결정
  • https://thrillfighter.tistory.com/397

▶ std::size_t

  • typedef unsigned int size_t
  • C++에서 개수를 셀 때 주로 사용

  • 정의(definition)은 선언에서 빠진 구체적인 세부사항을 컴파일러에 제공하는 것
int x;                             // 객체 정의
std::size_t numDigits(int number)  // 함수 정의
{
    std::size_t digit = 1;
    return digit;
}
  • 객체의 경우는 컴파일러가 그 객체에 대한 메모리를 마련해 놓은 부분이 정의가 됨

  • 초기화(initialization)는 어떤 객체에 최초의 값을 부여하는 과정
    •   사용자 정의 타입으로 생성된 경우, 초기화는 생성자에 의해 이루어짐
Class Widget {
public:
    Widget();                              // 기본 생성자(defulat constructor)
    Widget(const Widget& rhs);             // 복사 생성자(copy constructor)
    Widget& operator=(const Widget& rhs);  // 복사 대입 연산자(copy assignment operator)
}

Widget w1;                                 // 기본 생성자 호출
Widget w2(w1);                             // 복사 생성자 호출
w1= w2;                                    // 복사 대입 연산자 호출
Widge w3 = w2;                             // 복사 생성자 호출
  • lhs - light hand side / rhs - right hand side
bool hasAcceptableQuality(Widget w);

Widget aWidget;
if (hasAcceptableQuality(aWidget))     // 복사 생성자 호출
  • 함수 호출 시 aWidget는 복사 생성자를 통해 w로 복사됨
  • 즉 'pass-by-value'는 '복사 생성자 호출'

  • 명시적 타입 변환(explicit type casting)은 캐스팅할 type 명시
  • 암시적 타입 변환(implicit type casting)은 캐스팅할 type을 컴파일러가 알아서 지정
// Implicit conversion
int i = 75;
long j = i;

// Explicit conversion
double d = 75.25;
int i = (int)d;
class A
{
public:
    explicit B(int x = 0, bool b = true);  // 기본 생성자(default constructor)
};
  • 클래스의 생성자에선 특별한 경우가 아니면 explicit을 통해 의도치 않은 암시적 변환을 막아주는 것이 좋음

  • 표기법

▶ Camel Case

int helloWorld;
  • 첫 글자는 소문자, 두 번째 단어부터는 첫 글자 대문자
  • Java 프로그래밍에서 권장

Pascal Case

int HelloWorld;
  • 첫 글자와 단어의 첫 글자 대문자
  • Python 프로그래밍에서 권장

▶ Snake Case

int hello_world;
  • 단어 사이를 언더바로 연결

▶ Hungarian Notation

bool bInitialized = false;
int nSize = 2;
Widget* pWidget;

  • 16진수(Hexadecimal)
    • 16진법에서는 숫자 0~9까지와 영문 알파벳 문자 A~F까지를 사용함
    • 16진수는 근대 컴퓨터에 1 byte를 8 bit로 정의되어 있기 때문에 2진수를 표현하는 편리한 방법
    • 한 개의 16진수 숫자는 4개의 2진수 숫자를 표시할 수 있음, 두 개의 16진수 숫자는 8bit, 즉 1 byte를 표현할 수 있음
2진수 10진수 16진수
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
1010 10 A
1011 11 B
1100 12 C
1101 13 D
1110 14 E
1111 15 F
10000 16 10
10001 17 11

 


  • Build 과정
    • Build = Compile + Link
    • Run = Build + 실행

▶ Compile

  • Compile은 High-level language(Python, C)인 소스 코드를 Low-level language(기계어, 어셈블리어)로 번역하는 과정
  • 결과로 목적 파일(.obj)이 생성됨

▶ Link

  • 여러 개의 목적 파일을 합쳐서 하나의 실행 가능한 파일로 만드는 과정
  • 결과로 실행 파일(.exe)이 생성됨
  • Static link: 컴파일된 소스 파일들을 연결해서 최종 실행 가능한 파일을 생성
  • Dynamic link: 프로그램 실행 도중, 프로그램 외부에 존재하는 코드(.dll)를 찾아서 연결, 링커가 필요 없음
  • https://jhnyang.tistory.com/42
  • https://jhnyang.tistory.com/40

 

+ Recent posts