왜 모두가 표준 C 유형보다 typedef합니까? 는 SINT32등을 정의 UINT16합니다. 그리고 이러한 것들의 조합을

당신이 사용하려는 경우 Qt는을 , 당신은 포용해야한다 quint8, quint16등등합니다.

당신이 사용하려는 경우 입심을 , 당신은 환영에있다 guint8, guint16등등합니다.

리눅스u32, s16등등합니다.

uC / OSSINT32등을 정의 UINT16합니다.

그리고 이러한 것들의 조합을 사용해야한다면 문제에 대비하는 것이 좋습니다. 에 있기 때문에 컴퓨터가 u32될 것이다 typedef이상 거라고 longquint32typedef이상 거라고 int및 컴파일러는 불평 할 것이다 .

있는 경우 왜 모두가 이것을 <stdint.h>합니까? 이것이 도서관의 전통인가?



답변

stdint.h이 라이브러리가 개발 될 당시에는 존재하지 않았습니다. 그래서 각 라이브러리는 자체 typedefs를 만들었습니다 .


답변

이전 라이브러리의 경우 문제의 헤더 ( stdint.h)가 존재하지 않았기 때문에 필요 합니다.

그러나 여전히 문제가 있습니다. 이러한 유형 ( uint64_t및 기타)은 표준 의 선택적 기능 입니다. 따라서 준수하는 구현은 함께 제공되지 않을 수 있으며 따라서 오늘날에도 라이브러리가 여전히 포함하도록 강제합니다.


답변

stdint.h 1999 년부터 표준화되었습니다. 많은 애플리케이션이 기본 머신 아키텍처로부터 부분적 독립성을 유지하기 위해 유형을 정의 (효과적으로 별칭) 할 가능성이 높습니다.

개발자는 애플리케이션에 사용되는 유형이 언어 표준 또는 컴파일러 구현과 일치하지 않을 수있는 동작에 대한 프로젝트 별 가정과 일치한다는 확신을줍니다.

이 관행은 객체 지향 Façade 디자인 패턴에 반영되며 가져온 모든 라이브러리에 대해 항상 래퍼 클래스를 작성하는 개발자에 의해 많은 악용을받습니다.

컴파일러가 훨씬 덜 표준이고 머신 아키텍처가 16 비트, 18 비트 에서 36 비트 워드 길이 메인 프레임 까지 다양 할 수있는 경우 이것은 훨씬 더 많은 고려 사항이었습니다. 32 비트 ARM 임베디드 시스템으로 수렴하는 세계에서는이 관행이 훨씬 덜 중요합니다. 홀수 메모리 맵 이있는 저가형 마이크로 컨트롤러의 경우 여전히 우려 사항입니다 .


답변

그래서 당신은 typedef char to int.

한 “코딩 공포”는 한 회사 헤더에 프로그래머가 부울 값을 원하고 char이 작업에 대한 논리적 네이티브 유형이라는 지점이 있다고 언급하여 typedef bool char. 그런 다음 나중에 누군가가 정수가 가장 논리적 인 선택임을 발견하고 typedef bool int. 유니 코드 이전의 결과는 사실상typedef char int .

미래 지향적이고 미래 지향적 인 호환성이 상당히 많다고 생각합니다.


답변