본문 바로가기
기계공학부 시절의 기록/C++일기

1.12 ~ 1.13 헤더가드가 필요한 이유(LINK ERROR), Namespace

by juhyeonglee 2021. 5. 3.
728x90
반응형

 

제가 빠르게 복기하기 좋게 정리한 글입니다. 파일을 추가하는 세세한 방법과 과정은 마지막에 첨부된 영상으로 확인하시면 좋을 것 같습니다 :) 강의목차의 번호와 같은  목차번호를 사용하고 있으니 참고하세요!

 


 

 

 

1.12 헤더가드가 필요한 이유

앞서 함수의 정의를 cpp파일에, 함수의 선언을 header파일에 쪼개어 정리하는 방법을 배웠다.

그런데 하다보면 바쁜 상황에서 함수안에 함수가 있게되고, main파일에 중복으로 함수를 불러오는 경우가 생긴다.

이 때, 함수가 중복이되면 빌드에러가 발생하는데 이를 방지하기 위한 것이 헤더가드이다.

 

#pragma once : main파일에서 중복선언을 방지하는 전처리기이다.

 

1.13 Namespace 활용

#에러코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int dosomething(int a, int b)
{
    return a + b;
}
 
int dosomething(int a, int b)
{
    return a * b;
}
 
 
int main()
{
    std::cout << dosomething(35<< std::endl;
    return 0;
}
cs

위 코드를 실행하면 같은 이름, 다른 내용의 함수가 있어 에러가 난다. 'already has a body'

 

 

코드를 작성하다가보면 함수명을 지켜야할 때가 있는데 이럴때, 각함수를 다른 이름공간으로 나누어 놓으면 된다.

 

 

# 해결

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
namespace myfunc1 
{
    int dosomething(int a, int b)
    {
        return a + b;
    }
}
 
 
namespace myfunc2 
{
    int dosomething(int a, int b)
    {
        return a * b;
    }
 
}
 
int main()
{
    std::cout << myfunc1::dosomething(35<< std::endl;
    std::cout << myfunc2::dosomething(35<< std::endl;
    return 0;
}
cs

이처럼 직접 namespace를 만들고 그 안에 함수를 분류해 넣어놓을 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
namespace myfunc1 
{
    int dosomething(int a, int b)
    {
        return a + b;
    }
}
 
 
namespace myfunc2 
{
    namespace important
    {
        int dosomething(int a, int b)
        {
            return a * a + b * b;
        }
    }
 
    int dosomething(int a, int b)
    {
        return a * b;
    }
 
}
 
int main()
{
    std::cout << myfunc1::dosomething(35<< std::endl;
    std::cout << myfunc2::dosomething(35<< std::endl;
    std::cout << myfunc2::important::dosomething(35<< std::endl;
    return 0;
}
cs

이름공간 안에 또다른 이름공간을 만들 수도 있다.

 

 

 


출처)

홍정모의 따배씨++

www.youtube.com/playlist?list=PLNfg4W25Tapw5Yx4yuExHNybBIUk68aNz

 

[따배씨++] 따라하며 배우는 C++ | 모던 c++, c++ 강의, c++ 강좌, c++ 언어, 기초 프로그래밍, c++ 프로그

[홍정모의 따라하며 배우는 C++ (모던 C++)] https://www.inflearn.com/course/following-c-plus?inst=aa88a07c [홍정모의 따라하며 배우는 C언어] https://www.inflearn.com/course/following-c?i...

www.youtube.com

 

 

좋은 강의에 너무나 감사하다.

이전에는 그냥 무작정 따라썼던 코드들을 한줄한줄 이해하며 공부할 수 있다.

언젠가 어느 언어든 자신감이 있는 코드마스터가 될 것이다.

 

데이터가 인간을 대신해 일을 하게하고

데이터를 제어해 로봇을 제어하고 싶다.

 

 

 

 

728x90
반응형

댓글