-
Header GuradCoding/Tip !! 2018. 10. 2. 11:30
Header Guard 란??
헤더 가드의 이해를 돕기위해 예시로 설명하겠다.
예를 들어 우리가 헤더파일을 생성했을 때 main 함수와 헤더파일 내부에 아래와 같은 함수가 있다고 가정해보자.
main.cpp
1234567891011#include <iostream>#include "test1.h"#include "example123.h"using namespace std;int main(){cout << "hello world" << endl;example_boy();return 0;}ex
test1.h
123int test_boy(int a, int b){return a + b;}example123.h
12345#include "test.h"void example_boy(){test_man(1,2);}위의 코드들을 main.cpp에서 한번에 풀이해보면 아래와 같다.
12345678910111213141516171819202122232425262728#include <iostream>//#include "test.h" -> 해더파일의 코드를 그대로 가져옴//#include "example123.h" -> 헤더파일의 코드를 그대로 가져옴using namespace std;int test_boy(int a, int b) -> 두번이나 중복됨{return a + b;}void example_boy(){test_boy(1,2);}int test_boy(int a, int b) -> 두번이나 중복됨 (example123.h에서 include되었음으로 두번 불리게 된 것임){return a + b;}int main(){cout << "hello world" << endl;example_boy();return 0;}이런식의 코드에서 발생할 수 있는 문제점은 보다시피 include가 여러번 진행되어 에러가 발생하게 된다는 점이다.
이러한 현상이 발생하게 되면 함수 재정의에 대한 에러가 발생하게된다.
-> 이를 막기위해 사용하는 것이 바로 헤더 가드이다!
헤더파일의 아래 윗 부분에
!! Qt의 경우 헤더파일 생성 시 자동으로 위의 코드가 생성된다.123456#ifndef TEST_H(헤더파일이름이다.)#define TEST_H....(작성코드)#endif해주거나
!! 비주얼 스튜디오의 경우 헤더파일 생성 시 자동으로 위의 코드가 생성된다.1#pragma once를 해주게 되면 중복되는 경우 한번만 include만 진행하라는 의미가 되어서 에러가 발생하지 않는다.
위의 #ifdef 와 #endif는 다른 식으로도 사용이 가능하다
123456#define HELLOint main(){#ifdef HELLOcout << " My name is Hello " << endl;#endif}이런식으로 define으로 매크로를 걸었을 때 위의 매크로에 대해 정의 할 수 있다.
만약 define을 하지 않았다면 #ifndef와 #endif를 사용해주면 된다.
12345678910//#define HELLOint main(){#ifdef HELLOcout << " My name is Hello " << endl;#endif#ifndef HELLOcout << "위와 똑같은 것 같지만 자세히보면 이건 if not define 이다" << endl;#endif}반응형'Coding > Tip !!' 카테고리의 다른 글
변수 초기화 방법 (0) 2018.10.03 매크로 함수 (0) 2018.10.03 c++ 동적 배열 사용 vector (0) 2018.09.19 C++ auto 키워드 사용하기 (0) 2018.09.19 c++ 정적 배열사용 array (0) 2018.09.19 댓글