| 1 | == 型 == |
| 2 | |
| 3 | TECS CDL の言語仕様として定義する型には、TECS CDL の文法に予め組み込まれた組込み型と、typedef による型定義によって後から付け加えて使用する typedef 型があります。 |
| 4 | |
| 5 | ||= 型の分類 =||= 型の小分類 =||= 型名 =||= 値の範囲 =||= 備考 =|| |
| 6 | |------------- |
| 7 | {{{#!td rowspan=17 |
| 8 | 組込み型 |
| 9 | }}} |
| 10 | {{{#!td rowspan=11 |
| 11 | 値の範囲が明瞭な型 |
| 12 | }}} |
| 13 | || int8_t || -128 .. 127 || 8bit 有符号整数 || |
| 14 | |------------- |
| 15 | || int16_t || -32768 .. 32767 || 16bit 有符号整数 || |
| 16 | |------------- |
| 17 | || int32_t || -2147483648 .. 2147483647 || 32bit 有符号整数 || |
| 18 | |------------- |
| 19 | || int64_t || -9223372036854775808 .. 9223372036854775807 || 64bit 有符号整数 || |
| 20 | |------------- |
| 21 | || uint8_t || 0 .. 255 || 8bit 無符号整数 || |
| 22 | |------------- |
| 23 | || uint16_t || 0 .. 65535 || 16bit 無符号整数 || |
| 24 | |------------- |
| 25 | || uint32_t || 0 .. 4294967295 || 32bit 無符号整数 || |
| 26 | |------------- |
| 27 | || uint64_t || 0 .. 18446744073709551615 || 64bit 無符号整数 || |
| 28 | |------------- |
| 29 | || float32_t || ±3.4028235E38~±1.4E-45 || 32bit 単精度浮動小数 (IEEE754) || |
| 30 | |------------- |
| 31 | || double64_t || ±1.7976931348623157E308~±4.9E-324 || 64bit 倍精度浮動小数 (IEEE754) || |
| 32 | |------------- |
| 33 | || char_t || -128 .. 255 || 値としては 8bit 有符号、無符号のどちらも受けつける || |
| 34 | |------------- |
| 35 | {{{#!td rowspan=6 |
| 36 | 値の範囲が明瞭な型[[BR]] |
| 37 | (C言語由来の型)[[BR]] |
| 38 | 非推奨 |
| 39 | }}} |
| 40 | || char || 実装依存 || |
| 41 | |------------- |
| 42 | || int || 実装依存 || |
| 43 | |------------- |
| 44 | || short || 実装依存 || |
| 45 | |------------- |
| 46 | || long || 実装依存 || |
| 47 | |------------- |
| 48 | || float || 実装依存 || |
| 49 | |------------- |
| 50 | || double || 実装依存 || |
| 51 | |------------- |
| 52 | {{{#!td rowspan=6 |
| 53 | typedef 型 |
| 54 | }}} |
| 55 | {{{#!td rowspan=4 |
| 56 | t_stddef.h で定義される型 |
| 57 | }}} |
| 58 | || int_t || 実装依存 || |
| 59 | |------------- |
| 60 | || uint_t || 実装依存 || |
| 61 | |------------- |
| 62 | || long_t || 実装依存 || |
| 63 | |------------- |
| 64 | || ulong_t || 実装依存 || |
| 65 | |------------- |
| 66 | {{{#!td rowspan=2 |
| 67 | tecs.h で定義される型 |
| 68 | }}} |
| 69 | || short_t || 実装依存 || |
| 70 | |------------- |
| 71 | || ushort_t || 実装依存 || |
| 72 | |------------- |
| 73 | |
| 74 | |
| 75 | == 組込み型 == |
| 76 | |
| 77 | 組込み型は、 TECS CDL の文法の一部として予め組み込まれた型です。 |
| 78 | C 言語に由来しない型でも TECS CDL 記述内では typedef することなく使用できます。 |
| 79 | しかし、C 言語のソースをコンパイルする段階では、組込み型を typedef するヘッダファイルがインクルードされている必要があります。 |
| 80 | これは、ヘッダファイル tecs.h または t_stddef.h に記述されています。通常 import_C により、このいずれかを取り込みます。 |
| 81 | |
| 82 | C 言語に由来する型とは、char, short, int, long, float, double です。 |
| 83 | このうち char, short, int, long は signed, unsigned で修飾することができます。 |
| 84 | しかし TECS CDL で、すべての C 言語由来の型が扱えるわけではありません。 |
| 85 | short int, long signed, unsigned など、C 言語では有効な型であっても、TECS CDL 有効な型とは限りません。 |
| 86 | |
| 87 | 【補足説明】intN_t が組み込み型である理由は、最大値、最小値が明瞭になり、値の範囲をチェックできるためである。 |
| 88 | intN_t を int や short などの型の typedef 型としてしまうと、最大値、最小値を tecsgen の段階では確定することができず、チェックできなくなってしまう。 |
| 89 | |
| 90 | == typedef 型 == |
| 91 | |
| 92 | ここに挙げた typedef 型は、TECS 仕様の一部とみなされる型です。 typedef 型は typedef により定義される型であり、ヘッダファイルを取り込んで typedef による型定義をしない限り使用することができません。 |
| 93 | |
| 94 | == tecs.h と t_stddef.h == |
| 95 | |
| 96 | 組込み型の C 言語での定義および、typedef 型を TECS CDL による記述で使用するために必要となる型の定義は、tecs.h に含まれます。 |
| 97 | tecs.h は t_stddef.h をインクルードしています。 |
| 98 | t_stddef.h は TOPPERS 新世代カーネル統合仕様に基づいて定義されるものであり、TECS で定義する型以外の型定義を含みます。 |
| 99 | |
| 100 | tecs.h では t_stddef.h で定義する型に加えて char_t, uchar_t, schar_t, short_t, ushort_t, int128_t, uint128_t が定義されます。 |
| 101 | |
| 102 | 通常 TECS CDL による記述では tecs.h を直接的または間接的に import_C で取り込む必要があります。 |
| 103 | ここで間接的にとは、import_C で取り込まれるヘッダファイルからインクルードされることであります。 |
| 104 | |
| 105 | 【補足説明】typedef 型を TECS CDL による記述で用いないのであれば、必ずしも tecs.h を import_C で取り込む必要はないが、生成された C 言語のプログラムをコンパイルする際には、何らかの手段により tecs.h をインクルードする必要がある。 |
| 106 | ターゲットがTOPPERS 新世代カーネル統合仕様に準拠しない環境である場合 tecs.h や t_stddef.h 以外で C 言語に由来しない組込み型や typedef 型の定義をし、それらを import_C により取り込んでもよい。 |
| 107 | |
| 108 | |
| 109 | [wiki:CDLref トップページ]・[wiki:CDLref_index 目次] |