전방선언, 헤더파일 분리,헤더가드, 이름공간, 전처리기

phoenixKim·2021년 3월 8일
0

따빼씨

목록 보기
4/5
  • 메인문을 위로 놓고 함수를 아래로 넣으면 컴파일에러가 발생한다.
    : 컴파일러가 코드를 위에서부터 순차적으로 보기 때문에 main문은 아래에 있는 add의 존재를 모른다.
    -> 위에다가 입출력문 구조만 알 수 있는 선언만 해주면 문제는 해결된다.

  • 파일을 분리하자
    : 재사용 및 정리를 위해서 헤더파일과 cpp파일로 구분하자.

  • <> vs "~.h"
    : <>는 비주얼에서 제공하는 라이브러리 함수이고 ,
    "헤더"는 우리가 직접 만들어준 파일을 뜻한다.

이런식으로 분리 헤더와 cpp로 분리해서 코드를 작성하자.
: 재사용 및 정리를 위해서 , 메인문 위에다가 다 올리면 해당 기능을 찾기가 지저분하다.

  • 컴파일 에러? 링킹 에러?
    : 위에서 만들어준 add.cpp 파일을 프로젝트에서 제외하고 빌드(컴파일)을 해보면 링크 에러가 발생한다.
    이유는 컴파일러가 add.h에서 전방선언으로 확인을 했는데,
    몸체를 못찾아서 링크에러가 발생한 것이다.

헤더가드

#pragma once 는 왜 사용하는 것일까?
do_something을 헤더파일 새로 만들어서 빼자.


-> 문제 없다.

  • #pragma once 주석 처리 + main 문에 add헤더 파일 추가한 후에 빌드하면
    문제가 발생한다.



    ->왜 문제가 발생하냐면 헤더를 포함한 부분을 풀어서 작성하면 이렇게 된다.
    add함수가 동일한 이름으로 두번 사용되었기 때문에 컴파일러가 모호성 제시를 하게 된다!

    -> 헤더에 #pragma once를 작성해보자. 문제가 없다.


    • c언어에서는 헤더파일에 대해서 여러번 동일한 타입/동일한 함수명/동일한 변수명에 대해 여러번 정의를 한다면 컴파일러 오류를 발생할 수 있다!
      #ifndef XXX_H
      #define XXX_H

      #endif

=> 결과 / 알게 된점.
#pragma once
를 이용해 중복되는 함수명에 의한 컴파일러 오류를 방지하는 역할을 한다.

  • 동일한 함수명과는 다르게...동일한 변수명을 사용하면 #pragma once 하더라도 컴파일러가 재정의 했다는 오류를 나타낸다.


namespace

https://blog.naver.com/kimwontae466/222172336065

  • 모호성 발생함.

메크로

: 메크로는 대문자로 명시한다.

1. 하는 일은 코드에서 선언을 해주면 그냥 치환!(교체)를 하는 것이다.

2. 구분할때 사용된다.

  • APPLE 선언 안할때
  • APPLE 선언하면,,,

3. define은 선언된 영역에서만 동작된다.

: define은 영향 범위가 선언되어 있는 부분에서만 적용된다.

  • 포함된 파일에 디파인 선언하면 메인문까지 넘어온다.

  • 메인문에 선언하고 포함된 헤더는 선언하지 않았을 때의 경우

profile
🔥🔥🔥

0개의 댓글

관련 채용 정보