따배씨++ (10. Declaration, Definition)

김동우·2021년 2월 24일
0

안녕하십니까. 김동우입니다.

이번 글에서는 선언과 정리(Declaration & Definition)에 대해 얘기해볼까 합니다.

코드부터 보겠습니다.

#include <iostream>

using namespace std;

int add(int a, int b); // forward declaration, 전방선언
int multiply(int a, int b);
int subtract(int a, int b);

/* 
이는 C++의 코드 실행 순서와 관련된 개념이다.
위에서 아래로 차례대로 컴파일러는 코드를 읽고, 실행파일을 만드는데
함수의 콜이 이루어진 부분보다 아래에 함수가 정의된 경우
compile error가 발생한다.
전방선언은 이러한 error를 회피하기 위해 간단한 입출력 data type을 상단에
명시하는 것으로, 이 경우 컴파일러가 경고나 에러를 발생시키지 않는다.
즉, 이미 함수에 대한 인식을 시켜주는 개념이라고 볼 수 있다.
알고 맞으면 덜 아픈 것처럼 컴파일러에게 미리 말해주는 방법도 있다.
*/ 


int main()
{
	cout << add(1, 2) << endl;
	// add에 커서를 올리고 우클릭 + peek definition을 활용해보세요!
	// 함수에 대한 설명이 나올겁니다.

	return 0;

}

int add(int x, int y) // definition, 정의
{ 
	return x + y; 
}

int multiply(int a, int b) 
{
	return a * b;
}

int subtract(int a, int b)
{
	return a - b;
}

이런, 처음보는 개념이 나왔네요. 전방선언?

forward declaration은 위 주석에 적힌 것을 읽어보시는 것을 추천드리겠습니다.

이를 선언하는 것은 C++의 코드 실행 순서가 위에서 아래이기 때문인데, 함수콜의 위치보다 함수가 아래에 정의될 경우 컴파일 에러가 발생하는 것을 막기 위함입니다.

JS에서는 이를 막기 위해 호이스팅이라는 개념을 도입했었으니, 관심이 있으시다면 한 번 읽어보시는 것을 추천드립니다.

호이스팅은 생각보다 흥미롭고, 괜찮은 방식이거든요. 다만 호이스팅을 잘못 활용하는 것 때문에 발생하는 에러들도 꽤 재밌는 것이 많으니, 장단점에 대해 생각해봅시다.

자, 그럼 이번 글은 여기까지 적도록 하겠습니다.

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN