728x90
이전에 c언어를 처음 배울 때 컴파일과 링킹 과정에 대해서는 배운 적이 있었는데 그때는 Visual Studio가 아니라 dev c++ 를 사용했었기에 헤더가드에 대해서 잘 몰랐었다. Visual Studio 에서는 헤더파일을 생성하면 자동으로 이렇게 헤더가드를 붙여준다.
#pragma once는 함수의 중복 사용을 막아준다.
아래의 상황을 예시로 들어보자.
int something(int a, int b)
{
return a + b ;
}
위의 코드 블럭을 working1.h 라고 하고
#include "working1.h"
int imworking()
{
return something(5, 6) + something(3, 5) ;
}
위의 코드 블럭을 working2.h 라고 할 때 만약 소스 파일이
#include <iostream>
#include "working1.h"
#include "working2.h"
using namespace std;
int main()
{
cout << imworking() << endl;
return 0;
}
라면 #include 라는 전처리기에 의해 something 함수가 두 번 중복이 되어 들어가는 것과 같다. 즉,
#include <iostream>
int something(int a, int b)
{
return a + b;
}
int something(int a, int b)
{
return a + b;
}
int imworking()
{
return something(5, 6) + something(3, 5) ;
}
using namespace std;
int main()
{
cout << imworking() << endl;
return 0;
}
와 같은 상황이 되는 것이다.
이 때 헤더파일에 #pragma once가 있다면 중복이 되는 함수를 파악하고 정상적으로 컴파일이 될 수 있도록 해준다.
앞으로 헤더파일이나 다른 여러 소스파일들을 링킹하고 컴파일하는 과정이 프로그래밍 과정이 복잡해질수록 덩달아 복잡해질텐데 잘 정리하고 활용하는 것이 중요하므로 꼭 알고 넘어가야 하는 개념이라 생각했다.
꾸준히 배움에 정진하자.
// 조언과 피드백 언제든지 감사히 받겠습니다.
728x90
'Computer Science > C || C++' 카테고리의 다른 글
(C++) 참조 변수 (1) | 2021.03.02 |
---|---|
(C++) 열거형(enumerated types) (0) | 2021.02.07 |
전역변수 앞에서의 extern 과 static (0) | 2021.02.07 |
첫 발걸음 (0) | 2021.01.25 |