Everything
4.1.1 Implementation-defined behavior of C90

This section covers the implementation-defined behavior given by the C90 standard.

(1)

How to identify diagnostic messages (5.1.1.3).

Refer to "10. MESSAGE".

(2)

The semantics of the arguments to main (5.1.2.2.1).

Not defined because of a freestanding environment.

(3)

What constitutes an interactive device (5.1.2.3).

Not defined for the configuration of an interactive device.

(4)

The number of significant initial characters (beyond 31) in an identifier without external linkage (6.1.2).

The entire identifier is handled as meaningful. The length of an identifier is unlimited.

(5)

The number of significant initial characters (beyond 6) in an identifier with external linkage (6.1.2).

The entire identifier is handled as meaningful. The length of an identifier is unlimited.

(6)

Whether case distinctions are significant in an identifier with external linkage (6.1.2).

Uppercase and lowercase characters are distinguished in identifiers.

(7)

The members of the source and execution character sets, except as explicitly specified in the Standard (5.2.1).

The values of elements of the source code and execution character set are ASCII codes, EUC, SJIS, UTF-8, big5, and gb2312.

Japanese and Chinese characters are supported in comments and character strings.

(8)

The shift states used for the encoding of multibyte characters (5.2.1.2).

No shift state is supported.

(9)

The number of bits in a character in the execution character set (5.2.4.2.1).

8 bits.

(10)

The mapping of members of the source character set (in character constants and string literals) to members of the execution character set (6.1.3.4).

Associated with the element having the same value.

(11)

The value of an integer character constant that contains a character or escape sequence not represented in the basic execution character set or the extended character set for a wide character constant (6.1.3.4).

Specific non-graphical characters can be expressed by means of extended notation, consisting of a backslash (\) followed by a lower-case letter. The following are available: \a, \b, \f, \n, \r, \t, and \v. There is no other extended notation; other letters following a backslash (\) become that letter.

Escape Sequence

Value (ASCII)

\a

0x07

\b

0x08

\f

0x0C

\n

0x0A

\r

0x0D

\t

0x09

\v

0x0B

(12)

The value of an integer character constant that contains more than one character or a wide character constant that contains more than one multibyte character (6.1.3.4).

A simple character constant consisting of up to two characters has a two-byte value with the lower byte being the last character and the upper byte being the start character. A character constant having three or more characters results in an error. A character which is not represented by basic execution environment character set is regarded as a simple character constant having that value. In an invalid escape sequence, the backslash is ignored and the next character is regarded as a simple character constant.

(13)

The current locale used to convert multibyte characters into corresponding wide characters (codes) for a wide character constant (6.1.3.4).

Locale is not supported.

(14)

Whether a "plain" char has the same range of values as signed char or unsigned char (6.2.1.1).

The char type has the same range of values, the same representation format and the same behavior as the unsigned char type. However, it can be switched to the signed char type by option -signed_char.

(15)

The representations and sets of values of the various types of integers (6.1.2.5).

Refer to "4.1.3 Internal representation and value area of data".

(16)

The result of converting an integer to a shorter signed integer, or the result of converting an unsigned integer to a signed integer of equal length, if the value cannot be represented (6.2.1.2).

Bit string masked by the width of the conversion target type (with the upper bits truncated).

(17)

The results of bitwise operations on signed integers (6.3).

Arithmetic shift is performed for a shift operator. For other operators, a signed integer is calculated as an unsigned value (as a bit image).

(18)

The sign of the remainder on integer division (6.3.5).

The result of the "%" operator takes the sign of the first operand in the expression.

(19)

The result of a right shift of a negative-valued signed integral type (6.3.7).

Arithmetic shift is performed.

(20)

The representations and sets of values of the various types of floating-point numbers (6.1.2.5).

Refer to "4.1.3 Internal representation and value area of data".

(21)

The direction of truncation when an integral number is converted to a floating-point number that cannot exactly represent the original value (6.2.1.3).

Rounded to the nearest representable direction.

(22)

The direction of truncation or rounding when a floating-point number is converted to a narrower floating-point number (6.2.1.4).

Rounded to the nearest representable direction.

(23)

The type of integer required to hold the maximum size of an array --- that is, the type of the sizeof operator, size_t (6.3.3.4, 7.1.1).

unsigned int type.

(24)

The result of casting a pointer to an integer or vice versa (6.3.4).

Refer to "Specifying memory allocation area (__near /__far)" in "4.2.6 Using extended language specifications".

(25)

The type of integer required to hold the difference between two pointers to members of the same array, ptrdiff_t (6.3.4, 7.1.1).

signed int type.

(26)

The extent to which objects can actually be placed in registers by use of the register storage-class specifier (6.5.1).

User requests for register variables are not honored.

(27)

A member of a union object is accessed using a member of a different type (6.3.2.3).

If the value of a union member is stored in a different member, the value will be stored in accordance with the alignment condition. As a result, when a union member is accessed using a member of a different type, the internal representation of the data will be of the type of the access.

(28)

The padding and alignment of members of structures (6.5.2.1).

Refer to "4.1.3 Internal representation and value area of data".

(29)

Whether a "plain" int bit-field is treated as a signed int bit-field or as an unsigned int bit-field (6.5.2.1).

Treated as an unsigned int type. However, this can be changed by option -signed_bitfield.

(30)

The order of allocation of bit-fields within an int (6.5.2.1).

Allocated from the lower order.

(31)

Whether a bit-field can straddle a storage-unit boundary (6.5.2.1).

When structure type packing is not specified, a bit-field cannot straddle a strage-unit boundary, but it is allocated to the next area.

When structure type packing is specified, a bit-field may straddle a strage-unit boundary.

(32)

The integer type chosen to represent the values of an enumeration type (6.5.2.2).

Any of the char, signed char, unsigned char or signed short type. Minimum type that an enumerated type fits in.

(33)

What constitutes an access to an object that has volatile-qualified type (6.5.3).

Although the access width, and order and number of accesses are as described in the C source, this does not apply to those accesses to a type for which the microcomputer does not have a corresponding instruction.

(34)

The maximum number of declarators that may modify an arithmetic, structure, or union type (6.5.4).

128.

(35)

The maximum number of case values in a switch statement (6.6.4.2).

65535.

(36)

Whether the value of a single-character character constant in a constant expression that controls conditional inclusion matches the value of the same character constant in the execution character set. Whether such a character constant may have a negative value (6.8.1).

A value for the character constant specified in conditional inclusion is equal to the character constant value that appears in other expressions.

A character constant cannot be a negative value if it is a plain char type (char type which is neither signed nor unsigned) and a plain char type is unsigned. It can be a negative value if a plain char type is signed.

(37)

The method for locating includable source files (6.8.2).

Folders are searched in this order and a file having the same name in the folder is identified as the header.

(1) Folder specified by the path (if it is full-path)

(2) Folder specified by option -I

(3) Standard include file folder (..\inc folder with a relative path from the bin folder where the compiler is placed)

(38)

The support for quoted names for includable source files (6.8.2).

Searched in this order:

(1) Folder specified by the path (if it is full-path)

(2) Folder having the source file

(3) Folder specified by option -I

(4) Standard include file folder (..\inc folder with a relative path from the bin folder where the compiler is placed)

(39)

The mapping of source file character sequences (6.8.2).

A character string described in the #include is interpreted as the character code specified as the source character set and is associated with a header name or an external source file name.

(40)

The behavior on each recognized #pragma directive (6.8.6).

Refer to "4.2.4 #pragma directive".

(41)

The definitions for __DATE__ and __TIME__ when respectively, the date and time of translation are not available (6.8.8).

A date and time are always obtained.

(42)

The null pointer constant to which the macro NULL expands (7.1.6).

(void *)0.

(43)

The diagnostic printed by and the termination behavior of the assert function (7.2).

The displayed diagnostic message is as follows:

Assertion failed : expression, file file name, line line number

The termination behavior depends on how the abort function is implemented.

(44)

The sets of characters tested for by the isalnum, isalpha, iscntrl, islower, isprint, and isupper functions (7.3.1).

unsigned char type (0 to 255) and EOF (-1).

(45)

The values returned by the mathematics functions on domain errors (7.5.1).

Refer to "7.5 Library Function".

(46)

Whether the mathematics functions set the integer expression errno to the value of the macro ERANGE on underflow range errors (7.5.1).

ERANGE is set in errno in case of an underflow.

(47)

Whether a domain error occurs or zero is returned when the fmod function has a second argument of zero (7.5.6.4).

A domain error is generated. For details, see the description about the fmod function group.

(48)

The set of signals for the signal function (7.7.1.1).

The signal handling functions are not supported.

(49)

The semantics for each signal recognized by the signal function (7.7.1.1).

The signal handling functions are not supported.

(50)

The default handling and the handling at program startup for each signal recognized by the signal function (7.7.1.1).

The signal handling functions are not supported.

(51)

If the equivalent of signal(sig, SIG_DFL); is not executed prior to the call of a signal handler, the blocking of the signal that is performed (7.7.1.1).

The signal handling functions are not supported.

(52)

Whether the default handling is reset if the SIGILL signal is received by a handler specified to the signal function (7.7.1.1).

The signal handling functions are not supported.

(53)

Whether the last line of a text stream requires a terminating new-line character (7.9.2).

The last line does not need to end in a newline character.

(54)

Whether space characters that are written out to a text stream immediately before a new-line character appear when read in (7.9.2).

Space characters appear when data is read.

(55)

The number of null characters that may be appended to data written to a binary stream (7.9.2).

0.

(56)

Whether the file position indicator of an append mode stream is initially positioned at the beginning or end of the file (7.9.3).

The file handling functions are not supported.

(57)

Whether a write on a text stream causes the associated file to be truncated beyond that point (7.9.3).

The file handling functions are not supported.

(58)

The characteristics of file buffering (7.9.3).

The file handling functions are not supported.

(59)

Whether a zero-length file actually exists (7.9.3).

The file handling functions are not supported.

(60)

The rules for composing valid file names (7.9.3).

The file handling functions are not supported.

(61)

Whether the same file can be open multiple times (7.9.3).

The file handling functions are not supported.

(62)

The effect of the remove function on an open file (7.9.4.1).

The file handling functions are not supported.

(63)

The effect if a file with the new name exists prior to a call to the rename function (7.9.4.2).

The file handling functions are not supported.

(64)

The output for %p conversion in the fprintf function (7.9.6.1).

Hexadecimal notation.

The fprintf function is not supported.

(65)

The input for %p conversion in the fscanf function (7.9.6.2).

Hexadecimal number.

The fscanf function is not supported.

(66)

The interpretation of a - character that is neither the first nor the last character in the scan list for %[ conversion in the fscanf function (7.9.6.2).

Refer to "scanf" in "7.5.7 Standard I/O functions".

The fscanf function is not supported.

(67)

The value to which the macro errno is set by the fgetpos or ftell function on failure (7.9.9.1, 7.9.9.4).

The file handling functions are not supported.

(68)

The messages generated by the perror function (7.9.10.4).

Refer to "7.5 Library Function".

(69)

The behavior of the calloc, malloc, or realloc function if the size requested is zero (7.10.3).

NULL is returned.

(70)

The behavior of the abort function with regard to open and temporary files (7.10.4.1).

The file handling functions are not supported.

(71)

The status returned by the exit function if the value of the argument is other than zero, EXIT_SUCCESS, or EXIT_FAILURE (7.10.4.3).

Not defined because of a freestanding environment.

(72)

The set of environment names and the method for altering the environment list used by the getenv function (7.10.4.4).

The getenv function is not supported.

(73)

The contents and mode of execution of the string by the system function (7.10.4.5).

The system function is not supported.

(74)

The contents of the error message strings returned by the strerror function (7.11.6.2).

Refer to "7.5 Library Function".

(75)

The local time zone and Daylight Saving Time (7.12.1).

time.h is not supported.

(76)

The era for the clock function (7.12.2.1).

time.h is not supported.

Translation limits

The table below shows the translation limits of CC-RL.

The upper limit depends on the memory situation of the host environment for the item "No limit".

Table 4.1

Translation limits (C90)

Item

C90

CC-RL

Number of nesting levels of conditional inclusion

8

No limit

Number of pointers, arrays, and function declarators (in any combinations) qualifying an arithmetic, structure, union, or incomplete type in a declaration

12

128

Number of nesting levels of parenthesized declarators within a full declarator

31

No limit

Number of nesting levels of parenthesized expressions within a full expression

32

No limit

Number of significant initial characters in an internal identifier or a macro name

31

No limit

Number of significant initial characters in an external identifier

6

No limit

Number of external identifiers in one translation unit

511

No limit

Number of identifiers with block scope declared in one block

127

No limit

Number of macro identifiers simultaneously defined in one preprocessing translation unit

1024

No limit

Number of parameters in one function definition

31

No limit

Number of arguments in one function call

31

No limit

Number of parameters in one macro definition

31

No limit

Number of arguments in one macro invocation

31

No limit

Number of characters in a logical source line

509

No limit

Number of characters in a character string literal or wide string literal (after concatenation)

509

No limit

Number of bytes in an object (in a hosted environment only)

32767

32767(65535) Note 1

Number of nesting levels for #included files

8

No limit

Number of case labels for a switch statement (excluding those for any nested switch statements)

257

65535

Number of members in a single structure or union

127

No limit

Number of enumeration constants in a single enumeration

127

No limit

Number of levels of nested structure or union definitions in a single struct-declaration-list

15

No limit

Note 1.

The value in parentheses indicates the number of bytes in cases where -large_variable is specified.