IT 프로그래밍/C++

[따배시 1.12~14] 헤더가드, 네임스페이스, 전처리기

기술1 2024. 3. 5. 21:21
반응형
#ifndef MY_ADD
#define MY_ADD

int add(int a, int b)
{
	return a + b;
}

#endif

만약 MY_ADD가 정의되어 있다면 다시 정의하지 마라 

 

이런 의미입니다. 이런 헤더가드가 필요한 이유는 중복이 되지 않게 방지하도록 하기 위함입니다. 

 

#pragma once

헤더 파일을 실행하면 항상 맨 처음에 이 #pragma once라는 것이 있는데 이것이 왜 있는지 처음에 궁금하신 분들이 많으실겁니다. 앞서 말해드린 ifndef define endif 처럼 중복이 되지 않도록 방지해주는 역할을 하는 것이 바로 이 #pragma once입니다. 

 

헤더파일은 웬만해선 반드시 해당 #pragma once 가 들어가야 합니다. 

 

네임스페이스 사용법


#include <iostream>

namespace MySpace1
{
	int doSomething(int a, int b)
	{
		return a + b;
	}
}

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

using namespace std;

int main()
{
	cout << MySpace1::doSomething(3, 4) << endl;
	cout << doSomething(3, 4) << endl;

	return 0;
}

그냥 doSomething을 할 경우 2번째 값인 12가 나오게 됩니다. 따라서 MySpace::doSomething을 해주어야지 namespace안에 있는 a + b값이 나오게 되는데요. 

 

전처리기


 

#include <iostream>

using namespace std;

#define MY_NUMBER 9

int main()
{
	cout << MY_NUMBER << endl;

	return 0;
}

매크로를 하면 MY_NUMBER 9 이면 MY_NUMBER을 입력하면 9를 출력해줍니다. 9는 유동적으로 변경할 수 있습니다. 9 대신에 "Hello, World!"를 넣어줘도 됩니다.

 

매크로 (#define)은 누굴 만나면 다음 꺼로 교체해준다고 보면 됩니다. 

#define MAX(a, b) (a>b) ? a:b 이런 식으로 이 것중에 큰거를 출력하는 매크로를 만들어줄 수도 있습니다. 

#include <iostream>

using namespace std;

#define MAX(a, b) ((a>b) ? a:b)

int main()
{
	cout << MAX(1,2) << endl;

	return 0;
}

물론 요즘같은 경우 매크로를 잘 쓰지는 않는 코딩 시대일수도 있습니다. 하지만 기본적으로 매크로의 사용법을 알아두셔야 합니다. 쓸 수 있는 기능이 있기 때문에 기본적인 것은 알아주셔야 합니다. 

 

참고로  min, max, minmax는 algorithm 라이브러리의 구현되어 있는 함수입니다.

 

 

반응형