재바기
JaeTech
재바기
전체 방문자
오늘
어제
  • 분류 전체보기 (77)
    • Computer Vision (2)
    • 선형대수학 (9)
    • Papers (1)
    • 알쓸신잡 (7)
    • 삽질 기록 (0)
    • 3D\Multiview Geometry (10)
      • CS231A (10)
    • Computer Science (46)
      • Algorithm (14)
      • JavaScript (3)
      • C || C++ (5)
      • Git || Github (3)
      • Linux (2)
      • DL || ML (5)
      • Operating System (8)
      • Computer Network (0)
      • Database (1)
      • Effective Python (5)
      • Data Communication (0)
    • 회고 (0)
    • Latex (1)

블로그 메뉴

  • 홈
  • 태그

Github

공지사항

  • 주인장에 대해

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
재바기

JaeTech

헤더가드의 필요성
Computer Science/C || C++

헤더가드의 필요성

2021. 1. 27. 16:58
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
    'Computer Science/C || C++' 카테고리의 다른 글
    • (C++) 참조 변수
    • (C++) 열거형(enumerated types)
    • 전역변수 앞에서의 extern 과 static
    • 첫 발걸음
    재바기
    재바기
    재박이의 테크블로그

    티스토리툴바