4.2.3
C99 language specifications supported in conjunction with C90
CC-RL supports some of the C99-standard specifications even when the C90 standard is selected (with -lang=c).
Text from two slashes (//) until a newline character is a comment. If there is a backslash character (\) immediately before the newline, then the next line is treated as a continuation of the current comment.
(2) | Concatenating wide string literal |
The result of concatenating a character string literal with a wide string literal is a wide string literal.
_Bool type is supported.
_Bool type is a 1-byte integer type that holds only 0 or 1.
When the -lang=c and -strict_std options are specified, _Bool type is not supported and it generates a compilation error.
long long int type is supported. long long int type is an 8-byte integer type.
Appending "LL" and "ULL" to a constant value is also supported. It is also possible to specify this for bit field types.
When the -lang=c and -strict_std options are specified, the long long int type is not supported and it generates a compilation error.
In accordance with support for types _Bool and long long, integer promotion is also in accordance with the C99 specification.
When the -lang=c and -strict_std options are specified, _Bool type and long long type is not supported and integer promotion is in accordance with the C90 specification.
(6) | Aggregate initialization |
The initializer for an aggregate or union type object that has automatic storage duration conforms to the C99 specifications.
In the C90 specifications, only a constant expression is allowed for an initializer, but other expressions can be used in CC-RL.
void func(int param) {
int i = param; //Allowed both in C90 and C99
int array[] = { param }; //Not allowed in C90, allowed in C99, and
//allowed in CC-RL
|
(7) | Default argument promotions |
In accordance with support for types _Bool and long long, default argument promotions is also in accordance with the C99 specification..
- | Functions are called after expanding type _Bool_ to type int (2 bytes). |
- | Functions are called with type (unsigned) long long remaining as an 8 bytes value. |
- | When the option -dbl_size=4 is used, functions are called with type float remaining 4 bytes.
This is because as a result of this option, even if a float is promoted to a double, the double type will have 4 bytes (same as the float type). |
A near pointer is converted to a far pointer.
void* conforms to the rules for variable pointers.
(8) | Comma permission behind the last enumerator of a enum definition |
When defining an enum type, it is permissible for the last enumerator in the enumeration to be followed by a comma (,).
When the -lang=c and -strict_std options are specified, this comma will generate an error.
(9) | Types of integer constants |
The type of an integer constant changes due to addition of the long long type. For details, see "(c) Integer constants" in "4.1.3 Internal representation and value area of data".
Standard header stdint.h is added, which defines the following types.
|
|
|
CHAR_BIT
|
+8
|
The number of bits (= 1 byte) of the minimum object not in bit field
|
SCHAR_MIN
|
-128
|
Minimum value of signed char
|
SCHAR_MAX
|
+127
|
Maximum value of signed char
|
UCHAR_MAX
|
+255
|
Maximum value of unsigned char
|
CHAR_MIN
|
0 (-128)
|
Minimum value of char (The default is the value of unsigned char. When the -signed_char option is specified, it becomes the value of signed char.)
|
CHAR_MAX
|
+255 (+127)
|
Maximum value of char (The default is the value of unsigned char. When the -signed_char option is specified, it becomes the value of signed char.)
|
SHRT_MIN
|
-32768
|
Minimum value of short int
|
SHRT_MAX
|
+32767
|
Maximum value of short int
|
USHRT_MAX
|
+65535
|
Maximum value of unsigned short int
|
INT_MIN
|
-32768
|
Minimum value of int
|
INT_MAX
|
+32767
|
Maximum value of int
|
UINT_MAX
|
+65535
|
Maximum value of unsigned int
|
LONG_MIN
|
-2147483648
|
Minimum value of long int
|
LONG_MAX
|
+2147483647
|
Maximum value of long int
|
ULONG_MAX
|
+4294967295
|
Maximum value of unsigned long int
|
LLONG_MIN
|
-9223372036854775807
|
Minimum value of long long int
(Invalid when using option -lang=c and -strict_std)
|
LLONG_MAX
|
+9223372036854775807
|
Maximum value of long long int
(Invalid when using option -lang=c and -strict_std)
|
ULLONG_MAX
|
+18446744073709551615
|
Maximum value of unsigned long long int
(Invalid when using option -lang=c and -strict_std)
|
The values in parentheses are for the case when the -dbl_size=4 option is used, which specifies sizeof(double) = sizeof(long double) = 4. -dbl_size=4 is the default setting in the CC-RL.
|
|
|
FLT_ROUNDS
|
+1
|
Rounding mode for floating-point addition.
1 for the RL78 family (rounding in the nearest direction).
|
FLT_EVAL_METHOD
|
0
|
Evaluation format of floating-point number
(Invalid when using option -lang=c)
|
FLT_RADIX
|
+2
|
Radix of exponent (b)
|
FLT_MANT_DIG
|
+24
|
Number of numerals (p) with FLT_RADIX of floating- point mantissa as base
|
DBL_MANT_DIG
|
+53 (+24)
|
LDBL_MANT_DIG
|
+53 (+24)
|
DECIMAL_DIG
|
+17 (+9)
|
Number of digits of a decimal number (q) that can round a floating-point number of p digits using radix b to a decimal number of q digits and then restore the floating-point number of p digits using radix b without any change
(Invalid when using option -lang=c)
|
FLT_DIG
|
+6
|
Number of digits of a decimal number (q) that can round a decimal number of q digits to a floating-point number of p digits of the radix b and then restore the decimal number of q
|
DBL_DIG
|
+15 (+6)
|
LDBL_DIG
|
+15 (+6)
|
FLT_MIN_EXP
|
-125
|
Minimum negative integer (emin) that is a normalized floating-point number when FLT_RADIX is raised to the power of the value of FLT_RADIX minus 1.
|
DBL_MIN_EXP
|
-1021 (-125)
|
LDBL_MIN_EXP
|
-1021 (-125)
|
FLT_MIN_10_EXP
|
-37
|
Minimum negative integer log10bemin-1 that falls in the range of a normalized floating-point number when 10 is raised to the power of its value.
|
DBL_MIN_10_EXP
|
-307 (-37)
|
LDBL_MIN_10_EXP
|
-307 (-37)
|
FLT_MAX_EXP
|
+128
|
Maximum integer (emax) that is a finite floating-point number that can be expressed when FLT_RADIX is raised to the power of its value minus 1.
|
DBL_MAX_EXP
|
+1024 (+128)
|
LDBL_MAX_EXP
|
+1024 (+128)
|
FLT_MAX_10_EXP
|
+38
|
Maximum integer that falls in the range of a normalized floating-point number when 10 is raised to this power.
log10 ((1 - b-p) * bemax)
|
DBL_MAX_10_EXP
|
+308 (+38)
|
LDBL_MAX_10_EXP
|
+308 (+38)
|
FLT_MAX
|
3.40282347E + 38F
|
Maximum value of finite floating-point numbers that can be expressed
(1 - b-p) * bemax
|
DBL_MAX
|
1.7976931348623158E+308 (3.40282347E+38F)
|
LDBL_MAX
|
1.7976931348623158E+308 (3.40282347E+38F)
|
FLT_EPSILON
|
1.19209290E - 07F
|
Difference between 1.0 that can be expressed by specified floating-point number type and the lowest value which is greater than 1.
b1 - p
|
DBL_EPSILON
|
2.2204460492503131E-016 (1.19209290E - 07)
|
LDBL_EPSILON
|
2.2204460492503131E-016 (1.19209290E - 07F)
|
FLT_MIN
|
1.17549435E - 38F
|
Minimum value of normalized positive floating-point number
bemin - 1
|
DBL_MIN
|
2.2250738585072014E-308 (1.17549435E - 38F)
|
LDBL_MIN
|
2.2250738585072014E-308 (1.17549435E - 38F)
|
Table 4.13 | Type Definition Names in stdint.h |
|
|
|
int8_t
|
signed char
|
|
int16_t
|
signed short
|
|
int32_t
|
signed long
|
|
int64_t
|
signed long long
|
When -strict_std is not used or -lang=c99 is used
|
uint8_t
|
unsigned char
|
|
uint16_t
|
unsigned short
|
|
uint32_t
|
unsigned long
|
|
uint64_t
|
unsigned long long
|
When -strict_std is not used or -lang=c99 is used
|
int_least8_t
|
signed char
|
|
int_least16_t
|
signed short
|
|
int_least32_t
|
signed long
|
|
int_least64_t
|
signed long long
|
When -strict_std is not used or -lang=c99 is used
|
uint_least8_t
|
unsigned char
|
|
uint_least16_t
|
unsigned short
|
|
uint_least32_t
|
unsigned long
|
|
uint_least64_t
|
unsigned long long
|
When -strict_std is not used or -lang=c99 is used
|
int_fast8_t
|
signed char
|
|
int_fast16_t
|
signed short
|
|
int_fast32_t
|
signed long
|
|
int_fast64_t
|
signed long long
|
When -strict_std is not used or -lang=c99 is used
|
uint_fast8_t
|
unsigned char
|
|
uint_fast16_t
|
unsigned short
|
|
uint_fast32_t
|
unsigned long
|
|
uint_fast64_t
|
unsigned long long
|
When -strict_std is not used or -lang=c99 is used
|
intptr_t
|
signed long
|
|
uintptr_t
|
unsigned long
|
|
intmax_t
|
signed long
|
When -lang=c and -strict_std are used
|
signed long long
|
When -strict_std is not used or -lang=c99 is used
|
uintmax_t
|
unsigned long
|
When -lang=c and -strict_std are used
|
unsigned long long
|
When -strict_std is not used or -lang=c99 is used
|
Table 4.14 | Macro Definition Names in stdint.h |
|
|
|
INT8_MIN
|
-128
|
|
INT16_MIN
|
-32768
|
|
INT32_MIN
|
-2147483648
|
|
INT64_MIN
|
-9223372036854775808
|
When -strict_std is not used or -lang=c99 is used
|
INT8_MAX
|
+127
|
|
INT16_MAX
|
+32767
|
|
INT32_MAX
|
+2147483647
|
|
INT64_MAX
|
+9223372036854775807
|
When -strict_std is not used or -lang=c99 is used
|
UINT8_MAX
|
+255
|
|
UINT16_MAX
|
+65535
|
|
UINT32_MAX
|
+4294967295
|
|
UINT64_MAX
|
+18446744073709551615
|
When -strict_std is not used or -lang=c99 is used
|
INT_LEAST8_MIN
|
-128
|
|
INT_LEAST16_MIN
|
-32768
|
|
INT_LEAST32_MIN
|
-2147483648
|
|
INT_LEAST64_MIN
|
-9223372036854775808
|
When -strict_std is not used or -lang=c99 is used
|
INT_LEAST8_MAX
|
+127
|
|
INT_LEAST16_MAX
|
+32767
|
|
INT_LEAST32_MAX
|
+2147483647
|
|
INT_LEAST64_MAX
|
+9223372036854775807
|
When -strict_std is not used or -lang=c99 is used
|
UINT_LEAST8_MAX
|
+255
|
|
UINT_LEAST16_MAX
|
+65535
|
|
UINT_LEAST32_MAX
|
+4294967295
|
|
UINT_LEAST64_MAX
|
+18446744073709551615
|
When -strict_std is not used or -lang=c99 is used
|
INT_FAST8_MIN
|
-128
|
|
INT_FAST16_MIN
|
-32768
|
|
INT_FAST32_MIN
|
-2147483648
|
|
INT_FAST64_MIN
|
-9223372036854775808
|
When -strict_std is not used or -lang=c99 is used
|
INT_FAST8_MAX
|
+127
|
|
INT_FAST16_MAX
|
+32767
|
|
INT_FAST32_MAX
|
+2147483647
|
|
INT_FAST64_MAX
|
+9223372036854775807
|
When -strict_std is not used or -lang=c99 is used
|
UINT_FAST8_MAX
|
+255
|
|
UINT_FAST16_MAX
|
+65535
|
|
UINT_FAST32_MAX
|
+4294967295
|
|
UINT_FAST64_MAX
|
+18446744073709551615
|
When -strict_std is not used or -lang=c99 is used
|
INTPTR_MIN
|
-2147483648
|
|
INTPTR_MAX
|
+2147483647
|
|
UINTPTR_MAX
|
+4294967295
|
|
INTMAX_MIN
|
-2147483648
|
When -lang=c and -strict_std are used
|
-9223372036854775808
|
When -strict_std is not used or -lang=c99 is used
|
INTMAX_MAX
|
+2147483647
|
When -lang=c and -strict_std are used
|
+9223372036854775807
|
When -strict_std is not used or -lang=c99 is used
|
UINTMAX_MAX
|
+4294967295
|
When -lang=c and -strict_std are used
|
+18446744073709551615
|
When -strict_std is not used or -lang=c99 is used
|
PTRDIFF_MIN
|
-32768
|
|
PTRDIFF_MAX
|
+32767
|
|
SIZE_MAX
|
+65535
|
|
The variadic macro is enabled.
#define pf(form, ...) printf(form, __VA_ARGS__)
pf("%s %d\n", "string", 100);
↓
printf("%s %d\n", "string", 100);
|