0
例えば、私の実装の1バイトとしてcharを定義した場合、それはちょうどGCCで正確な幅の整数型はどのように実装されていますか?
typedef int8_t char;
stdint.hでは、または実際にメモリ操作が行われていますか?
例えば、私の実装の1バイトとしてcharを定義した場合、それはちょうどGCCで正確な幅の整数型はどのように実装されていますか?
typedef int8_t char;
stdint.hでは、または実際にメモリ操作が行われていますか?
システムstdint.hは、アーキテクチャについての仮定を行うことができ、shortまたはintのサイズのようなものを知ることができます。 macOSの/usr/include/stdint.h
は非常に読みやすいです。関連するビットがあります。
/* 7.18.1.1 Exact-width integer types */
#include <sys/_types/_int8_t.h>
#include <sys/_types/_int16_t.h>
#include <sys/_types/_int32_t.h>
#include <sys/_types/_int64_t.h>
#include <_types/_uint8_t.h>
#include <_types/_uint16_t.h>
#include <_types/_uint32_t.h>
#include <_types/_uint64_t.h>
/* 7.18.1.2 Minimum-width integer types */
typedef int8_t int_least8_t;
typedef int16_t int_least16_t;
typedef int32_t int_least32_t;
typedef int64_t int_least64_t;
typedef uint8_t uint_least8_t;
typedef uint16_t uint_least16_t;
typedef uint32_t uint_least32_t;
typedef uint64_t uint_least64_t;
個々のヘッダーファイルを掘り下げて、typedefを見ることができます。それぞれを見てみると、とてもシンプルです。
およびuint*_t
は、その符号なしバージョンです。 GCCは、Mac上のシステムコンパイラではないので
、それはそれは建築についての仮定を行うことができない、打ち鳴らすですので、既存のstdint.hを使用しています。ここにgccのstdint.hがあります。システムstdint.hに独自のヘッダーを加えて、それ自身の非標準のものを追加します。
$ cat /opt/local/lib/gcc6/gcc/x86_64-apple-darwin16/6.3.0/include/stdint.h
#ifndef _GCC_WRAP_STDINT_H
#if __STDC_HOSTED__
# if defined __cplusplus && __cplusplus >= 201103L
# undef __STDC_LIMIT_MACROS
# define __STDC_LIMIT_MACROS
# undef __STDC_CONSTANT_MACROS
# define __STDC_CONSTANT_MACROS
# endif
# include_next <stdint.h>
#else
# include "stdint-gcc.h"
#endif
#define _GCC_WRAP_STDINT_H
#endif
正確な幅の整数型は、システムがサポートしていない場合は存在しないことがあります。代わりに* int_leastN_t *バージョンを使用してください。実装では、条件付きコンパイルを使用して、サポートされている各システムの各typedefを決める可能性が最も高いと言われています。 – DeiDei
それをサポートしていないものは何ですか?それはosかコンパイラかチップか?私の個人的なプロジェクトは、C標準ライブラリ全体を再コーディングすることです。選択するのは私の判断です。 –
標準では、それらがtypedefであることを要求しています(存在する場合はそれがあります) –