この項では,CC-RLがサポートするC99言語機能について説明します。
//(スラッシュ2つ)より始まり改行までをコメントとします。改行の直前の文字が\の場合,次の行も続いた1つのコメントとします。
文字列定数とワイド文字列定数を結合した場合,ワイド文字列定数となります。
_Bool型をサポートします。
_Bool 型は1 バイトの整数型ですが,0 または1 のみを保持します。
オプション-lang=cかつ-strict_std 使用時は_Bool 型をサポートしないので,コンパイル・エラーとなります。
long long int型をサポートします。long long int型は8バイトの整数型です。
定数値の末尾LLおよびULLもサポートします。ビット・フィールドの型にも指定可能です。
オプション-lang=cかつ-strict_std 使用時はlong long int型をサポートしないので,コンパイル・エラーとなります。
_Bool型とlong long型のサポートに伴って,汎整数拡張もC99 の仕様に従います。
オプション-lang=cかつ-strict_std 使用時は_Bool 型とlong long 型をサポートしないので,C90 の仕様に従います。
自動記憶域期間を持つ集成体型オブジェクトおよび共用体型オブジェクトの初期化子は,C99の 仕様に従います。
C90 仕様では,初期化子に定数式のみを使用可能ですが,定数式以外も使用可能とします。
void func(int param) {
int i = param; //C90,C99ともにOK
int array[] = { param }; //C90ではNG,C99ではOK,CC-RLではともにOK
|
_Bool 型とlong long 型のサポートに伴って,既定の実引数拡張もC99 の仕様に従います。
- | _Bool型はint型(2 バイト)に拡張して関数を呼び出します。 |
- | (unsigned) long long型は,8 バイトのまま関数を呼び出します。 |
- | オプション-dbl_size=4使用時は,float型は4 バイトのまま関数を呼び出します。
これはオプションの作用により,float型をdouble型に拡張しても,double型が4 バイト(float型に等しい)であるためです。 |
nearポインタは,farポインタに変換されます。
void*は変数ポインタの規則に従います。
enum型を定義する際,列挙子の列挙の最後の” , (カンマ)”を許可します。
オプション-lang=cかつ-strict_std 使用時はエラーとなります。
long long型の追加に伴って,整数定数の型は次のとおりになります。
整数定数の型は,次の並びのうちでその値を表現できる最初の型となります。
表 4.4 | 整数定数の型(long long型が有効な場合(-lang=c指定あり,-strict_std指定なし)) |
|
|
|
なし
|
int
long int
unsigned long int注
long long int
unsigned long long int
|
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
|
u,またはU
|
unsigned int
unsigned long int
unsigned long long int
|
unsigned int
unsigned long int
unsigned long long int
|
l,またはL
|
long int
unsigned long int注
long long int
unsigned long long int
|
long int
unsigned long int
long long int
unsigned long long int
|
u,またはU,およびl ,またはL の両方
|
unsigned long int
unsigned long long int
|
unsigned long int
unsigned long long int
|
ll,またはLL
|
long long int
unsigned long long int
|
long long int
unsigned long long int
|
u,またはU,およびll ,またはLLの両方
|
unsigned long long int
|
unsigned long long int
|
注 | C99の仕様と異なります。これはC90 であれば4 バイト・データであるところを,8 バイト・データになることを回避するためです。 |
表 4.5 | 整数定数の型(long long型が無効な場合(-lang=c指定あり,-strict_std指定あり)) |
|
|
|
なし
|
int
long int
unsigned long int
|
int
unsigned int
long int
unsigned long int
|
u,またはU
|
unsigned int
unsigned long int
|
unsigned int
unsigned long int
|
l,またはL
|
long int
unsigned long int
|
long int
unsigned long int
|
u,またはU,およびl ,またはL の両方
|
unsigned long int
|
unsigned long int
|
表 4.6 | 整数定数の型(long long型が有効な場合(-lang=c99指定あり)) |
|
|
|
なし
|
int
long int
long long int
unsigned long long int
|
int
unsigned int
long int
unsigned long int
long long int
unsigned long long int
|
u,またはU
|
unsigned int
unsigned long int
unsigned long long int
|
unsigned int
unsigned long int
unsigned long long int
|
l,またはL
|
long int
long long int
unsigned long long int
|
long int
unsigned long int
long long int
unsigned long long int
|
u,またはU,およびl ,またはL の両方
|
unsigned long int
unsigned long long int
|
unsigned long int
unsigned long long int
|
ll,またはLL
|
long long int
unsigned long long int
|
long long int
unsigned long long int
|
u,またはU,およびll ,またはLL の両方
|
unsigned long long int
|
unsigned long long int
|
(10) 標準ヘッダの追加
標準ヘッダstdint.hを追加します。
stdint.hでは,以下の型を定義します。
|
|
|
int8_t
|
signed char
|
|
int16_t
|
signed short
|
|
int32_t
|
signed long
|
|
int64_t
|
signed long long
|
-strict_std不使用時,
または-lang=c99使用時
|
uint8_t
|
unsigned char
|
|
uint16_t
|
unsigned short
|
|
uint32_t
|
unsigned long
|
|
uint64_t
|
unsigned long long
|
-strict_std不使用時,
または-lang=c99使用時
|
int_least8_t
|
signed char
|
|
int_least16_t
|
signed short
|
|
int_least32_t
|
signed long
|
|
int_least64_t
|
signed long long
|
-strict_std不使用時,
または-lang=c99使用時
|
uint_least8_t
|
unsigned char
|
|
uint_least16_t
|
unsigned short
|
|
uint_least32_t
|
unsigned long
|
|
uint_least64_t
|
unsigned long long
|
-strict_std不使用時,
または-lang=c99使用時
|
int_fast8_t
|
signed char
|
|
int_fast16_t
|
signed short
|
|
int_fast32_t
|
signed long
|
|
int_fast64_t
|
signed long long
|
-strict_std不使用時,
または-lang=c99使用時
|
uint_fast8_t
|
unsigned char
|
|
uint_fast16_t
|
unsigned short
|
|
uint_fast32_t
|
unsigned long
|
|
uint_fast64_t
|
unsigned long long
|
-strict_std不使用時,
または-lang=c99使用時
|
intptr_t
|
signed long
|
|
uintptr_t
|
unsigned long
|
|
intmax_t
|
signed long
|
-lang=c使用,
かつ-strict_std使用時
|
signed long long
|
-strict_std不使用時,
または-lang=c99使用時
|
uintmax_t
|
unsigned long
|
-lang=c使用,
かつ-strict_std使用時
|
unsigned long long
|
-strict_std不使用時,
または-lang=c99使用時
|
stdint.hでは,以下のマクロを定義します。
|
|
|
INT8_MIN
|
-128
|
|
INT16_MIN
|
-32768
|
|
INT32_MIN
|
-2147483648
|
|
INT64_MIN
|
-9223372036854775808
|
-strict_std不使用時,
または-lang=c99使用時
|
INT8_MAX
|
+127
|
|
INT16_MAX
|
+32767
|
|
INT32_MAX
|
+2147483647
|
|
INT64_MAX
|
+9223372036854775807
|
-strict_std不使用時,
または-lang=c99使用時
|
UINT8_MAX
|
+255
|
|
UINT16_MAX
|
+65535
|
|
UINT32_MAX
|
+4294967295
|
|
UINT64_MAX
|
+18446744073709551615
|
-strict_std不使用時,
または-lang=c99使用時
|
INT_LEAST8_MIN
|
-128
|
|
INT_LEAST16_MIN
|
-32768
|
|
INT_LEAST32_MIN
|
-2147483648
|
|
INT_LEAST64_MIN
|
-9223372036854775808
|
-strict_std不使用時,
または-lang=c99使用時
|
INT_LEAST8_MAX
|
+127
|
|
INT_LEAST16_MAX
|
+32767
|
|
INT_LEAST32_MAX
|
+2147483647
|
|
INT_LEAST64_MAX
|
+9223372036854775807
|
-strict_std不使用時,
または-lang=c99使用時
|
UINT_LEAST8_MAX
|
+255
|
|
UINT_LEAST16_MAX
|
+65535
|
|
UINT_LEAST32_MAX
|
+4294967295
|
|
UINT_LEAST64_MAX
|
+18446744073709551615
|
-strict_std不使用時,
または-lang=c99使用時
|
INT_FAST8_MIN
|
-128
|
|
INT_FAST16_MIN
|
-32768
|
|
INT_FAST32_MIN
|
-2147483648
|
|
INT_FAST64_MIN
|
-9223372036854775808
|
-strict_std不使用時,
または-lang=c99使用時
|
INT_FAST8_MAX
|
+127
|
|
INT_FAST16_MAX
|
+32767
|
|
INT_FAST32_MAX
|
+2147483647
|
|
INT_FAST64_MAX
|
+9223372036854775807
|
-strict_std不使用時,
または-lang=c99使用時
|
UINT_FAST8_MAX
|
+255
|
|
UINT_FAST16_MAX
|
+65535
|
|
UINT_FAST32_MAX
|
+4294967295
|
|
UINT_FAST64_MAX
|
+18446744073709551615
|
-strict_std不使用時,
または-lang=c99使用時
|
INTPTR_MIN
|
-2147483648
|
|
INTPTR_MAX
|
+2147483647
|
|
UINTPTR_MAX
|
+4294967295
|
|
INTMAX_MIN
|
-2147483648
|
-lang=c使用,
かつ-strict_std使用時
|
-9223372036854775808
|
-strict_std不使用時,
または-lang=c99使用時
|
INTMAX_MAX
|
+2147483647
|
-lang=c使用,
かつ-strict_std使用時
|
+9223372036854775807
|
-strict_std不使用時,
または-lang=c99使用時
|
UINTMAX_MAX
|
+4294967295
|
-lang=c使用,
かつ-strict_std使用時
|
+18446744073709551615
|
-strict_std不使用時,
または-lang=c99使用時
|
PTRDIFF_MIN
|
-32768
|
|
PTRDIFF_MAX
|
+32767
|
|
SIZE_MAX
|
+65535
|
|
可変個引数マクロを許可します。
#define pf(form,...) printf(form, __VA_ARGS__)
pf("%s %d\n", "string", 100);
↓
printf("%s %d\n", "string", 100);
|