https://stackoverflow.com/questions/58747149/typedef-uint8-t-t-bool-is-it-still-worth-it
스택오버플로우에도 나와있고 직접 직면한 문제에 대해서 얘기해 보자.
문제 겸 궁금증은 <stdbool.h>이 선언되어 있음에도 불구하고 typedef uint8_t BOOL를 사용하는 이유이다.
위 질문의 핵심은, C99가 나온 지금, typedef uint8_t BOOL과 같은 정의가 여전히 유용한가?이다. 이다. C99 이후로는 _Bool 타입과 stdbool.h 헤더 파일을 통해 표준 bool, true, false를 사용할 수 있기 때문에, 이런 사용자 정의 타입이 중복적이고 불필요하지 않은지 궁금해하는 것이다.
어떠한 선택이 더 나은 선택일까?
질문에 대한 답은 상황에 따라 다를 수 있다. 전반적으로 C99의 표준 부울 타입(_Bool 및 stdbool.h)을 사용하는 것이 가독성과 일관성 측면에서 더 나은 방법이라고 할 수 있다. 하지만 C90를 사용하거나 C99이지만 레거시 코드의 경우 _Bool로 별칭을 처리하는 것이 유용할 수 있다.
임베디드 시스템, 안전성이 중요한 자동차 산업에서 소프트웨어를 개발할 때에는 코딩 표준과 가이드라인을 준수해야 한다. 기존에 사용하던 방식인 typedef uint8_t BOOL은 변수의 크기를 명확하게 하고, 메모리 제어를 쉽게 할 수 있다는 장점이 있어 여전히 많이 사용되고 있다.
- 메모리 제어 : _Bool 타입은 최소 1비트 이상으로 정의되지만, 컴파일러에 따라 메모리 배치가 달라질 수 있다. 반면 uint8_t는 항상 8비트 크기를 가지므로 메모리 사용을 명확하게 예측하고 제어할 수 있다.
그럼 C90을 쓰던 사람들은 어떻게 bool을 표현했을까?
C언어는 C89/C90, C99, C11 등으로 다양한 표준이 존재한다.
C90에서 C99로 넘어오며 stdbool.h 이라는 헤더 파일이 추가되었다.
int isTrue = 1; // 참을 의미
int isFalse = 0; // 거짓을 의미
-------------------------
typedef int BOOL;
#define TRUE 1
#define FALSE 0
-------------------------
#define TRUE 1
#define FALSE 0
대부분 int형으로 구현하였으며 사람에 따라 사용자 정의를 통해 사용하거나 매크로 등을 통해 정의하였다.
C는 그렇다면 C++은?
C와 다르게 C++에서는 기본 bool타입을 사용하는 것이 당연히 권장되며, typedef을 통한 부울 타입 정의는 피하는 것이 좋다.
'C언어' 카테고리의 다른 글
GCC(GNU Compiler Collection)란? (0) | 2024.10.18 |
---|---|
[C언어] 다중 평가 문제 (0) | 2024.10.17 |
[C언어] 댕글링 포인터(Dangling Pointer)란? (0) | 2024.10.15 |
[C언어] main문이란? (0) | 2024.10.14 |
[C언어] static 키워드란? (0) | 2024.10.11 |