[모던C++입문] 1.9 소프트웨어 프로젝트 구축

짜장범벅·2022년 6월 4일
0

모던CPP입문

목록 보기
3/11

1.9 소프트웨어 프로젝트 구축

대규모 프로젝트에서는 이름 충돌이 자주 난다. 주로 namespace를 이용해 해결한다.

1.9.1 주석

주석은 명백하지 않은 부분을 이해하기 쉬운 말로 기술한다. 또한 난독화된 코드를 설명하는 Pseudo Code 역할을 한다.

1.9.2 전처리기 지시문

매크로는 제한하는 것이 좋다.

1.9.2.1 매크로

매크로는 타입 개념 없이 무분별하게 텍스트를 대체하기 때문에 부작용을 일으킬 수 있다. 대부분의 매크로는 다른 기법(상수, 템플릿, 인라인 함수)으로 대체할 수 있다. 하지만 어쩔 수 없이 사용해야 한다면 매우 긴 보기 좋지 않은 이름을 대문자로 사용해야 한다.

1.9.2.2 포함(include)

C언어는 간단하기 유지하기 위해 I/O 등과 같은 많은 기능을 핵심 언어에서 제외했고 라이브러리를 통해 구현했다.

자주 사용하는 헤더 파일이 하나의 번역 단위(project를 말하는 듯...)에 여러 번 포함될 수 있다. 이를 피하기 위해 포함 방지(Include Guard)는 첫 번째로 포함할 때만 수행하도록 한다. 일반적으로 아래와 같이 사용한다.

#ifndef HERBERTS_MATH_FUNCTION_INCLUDE
#define HERBERTS_MATH_FUNCTION_INCLUDE

...

#endif /* HERBERTS_MATH_FUNCTION_INCLUDE */

단, 조금 더 편리한 방법으로 아래처럼 구현할 수 있다.

#progma once

...

progma once의 경우 C++ 표준은 아니지만 주요 컴파일러들이 모두 지원한다. (예전에는 VS만 지원한는 줄 알았는데 g++ 8이상 부터인가에도 지원한다더라..)

1.9.2.3 조건부 컴파일

전처리기 지시문이 필요한 기능은 조건부 컴파일을 제어하는 경우다. 예를 들어 특정 라이브러리가 MS VC에서만 지원하는 경우가 있다고 하자. 이렇게 플랫폼에 의존하는 구현을 위한 가장한 방법은 다른 컴파일러에 대한 대체 코드 조각을 제공하는 방법이다.

#ifdef _MSC_VER
... //code for MS VC
#else
... //code for Linux or Unix or ...
#endif
profile
큰일날 사람

0개의 댓글