== 型 == TECS CDL の言語仕様として定義する型には、TECS CDL の文法に予め組み込まれた組込み型と、typedef による型定義によって後から付け加えて使用する typedef 型があります。 ||= 型の分類 =||= 型の小分類 =||= 型名 =||= 値の範囲 =||= 備考 =|| |------------- {{{#!td rowspan=17 組込み型 }}} {{{#!td rowspan=11 値の範囲が明瞭な型 }}} || int8_t || -128 .. 127 || 8bit 有符号整数 || |------------- || int16_t || -32768 .. 32767 || 16bit 有符号整数 || |------------- || int32_t || -2147483648 .. 2147483647 || 32bit 有符号整数 || |------------- || int64_t || -9223372036854775808 .. 9223372036854775807 || 64bit 有符号整数 || |------------- || uint8_t || 0 .. 255 || 8bit 無符号整数 || |------------- || uint16_t || 0 .. 65535 || 16bit 無符号整数 || |------------- || uint32_t || 0 .. 4294967295 || 32bit 無符号整数 || |------------- || uint64_t || 0 .. 18446744073709551615 || 64bit 無符号整数 || |------------- || float32_t || ±3.4028235E38~±1.4E-45 || 32bit 単精度浮動小数 (IEEE754) || |------------- || double64_t || ±1.7976931348623157E308~±4.9E-324 || 64bit 倍精度浮動小数 (IEEE754) || |------------- || char_t || -128 .. 255 || 値としては 8bit 有符号、無符号のどちらも受けつける || |------------- {{{#!td rowspan=6 値の範囲が明瞭な型[[BR]] (C言語由来の型)[[BR]] 非推奨 }}} || char || 実装依存 || |------------- || int || 実装依存 || |------------- || short || 実装依存 || |------------- || long || 実装依存 || |------------- || float || 実装依存 || |------------- || double || 実装依存 || |------------- {{{#!td rowspan=6 typedef 型 }}} {{{#!td rowspan=4 t_stddef.h で定義される型 }}} || int_t || 実装依存 || |------------- || uint_t || 実装依存 || |------------- || long_t || 実装依存 || |------------- || ulong_t || 実装依存 || |------------- {{{#!td rowspan=2 tecs.h で定義される型 }}} || short_t || 実装依存 || |------------- || ushort_t || 実装依存 || |------------- == 組込み型 == 組込み型は、 TECS CDL の文法の一部として予め組み込まれた型です。 C 言語に由来しない型でも TECS CDL 記述内では typedef することなく使用できます。 しかし、C 言語のソースをコンパイルする段階では、組込み型を typedef するヘッダファイルがインクルードされている必要があります。 これは、ヘッダファイル tecs.h または t_stddef.h に記述されています。通常 import_C により、このいずれかを取り込みます。 C 言語に由来する型とは、char, short, int, long, float, double です。 このうち char, short, int, long は signed, unsigned で修飾することができます。 しかし TECS CDL で、すべての C 言語由来の型が扱えるわけではありません。 short int, long signed, unsigned など、C 言語では有効な型であっても、TECS CDL 有効な型とは限りません。 【補足説明】intN_t が組み込み型である理由は、最大値、最小値が明瞭になり、値の範囲をチェックできるためである。 intN_t を int や short などの型の typedef 型としてしまうと、最大値、最小値を tecsgen の段階では確定することができず、チェックできなくなってしまう。 == typedef 型 == ここに挙げた typedef 型は、TECS 仕様の一部とみなされる型です。 typedef 型は typedef により定義される型であり、ヘッダファイルを取り込んで typedef による型定義をしない限り使用することができません。 == tecs.h と t_stddef.h == 組込み型の C 言語での定義および、typedef 型を TECS CDL による記述で使用するために必要となる型の定義は、tecs.h に含まれます。 tecs.h は t_stddef.h をインクルードしています。 t_stddef.h は TOPPERS 新世代カーネル統合仕様に基づいて定義されるものであり、TECS で定義する型以外の型定義を含みます。 tecs.h では t_stddef.h で定義する型に加えて char_t, uchar_t, schar_t, short_t, ushort_t, int128_t, uint128_t が定義されます。 通常 TECS CDL による記述では tecs.h を直接的または間接的に import_C で取り込む必要があります。 ここで間接的にとは、import_C で取り込まれるヘッダファイルからインクルードされることであります。 【補足説明】typedef 型を TECS CDL による記述で用いないのであれば、必ずしも tecs.h を import_C で取り込む必要はないが、生成された C 言語のプログラムをコンパイルする際には、何らかの手段により tecs.h をインクルードする必要がある。 ターゲットがTOPPERS 新世代カーネル統合仕様に準拠しない環境である場合 tecs.h や t_stddef.h 以外で C 言語に由来しない組込み型や typedef 型の定義をし、それらを import_C により取り込んでもよい。 ----- [TECS リファレンスマニュアル [wiki: トップページ]]・ [TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]]