This section covers implementation-defined items given by the ANSI C standards.
See "4.1.6 Internal representation and value area of data".
The ANSI C standard specifies eight translation phases that indicate the precedence among the syntax rules of translation. Each sequence of non-empty white-space characters other than new-line, which is described as implementation-defined in phase 3 (decomposing the source file into preprocessing tokens and white-space characters), is retained rather than being replaced by one space character.
When syntax rule violation or restriction violation occurs on a translation unit, the compiler outputs as error message containing source file name and (when it can be determined) the number of line containing the error. These error messages are classified: "Warning", "Fatal error", "Error" and "other" messages. For output formats of messages, see the "10.2 Message Formats".
The name, type, and arguments of a function that is called when starting program processing are not stipulated.
Therefore, it is dependent on the user-own coding and target system.
The configuration of the interactive unit is not stipulated.
Therefore, it is dependent on the user-own coding and target system.
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.
The values of expanded notation are stipulated as follows.
There are limits on translation as shown below. In addition to the absolute quantitative limits of the compiler, there are limits depending on the memory of the host machine on which the compiler is running.
The maximum number of pointers, arrays, function declarators (and the combinations of any of them) that qualify an arithmetic, structure, union, or imcomplete type in one declaration is 128. |
The limits.h file specifies the limit values of the values that can be expressed as general integer types (char type, signed/unsigned integer type, and enumerate type).
Because multi-byte characters are not supported, MB_LEN_MAX does not have a corresponding limit. Consequently, it is only defined with MB_LEN_MAX as 1.
The limit values defined by the limits.h file are as follows.
The limit values related to characteristics of the floating-point type are defined in float.h file.
The limit values defined by the float.h file are as follows.
The limit values related to characteristics of the floating-point type are defined in half.h file.
The limit values defined by the half.h file are as follows.
All identifiers are considered to have meaning. There are no restrictions on identifier length.
Uppercase and lowercase characters are distinguished.
If a value larger than a char is stored in a char type, then the value is converted to type char.
A char type with no type specifier (signed or unsigned) has the same range of values as that of a signed char.
The floating-point constants conform to IEEE754Note.
IEEE: Institute of Electrical and Electronics Engineers |
Both the character set of the source program and the character set in the execution environment are basically ASCII codes, and correspond to members having the same value. |
An integer character constant having four or less characters has the value of the int type in which the lower byte holds the last character and the upper byte holds the first character. A character constant having five or more characters will lead to an error. |
int a1 = 'a'; /* 0x61 */ int a2 = 'ab'; /* 0x6162 */ int a3 = 'abc'; /* 0x616263 */ int a4 = 'abcd'; /* 0x61626364 */ int a5 = 'abcde'; /* Error */ |
A character that cannot be expressed by the basic execution environment character set or escape sequence is expressed as follows. |
An octal or hexadecimal escape sequence takes the value indicated by the octal or hexadecimal notation |
Values of \a, \b, \f, \n, \r, \t, \v are same as the values explained in "(8) Significance of character display". |
A character string can be described in Japanese and Chinese.
The default character code is Shift JIS.
A character code in input source file can be selected by using the -Xcharacter_set option of the CC-RH.
The method to reflect the string in the two formats (< > and " ") of a header file name on the header file or an external source file name is stipulated in "(34) Loading header file".
A comment can be described in Japanese and Chinese. The character code is the same as the character string in "(15) Character string".
If the value of a general integer type is converted into a signed integer of a smaller size, the higher bits are truncated and a bit string image is copied.
If an unsigned integer is converted into the corresponding signed integer, the internal representation is not changed.
If the value of a general integer type is converted into the value of a floating-point type, and if the value to be converted is within a range that can be expressed but not accurately, the result is rounded to the closest expressible value.
When casting a double to a float, or a long double to a double or a float, if the typecast value cannot be represented accurately in the available value range, then the result will be rounded to the nearest value that can be represented.
The characteristics of the shift operator conform to the stipulation in "(28) Shift operator in bit units".
The other operators in bit units for signed type are calculated as unsigned values (as in the bit image).
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.
The value resulting from the "sizeof" operator conforms to the stipulation related to the bytes in an object in "(1) Data types and sizes".
For the number of bytes in a structure and union, it is byte including padding area.
When a pointer is converted into a general integer type, the required size of the variable is the same as the size of the unsigned long type. The bit string is saved as is as the conversion result.
Also, although it is possible to typecast an arbitrary integer to a pointer, after the integer is typecast to a pointer, the integer's bit pattern is retained unchanged.
The result of the division operator ("/") when the operands are negative and do not divide perfectly with integer division, is as follows: If either the divisor or the dividend is negative, the result is the smallest integer greater than the algebraic quotient.
If both the divisor and the dividend are negative, the result is the largest integer less than the algebraic quotient.
If the operand is negative, the result of the "%" operator takes the sign of the first operand in the expression.
If subtraction is done between two pointers indicating elements of the same array, the type of the result is the int type.
If E1 of "E1 >> E2" is of signed type and takes a negative value, an arithmetic shift is executed.
Optimize for the fastest possible access, regardless of whether there is a storage-class area specifier "register" declaration.
A simple int type bit field without signed or unsigned appended is treated as a signed field, and the most significant bit is treated as the sign bit. |
To retain a bit field, a storage area unit to which any address with sufficient size can be assigned can be allocated. If there is insufficient area, however, the bit field that does not match is packed into to the next unit according to the alignment condition of the type of the field. |
The default allocation order of the bit field in a unit is from lower to higher.
This order can be changed through the -Xbit_order option or the #pragma bit_order directive.
If packing is used, however, the boundaries of all members will be the byte boundary.
The type of an enumeration specifier is signed int.
However, when the -Xenum_type=auto option is specified, each enumerated type is treated as the smallest integer type capable of expressing all the enumerators in that type.
The configuration of access to data having a type qualified to be "volatile" is dependent upon the address (I/O port, etc.) to which the data is mapped. If packing is used, however, the boundaries of all members will be the byte boundary.
The value for the constant specified for condition embedding and the value of the character constant appearing in the other expressions are equal. |
A preprocessing directive in the form of "#include <character string>" searches for a header file from the folder specified by the -I option if "character string" does not begin with "\"Note, and then searches standard include file folder (..\inc folder with a relative path from the bin folder where the ccrh is placed).
If a header file uniformly identified is searched with a character string specified between delimiters "<" and ">", the whole contents of the header file are replaced.
The search order is as follows.
A preprocessing directive in the form of "#include "character string"" searches for a header file from the folder where the source file exists, then searches specified folder (-I option) and then searches standard include file folder (..\inc folder with a relative path from the bin folder where the ccrh is placed).
If a header file uniformly identified is searched with a character string specified between delimiters " " " and " " ", the whole contents of the header file are replaced.
The search order is as follows.
The format of "#include preprocessing character phrase string" is treated as the preprocessing character phrase of single header file only if the preprocessing character phrase string is a macro that is replaced to the form of <character string> or "character string".
Between a string delimited (finally) and a header file name, the length of the alphabetic characters in the strings is identified,
The folder that searches a file conforms to the above stipulation.
The CC-RH can specify the following #pragma directives.
Allocates variables to an arbitrary section.
For details about the allocation method, see "4.2.4.1 Allocation of data and program to section".
Assembler directives can be described in a C source program.
For the details of description, see "4.2.4.2 Describing assembler instruction".
#pragma inline [(]function-name[, function-name ...][)] #pragma noinline [(]function-name[, function-name ...][)] |
A function that is expanded inline can be specified.
For the details of expansion specification, see "4.2.4.3 Inline expansion".
Interrupt/Exception handlers are described in C language.
For the details of description, see "(3) Describing interrupt/exception handler".
Interrupts are disabled for the entire function.
For details of description, see "(2) Disabling interrupts in entire function".
Specifies the packing of a structure type. The packing value, which is an alignment value of the member, is specified as the numeric value. A value of 1, 2, 4 can be specified. When the numeric value is not specified, it is by default alignment.
For details of description, see "4.2.4.8 Structure type packing".
This specifies a change to the order of the bit field.
For details of description, see "4.2.4.9 Bit field assignment".
A function to which a core number is to be assigned can be specified.
For details of description, see "4.2.4.10 Core number specification (for a multi-core device)".
This specifies the alignment value for branch destination addresses.
For details on specifying the alignment value for branch destination addresses, see "4.2.4.11 Specifying alignment value for branch destination addresses".
#pragma stack_protector [(]function-name[(num=value)][)] #pragma no_stack_protector [(]function-name[)] |
This specifies a function for generating a code for detection of stack smashing.
For details on how to write the code, see "4.2.4.12 Detection of stack smashing [Professional Edition only]".
All the following macro names are supported.
The date and time of translation can be obtained in any case; the __DATE__ and __TIME__ macro values are always defined. |
For the processing to be performed when the -Xansi option is specified, see "4.1.5 Option to process in strict accordance with ANSI standard". |
The NULL macro is defined as follows.
The following shows the implementation-defined items regarding standard library functions.
The sets of characters tested for by the isalnum, isalpha, iscntrl, islower, isprint, and isupper functions |
|
The values returned by the mathematics functions on domain errors |
Refer to the description of each function in "7.1 Supplied Libraries". |
Whether the mathematics functions set the integer expression errno to the value of the macro ERANGE on underflow range errors |
Refer to the description of each function in "7.1 Supplied Libraries". |
Whether a domain error occurs or zero is returned when the fmod function has a second argument of zero |
Refer to the description of the fmod function in "7.4.10 Mathematical functions". |
The semantics for each signal recognized by the signal function |
|
The default handling and the handling at program startup for each signal recognized by the signal function |
|
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 |
|
Whether the default handling is reset if the SIGILL signal is received by a handler specified to the signal function |
|
Whether the last line of a text stream requires a terminating new-line character |
|
Whether space characters that are written out to a text stream immediately before a new-line character appear when read in |
|
The number of null characters that may be appended to data written to a binary stream |
|
Whether the file position indicator of an append mode stream is initially positioned at the beginning or end of the file |
|
Whether a write on a text stream causes the associated file to be truncated beyond that point |
|
The effect if a file with the new name exists prior to a call to the rename function |
|
Refer to (5) type specification character in the description of the sprintf function in "7.4.7 Standard I/O functions". |
|
Refer to (4) type specification character in the description of the sscanf function in "7.4.7 Standard I/O functions". |
|
The interpretation of a - character that is neither the first nor the last character in the scan list for %[ conversion in the fscanf function |
Refer to (4) type specification character in the description of the sscanf function in "7.4.7 Standard I/O functions". |
The value to which the macro errno is set by the fgetpos or ftell function on failure |
|
Refer to the description of perror in "7.4.7 Standard I/O functions". |
|
The behavior of the calloc, malloc, or realloc function if the size requested is zero |
|
The behavior of the abort function with regard to open and temporary files |
|
The status returned by the exit function if the value of the argument is other than zero, EXIT_SUCCESS, or EXIT_FAILURE |
|
The set of environment names and the method for altering the environment list used by the getenv function |
|
The contents and mode of execution of the string by the system function |
|
The contents of the error message strings returned by the strerror function |
Refer to the description of the strerror function in "7.4.3 Character string functions". |