Programming languages — C (INTERNATIONAL STANDARD ISO/IEC 9899:TC3) - page 18

 

  Главная      Manuals     Programming languages — C (INTERNATIONAL STANDARD ISO/IEC 9899:TC3) - 2007 year

 

Search            copyright infringement  

 

 

 

 

 

 

 

 

 

 

 

Content      ..     16      17      18     

 

 

 

 

Programming languages — C (INTERNATIONAL STANDARD ISO/IEC 9899:TC3) - page 18

 

 

— An array subscript is out of range, even if an object is apparently accessible with the

given subscript (as in the lvalue expression

a[1][7]

given the declaration

int

a[4][5]

) (6.5.6).

— The result of subtracting two pointers is not representable in an object of type

ptrdiff_t

(6.5.6).

— An expression is shifted by a negative number or by an amount greater than or equal

to the width of the promoted expression (6.5.7).

— An expression having signed promoted type is left-shifted and either the value of the

expression is negative or the result of shifting would be not be representable in the
promoted type (6.5.7).

— Pointers that do not point to the same aggregate or union (nor just beyond the same

array object) are compared using relational operators (6.5.8).

— An object is assigned to an inexactly overlapping object or to an exactly overlapping

object with incompatible type (6.5.16.1).

— An expression that is required to be an integer constant expression does not have an

integer type; has operands that are not integer constants, enumeration constants,
character constants,

sizeof

expressions whose results are integer constants, or

immediately-cast floating constants; or contains casts (outside operands to

sizeof

operators) other than conversions of arithmetic types to integer types (6.6).

— A constant expression in an initializer is not, or does not evaluate to, one of the

following: an arithmetic constant expression, a null pointer constant, an address
constant, or an address constant for an object type plus or minus an integer constant
expression (6.6).

— An arithmetic constant expression does not have arithmetic type; has operands that

are not integer constants, floating constants, enumeration constants, character
constants, or

sizeof

expressions; or contains casts (outside operands to

sizeof

operators) other than conversions of arithmetic types to arithmetic types (6.6).

— The value of an object is accessed by an array-subscript

[]

, member-access

.

or

−>

,

address

&

, or indirection

*

operator or a pointer cast in creating an address constant

(6.6).

— An identifier for an object is declared with no linkage and the type of the object is

incomplete after its declarator, or after its init-declarator if it has an initializer (6.7).

— A function is declared at block scope with an explicit storage-class specifier other

than

extern

(6.7.1).

— A structure or union is defined as containing no named members (6.7.2.1).

§J.2 Portability issues 495

— An attempt is made to access, or generate a pointer to just past, a flexible array

member of a structure when the referenced object provides no elements for that array
(6.7.2.1).

— When the complete type is needed, an incomplete structure or union type is not

completed in the same scope by another declaration of the tag that defines the content
(6.7.2.3).

— An attempt is made to modify an object defined with a const-qualified type through

use of an lvalue with non-const-qualified type (6.7.3).

— An attempt is made to refer to an object defined with a volatile-qualified type through

use of an lvalue with non-volatile-qualified type (6.7.3).

— The specification of a function type includes any type qualifiers (6.7.3).

— Two qualified types that are required to be compatible do not have the identically

qualified version of a compatible type (6.7.3).

— An object which has been modified is accessed through a restrict-qualified pointer to

a const-qualified type, or through a restrict-qualified pointer and another pointer that
are not both based on the same object (6.7.3.1).

— A restrict-qualified pointer is assigned a value based on another restricted pointer

whose associated block neither began execution before the block associated with this
pointer, nor ended before the assignment (6.7.3.1).

— A function with external linkage is declared with an

inline

function specifier, but is

not also defined in the same translation unit (6.7.4).

— Two pointer types that are required to be compatible are not identically qualified, or

are not pointers to compatible types (6.7.5.1).

— The size expression in an array declaration is not a constant expression and evaluates

at program execution time to a nonpositive value (6.7.5.2).

— In a context requiring two array types to be compatible, they do not have compatible

element types, or their size specifiers evaluate to unequal values (6.7.5.2).

— A declaration of an array parameter includes the keyword

static

within the

[

and

]

and the corresponding argument does not provide access to the first element of an

array with at least the specified number of elements (6.7.5.3).

— A storage-class specifier or type qualifier modifies the keyword

void

as a function

parameter type list (6.7.5.3).

— In a context requiring two function types to be compatible, they do not have

compatible return types, or their parameters disagree in use of the ellipsis terminator
or the number and type of parameters (after default argument promotion, when there
is no parameter type list or when one type is specified by a function definition with an

496 Portability issues §J.2

identifier list) (6.7.5.3).

— The value of an unnamed member of a structure or union is used (6.7.8).

— The initializer for a scalar is neither a single expression nor a single expression

enclosed in braces (6.7.8).

— The initializer for a structure or union object that has automatic storage duration is

neither an initializer list nor a single expression that has compatible structure or union
type (6.7.8).

— The initializer for an aggregate or union, other than an array initialized by a string

literal, is not a brace-enclosed list of initializers for its elements or members (6.7.8).

— An identifier with external linkage is used, but in the program there does not exist

exactly one external definition for the identifier, or the identifier is not used and there
exist multiple external definitions for the identifier (6.9).

— A function definition includes an identifier list, but the types of the parameters are not

declared in a following declaration list (6.9.1).

— An adjusted parameter type in a function definition is not an object type (6.9.1).

— A   function that accepts a variable number of arguments is defined without a

parameter type list that ends with the ellipsis notation (6.9.1).

— The

}

that terminates a function is reached, and the value of the function call is used

by the caller (6.9.1).

— An identifier for an object with internal linkage and an incomplete type is declared

with a tentative definition (6.9.2).

— The token

defined

is generated during the expansion of a

#if

or

#elif

preprocessing directive, or the use of the

defined

unary operator does not match

one of the two specified forms prior to macro replacement (6.10.1).

— The

#include

preprocessing directive that results after expansion does not match

one of the two header name forms (6.10.2).

— The character sequence in an

#include

preprocessing directive does not start with a

letter (6.10.2).

— There are sequences of preprocessing tokens within the list of macro arguments that

would otherwise act as preprocessing directives (6.10.3).

— The result of the preprocessing operator

#

is not a valid character string literal

(6.10.3.2).

— The result of the preprocessing operator

##

is not a valid preprocessing token

(6.10.3.3).

§J.2 Portability issues 497

— The

#line

preprocessing directive that results after expansion does not match one of

the two well-defined forms, or its digit sequence specifies zero or a number greater
than 2147483647 (6.10.4).

— A   non-

STDC #pragma

preprocessing directive that is documented as causing

translation failure or some other form of undefined behavior is encountered (6.10.6).

— A

#pragma STDC

preprocessing directive does not match one of the well-defined

forms (6.10.6).

— The name of a predefined macro, or the identifier

defined

, is the subject of a

#define

or

#undef

preprocessing directive (6.10.8).

— An attempt is made to copy an object to an overlapping object by use of a library

function, other than as explicitly allowed (e.g.,

memmove

) (clause 7).

— A file with the same name as one of the standard headers, not provided as part of the

implementation, is placed in any of the standard places that are searched for included
source files (7.1.2).

— A header is included within an external declaration or definition (7.1.2).

— A function, object, type, or macro that is specified as being declared or defined by

some standard header is used before any header that declares or defines it is included
(7.1.2).

— A standard header is included while a macro is defined with the same name as a

keyword (7.1.2).

— The program attempts to declare a library function itself, rather than via a standard

header, but the declaration does not have external linkage (7.1.2).

— The program declares or defines a reserved identifier, other than as allowed by 7.1.4

(7.1.3).

— The program removes the definition of a macro whose name begins with an

underscore and either an uppercase letter or another underscore (7.1.3).

— An argument to a library function has an invalid value or a type not expected by a

function with variable number of arguments (7.1.4).

— The pointer passed to a library function array parameter does not have a value such

that all address computations and object accesses are valid (7.1.4).

— The macro definition of

assert

is suppressed in order to access an actual function

(7.2).

— The argument to the

assert

macro does not have a scalar type (7.2).

— The

CX_LIMITED_RANGE

,

FENV_ACCESS

, or

FP_CONTRACT

pragma is used in

any context other than outside all external declarations or preceding all explicit

498 Portability issues §J.2

declarations and statements inside a compound statement (7.3.4, 7.6.1, 7.12.2).

— The value of an argument to a character handling function is neither equal to the value

of

EOF

nor representable as an

unsigned char

(7.4).

— A macro definition of

errno

is suppressed in order to access an actual object, or the

program defines an identifier with the name

errno

(7.5).

— Part of the program tests floating-point status flags, sets floating-point control modes,

or runs under non-default mode settings, but was translated with the state for the

FENV_ACCESS

pragma ‘‘off’’ (7.6.1).

— The exception-mask argument for one of the functions that provide access to the

floating-point status flags has a nonzero value not obtained by bitwise

OR

of the

floating-point exception macros (7.6.2).

— The

fesetexceptflag

function is used to set floating-point status flags that were

not specified in the call to the

fegetexceptflag

function that provided the value

of the corresponding

fexcept_t

object (7.6.2.4).

— The argument to

fesetenv

or

feupdateenv

is neither an object set by a call to

fegetenv

or

feholdexcept

, nor is it an environment macro (7.6.4.3, 7.6.4.4).

— The value of the result of an integer arithmetic or conversion function cannot be

represented (7.8.2.1, 7.8.2.2, 7.8.2.3, 7.8.2.4, 7.20.6.1, 7.20.6.2, 7.20.1).

— The program modifies the string pointed to by the value returned by the

setlocale

function (7.11.1.1).

— The program modifies the structure pointed to by the value returned by the

localeconv

function (7.11.2.1).

— A macro definition of

math_errhandling

is suppressed or the program defines

an identifier with the name

math_errhandling

(7.12).

— An argument to a floating-point classification or comparison macro is not of real

floating type (7.12.3, 7.12.14).

— A macro definition of

setjmp

is suppressed in order to access an actual function, or

the program defines an external identifier with the name

setjmp

(7.13).

— An inv ocation of the

setjmp

macro occurs other than in an allowed context

(7.13.2.1).

— The

longjmp

function is invoked to restore a nonexistent environment (7.13.2.1).

— After a

longjmp

, there is an attempt to access the value of an object of automatic

storage class with non-volatile-qualified type, local to the function containing the
invocation of the corresponding

setjmp

macro, that was changed between the

setjmp

invocation and

longjmp

call (7.13.2.1).

§J.2 Portability issues 499

— The program specifies an invalid pointer to a signal handler function (7.14.1.1).

— A signal handler returns when the signal corresponded to a computational exception

(7.14.1.1).

— A signal occurs as the result of calling the

abort

or

raise

function, and the signal

handler calls the

raise

function (7.14.1.1).

— A signal occurs other than as the result of calling the

abort

or

raise

function, and

the signal handler refers to an object with static storage duration other than by
assigning a value to an object declared as

volatile sig_atomic_t

, or calls any

function in the standard library other than the

abort

function, the

_Exit

function,

or the

signal

function (for the same signal number) (7.14.1.1).

— The value of

errno

is referred to after a signal occurred other than as the result of

calling the

abort

or

raise

function and the corresponding signal handler obtained

a

SIG_ERR

return from a call to the

signal

function (7.14.1.1).

— A signal is generated by an asynchronous signal handler (7.14.1.1).

— A   function with a variable number of arguments attempts to access its varying

arguments other than through a properly declared and initialized

va_list

object, or

before the

va_start

macro is invoked (7.15, 7.15.1.1, 7.15.1.4).

— The macro

va_arg

is invoked using the parameter

ap

that was passed to a function

that invoked the macro

va_arg

with the same parameter (7.15).

— A macro definition of

va_start

,

va_arg

,

va_copy

, or

va_end

is suppressed in

order to access an actual function, or the program defines an external identifier with
the name

va_copy

or

va_end

(7.15.1).

— The

va_start

or

va_copy

macro is invoked without a corresponding invocation

of the

va_end

macro in the same function, or vice versa (7.15.1, 7.15.1.2, 7.15.1.3,

7.15.1.4).

— The type parameter to the

va_arg

macro is not such that a pointer to an object of

that type can be obtained simply by postfixing a

*

(7.15.1.1).

— The

va_arg

macro is invoked when there is no actual next argument, or with a

specified type that is not compatible with the promoted type of the actual next
argument, with certain exceptions (7.15.1.1).

— The

va_copy

or

va_start

macro is called to initialize a

va_list

that was

previously initialized by either macro without an intervening invocation of the

va_end

macro for the same

va_list

(7.15.1.2, 7.15.1.4).

— The parameter parmN of a

va_start

macro is declared with the

register

storage class, with a function or array type, or with a type that is not compatible with
the type that results after application of the default argument promotions (7.15.1.4).

500 Portability issues §J.2

— The member designator parameter of an

offsetof

macro is an invalid right

operand of the

.

operator for the type parameter, or designates a bit-field (7.17).

— The argument in an instance of one of the integer-constant macros is not a decimal,

octal, or hexadecimal constant, or it has a value that exceeds the limits for the
corresponding type (7.18.4).

— A byte input/output function is applied to a wide-oriented stream, or a wide character

input/output function is applied to a byte-oriented stream (7.19.2).

— Use is made of any portion of a file beyond the most recent wide character written to

a wide-oriented stream (7.19.2).

— The value of a pointer to a

FILE

object is used after the associated file is closed

(7.19.3).

— The stream for the

fflush

function points to an input stream or to an update stream

in which the most recent operation was input (7.19.5.2).

— The string pointed to by the

mode

argument in a call to the

fopen

function does not

exactly match one of the specified character sequences (7.19.5.3).

— An output operation on an update stream is followed by an input operation without an

intervening call to the

fflush

function or a file positioning function, or an input

operation on an update stream is followed by an output operation with an intervening
call to a file positioning function (7.19.5.3).

— An attempt is made to use the contents of the array that was supplied in a call to the

setvbuf

function (7.19.5.6).

— There are insufficient arguments for the format in a call to one of the formatted

input/output functions, or an argument does not have an appropriate type (7.19.6.1,
7.19.6.2, 7.24.2.1, 7.24.2.2).

— The format in a call to one of the formatted input/output functions or to the

strftime

or

wcsftime

function is not a valid multibyte character sequence that

begins and ends in its initial shift state (7.19.6.1, 7.19.6.2, 7.23.3.5, 7.24.2.1, 7.24.2.2,
7.24.5.1).

— In a call to one of the formatted output functions, a precision appears with a

conversion specifier other than those described (7.19.6.1, 7.24.2.1).

— A conversion specification for a formatted output function uses an asterisk to denote

an argument-supplied field width or precision, but the corresponding argument is not
provided (7.19.6.1, 7.24.2.1).

— A conversion specification for a formatted output function uses a

#

or

0

flag with a

conversion specifier other than those described (7.19.6.1, 7.24.2.1).

§J.2 Portability issues 501

— A conversion specification for one of the formatted input/output functions uses a

length modifier with a conversion specifier other than those described (7.19.6.1,
7.19.6.2, 7.24.2.1, 7.24.2.2).

— An

s

conversion specifier is encountered by one of the formatted output functions,

and the argument is missing the null terminator (unless a precision is specified that
does not require null termination) (7.19.6.1, 7.24.2.1).

— An

n

conversion specification for one of the formatted input/output functions includes

any flags, an assignment-suppressing character, a field width, or a precision (7.19.6.1,
7.19.6.2, 7.24.2.1, 7.24.2.2).

— A

%

conversion specifier is encountered by one of the formatted input/output

functions, but the complete conversion specification is not exactly

%%

(7.19.6.1,

7.19.6.2, 7.24.2.1, 7.24.2.2).

— An inv alid conversion specification is found in the format for one of the formatted

input/output functions, or the

strftime

or

wcsftime

function (7.19.6.1, 7.19.6.2,

7.23.3.5, 7.24.2.1, 7.24.2.2, 7.24.5.1).

— The number of characters transmitted by a formatted output function is greater than

INT_MAX

(7.19.6.1, 7.19.6.3, 7.19.6.8, 7.19.6.10).

— The result of a conversion by one of the formatted input functions cannot be

represented in the corresponding object, or the receiving object does not have an
appropriate type (7.19.6.2, 7.24.2.2).

— A

c

,

s

, or

[

conversion specifier is encountered by one of the formatted input

functions, and the array pointed to by the corresponding argument is not large enough
to accept the input sequence (and a null terminator if the conversion specifier is

s

or

[

) (7.19.6.2, 7.24.2.2).

— A

c

,

s

, or

[

conversion specifier with an

l

qualifier is encountered by one of the

formatted input functions, but the input is not a valid multibyte character sequence
that begins in the initial shift state (7.19.6.2, 7.24.2.2).

— The input item for a

%p

conversion by one of the formatted input functions is not a

value converted earlier during the same program execution (7.19.6.2, 7.24.2.2).

— The

vfprintf

,

vfscanf

,

vprintf

,

vscanf

,

vsnprintf

,

vsprintf

,

vsscanf

,

vfwprintf

,

vfwscanf

,

vswprintf

,

vswscanf

,

vwprintf

, or

vwscanf

function is called with an improperly initialized

va_list

argument, or

the argument is used (other than in an invocation of

va_end

) after the function

returns (7.19.6.8, 7.19.6.9, 7.19.6.10, 7.19.6.11, 7.19.6.12, 7.19.6.13, 7.19.6.14,
7.24.2.5, 7.24.2.6, 7.24.2.7, 7.24.2.8, 7.24.2.9, 7.24.2.10).

— The contents of the array supplied in a call to the

fgets

,

gets

, or

fgetws

function

are used after a read error occurred (7.19.7.2, 7.19.7.7, 7.24.3.2).

502 Portability issues §J.2

— The file position indicator for a binary stream is used after a call to the

ungetc

function where its value was zero before the call (7.19.7.11).

— The file position indicator for a stream is used after an error occurred during a call to

the

fread

or

fwrite

function (7.19.8.1, 7.19.8.2).

— A partial element read by a call to the

fread

function is used (7.19.8.1).

— The

fseek

function is called for a text stream with a nonzero offset and either the

offset was not returned by a previous successful call to the

ftell

function on a

stream associated with the same file or

whence

is not

SEEK_SET

(7.19.9.2).

— The

fsetpos

function is called to set a position that was not returned by a previous

successful call to the

fgetpos

function on a stream associated with the same file

(7.19.9.3).

— A non-null pointer returned by a call to the

calloc

,

malloc

, or

realloc

function

with a zero requested size is used to access an object (7.20.3).

— The value of a pointer that refers to space deallocated by a call to the

free

or

realloc

function is used (7.20.3).

— The pointer argument to the

free

or

realloc

function does not match a pointer

earlier returned by

calloc

,

malloc

, or

realloc

, or the space has been

deallocated by a call to

free

or

realloc

(7.20.3.2, 7.20.3.4).

— The value of the object allocated by the

malloc

function is used (7.20.3.3).

— The value of any bytes in a new object allocated by the

realloc

function beyond

the size of the old object are used (7.20.3.4).

— The program executes more than one call to the

exit

function (7.20.4.3).

— During the call to a function registered with the

atexit

function, a call is made to

the

longjmp

function that would terminate the call to the registered function

(7.20.4.3).

— The string set up by the

getenv

or

strerror

function is modified by the program

(7.20.4.5, 7.21.6.2).

— A command is executed through the

system

function in a way that is documented as

causing termination or some other form of undefined behavior (7.20.4.6).

— A searching or sorting utility function is called with an invalid pointer argument, even

if the number of elements is zero (7.20.5).

— The comparison function called by a searching or sorting utility function alters the

contents of the array being searched or sorted, or returns ordering values
inconsistently (7.20.5).

§J.2 Portability issues 503

— The array being searched by the

bsearch

function does not have its elements in

proper order (7.20.5.1).

— The current conversion state is used by a multibyte/wide character conversion

function after changing the

LC_CTYPE

category (7.20.7).

— A string or wide string utility function is instructed to access an array beyond the end

of an object (7.21.1, 7.24.4).

— A string or wide string utility function is called with an invalid pointer argument, even

if the length is zero (7.21.1, 7.24.4).

— The contents of the destination array are used after a call to the

strxfrm

,

strftime

,

wcsxfrm

, or

wcsftime

function in which the specified length was

too small to hold the entire null-terminated result (7.21.4.5, 7.23.3.5, 7.24.4.4.4,
7.24.5.1).

— The first argument in the very first call to the

strtok

or

wcstok

is a null pointer

(7.21.5.8, 7.24.4.5.7).

— The type of an argument to a type-generic macro is not compatible with the type of

the corresponding parameter of the selected function (7.22).

— A complex argument is supplied for a generic parameter of a type-generic macro that

has no corresponding complex function (7.22).

— The argument corresponding to an

s

specifier without an

l

qualifier in a call to the

fwprintf

function does not point to a valid multibyte character sequence that

begins in the initial shift state (7.24.2.11).

— In a call to the

wcstok

function, the object pointed to by

ptr

does not have the

value stored by the previous call for the same wide string (7.24.4.5.7).

— An

mbstate_t

object is used inappropriately (7.24.6).

— The value of an argument of type

wint_t

to a wide character classification or case

mapping function is neither equal to the value of

WEOF

nor representable as a

wchar_t

(7.25.1).

— The

iswctype

function is called using a different

LC_CTYPE

category from the

one in effect for the call to the

wctype

function that returned the description

(7.25.2.2.1).

— The

towctrans

function is called using a different

LC_CTYPE

category from the

one in effect for the call to the

wctrans

function that returned the description

(7.25.3.2.1).

504 Portability issues §J.2

J.3 Implementation-defined behavior

1

A conforming implementation is required to document its choice of behavior in each of
the areas listed in this subclause. The following are implementation-defined:

J.3.1 Translation

1

— How a diagnostic is identified (3.10, 5.1.1.3).

— Whether each nonempty sequence of white-space characters other than new-line is

retained or replaced by one space character in translation phase 3 (5.1.1.2).

J.3.2 Environment

1

— The mapping between physical source file multibyte characters and the source

character set in translation phase 1 (5.1.1.2).

— The name and type of the function called at program startup in a freestanding

environment (5.1.2.1).

— The effect of program termination in a freestanding environment (5.1.2.1).

— An alternative manner in which the

main

function may be defined (5.1.2.2.1).

— The values given to the strings pointed to by the

argv

argument to

main

(5.1.2.2.1).

— What constitutes an interactive device (5.1.2.3).

— The set of signals, their semantics, and their default handling (7.14).

— Signal values other than

SIGFPE

,

SIGILL

, and

SIGSEGV

that correspond to a

computational exception (7.14.1.1).

— Signals for which the equivalent of

signal(sig, SIG_IGN);

is executed at

program startup (7.14.1.1).

— The set of environment names and the method for altering the environment list used

by the

getenv

function (7.20.4.5).

— The manner of execution of the string by the

system

function (7.20.4.6).

J.3.3 Identifiers

1

— Which additional multibyte characters may appear in identifiers and their

correspondence to universal character names (6.4.2).

— The number of significant initial characters in an identifier (5.2.4.1, 6.4.2).

§J.3.3 Portability issues 505

J.3.4 Characters

1

— The number of bits in a byte (3.6).

— The values of the members of the execution character set (5.2.1).

— The unique value of the member of the execution character set produced for each of

the standard alphabetic escape sequences (5.2.2).

— The value of a

char

object into which has been stored any character other than a

member of the basic execution character set (6.2.5).

— Which of

signed char

or

unsigned char

has the same range, representation,

and behavior as ‘‘plain’’

char

(6.2.5, 6.3.1.1).

— The mapping of members of the source character set (in character constants and string

literals) to members of the execution character set (6.4.4.4, 5.1.1.2).

— The value of an integer character constant containing more than one character or

containing a character or escape sequence that does not map to a single-byte
execution character (6.4.4.4).

— The value of a wide character constant containing more than one multibyte character,

or containing a multibyte character or escape sequence not represented in the
extended execution character set (6.4.4.4).

— The current locale used to convert a wide character constant consisting of a single

multibyte character that maps to a member of the extended execution character set
into a corresponding wide character code (6.4.4.4).

— The current locale used to convert a wide string literal into corresponding wide

character codes (6.4.5).

— The value of a string literal containing a multibyte character or escape sequence not

represented in the execution character set (6.4.5).

J.3.5 Integers

1

— Any extended integer types that exist in the implementation (6.2.5).

— Whether signed integer types are represented using sign and magnitude, two’s

complement, or ones’ complement, and whether the extraordinary value is a trap
representation or an ordinary value (6.2.6.2).

— The rank of any extended integer type relative to another extended integer type with

the same precision (6.3.1.1).

— The result of, or the signal raised by, converting an integer to a signed integer type

when the value cannot be represented in an object of that type (6.3.1.3).

506 Portability issues §J.3.5

— The results of some bitwise operations on signed integers (6.5).

J.3.6 Floating point

1

— The accuracy of the floating-point operations and of the library functions in

<math.h>

and

<complex.h>

that return floating-point results (5.2.4.2.2).

— The accuracy of the conversions between floating-point internal representations and

string representations performed by the library functions in

<stdio.h>

,

<stdlib.h>

, and

<wchar.h>

(5.2.4.2.2).

— The rounding behaviors characterized by non-standard values of

FLT_ROUNDS

(5.2.4.2.2).

— The evaluation methods characterized by non-standard negative values of

FLT_EVAL_METHOD

(5.2.4.2.2).

— The direction of rounding when an integer is converted to a floating-point number that

cannot exactly represent the original value (6.3.1.4).

— The direction of rounding when a floating-point number is converted to a narrower

floating-point number (6.3.1.5).

— How the nearest representable value or the larger or smaller representable value

immediately adjacent to the nearest representable value is chosen for certain floating
constants (6.4.4.2).

— Whether and how floating expressions are contracted when not disallowed by the

FP_CONTRACT

pragma (6.5).

— The default state for the

FENV_ACCESS

pragma (7.6.1).

— Additional floating-point exceptions, rounding modes, environments, and

classifications, and their macro names (7.6, 7.12).

— The default state for the

FP_CONTRACT

pragma (7.12.2).

J.3.7 Arrays and pointers

1

— The result of converting a pointer to an integer or vice versa (6.3.2.3).

— The size of the result of subtracting two pointers to elements of the same array

(6.5.6).

§J.3.7 Portability issues 507

J.3.8 Hints

1

— The extent to which suggestions made by using the

register

storage-class

specifier are effective (6.7.1).

— The extent to which suggestions made by using the

inline

function specifier are

effective (6.7.4).

J.3.9 Structures, unions, enumerations, and bit-fields

1

— Whether a ‘‘plain’’

int

bit-field is treated as a

signed int

bit-field or as an

unsigned int

bit-field (6.7.2, 6.7.2.1).

— Allowable bit-field types other than

_Bool

,

signed int

, and

unsigned int

(6.7.2.1).

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

— The order of allocation of bit-fields within a unit (6.7.2.1).

— The alignment of non-bit-field members of structures (6.7.2.1). This should present

no problem unless binary data written by one implementation is read by another.

— The integer type compatible with each enumerated type (6.7.2.2).

J.3.10 Qualifiers

1

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

J.3.11 Preprocessing directives

1

— The locations within

#pragma

directives where header name preprocessing tokens

are recognized (6.4, 6.4.7).

— How sequences in both forms of header names are mapped to headers or external

source file names (6.4.7).

— Whether the value of a character constant in a constant expression that controls

conditional inclusion matches the value of the same character constant in the
execution character set (6.10.1).

— Whether the value of a single-character character constant in a constant expression

that controls conditional inclusion may have a neg ative value (6.10.1).

— The places that are searched for an included

< >

delimited header, and how the places

are specified or the header is identified (6.10.2).

— How the named source file is searched for in an included

" "

delimited header

(6.10.2).

— The method by which preprocessing tokens (possibly resulting from macro

expansion) in a

#include

directive are combined into a header name (6.10.2).

— The nesting limit for

#include

processing (6.10.2).

— Whether the

#

operator inserts a

\

character before the

\

character that begins a

universal character name in a character constant or string literal (6.10.3.2).

— The behavior on each recognized non-

STDC #pragma

directive (6.10.6).

— The definitions for

_ _DATE_ _

and

_ _TIME_ _

when respectively, the date and

time of translation are not available (6.10.8).

J.3.12 Library functions

1

— Any library facilities available to a freestanding program, other than the minimal set

required by clause 4 (5.1.2.1).

— The format of the diagnostic printed by the

assert

macro (7.2.1.1).

— The representation of the floating-point status flags stored by the

fegetexceptflag

function (7.6.2.2).

— Whether the

feraiseexcept

function raises the ‘‘inexact’’ floating-point

exception in addition to the ‘‘overflow’’ or ‘‘underflow’’ floating-point exception
(7.6.2.3).

— Strings other than

"C"

and

""

that may be passed as the second argument to the

setlocale

function (7.11.1.1).

— The types defined for

float_t

and

double_t

when the value of the

FLT_EVAL_METHOD

macro is less than 0 (7.12).

— Domain errors for the mathematics functions, other than those required by this

International Standard (7.12.1).

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

— The values returned by the mathematics functions on underflow range errors, whether

errno

is set to the value of the macro

ERANGE

when the integer expression

math_errhandling & MATH_ERRNO

is nonzero, and whether the ‘‘underflow’’

floating-point exception is raised when the integer expression

math_errhandling

& MATH_ERREXCEPT

is nonzero. (7.12.1).

— Whether a domain error occurs or zero is returned when an

fmod

function has a

second argument of zero (7.12.10.1).

— Whether a domain error occurs or zero is returned when a

remainder

function has

a second argument of zero (7.12.10.2).

— The base-2 logarithm of the modulus used by the

remquo

functions in reducing the

quotient (7.12.10.3).

— Whether a domain error occurs or zero is returned when a

remquo

function has a

second argument of zero (7.12.10.3).

— Whether the equivalent of

signal(sig, SIG_DFL);

is executed prior to the call

of a signal handler, and, if not, the blocking of signals that is performed (7.14.1.1).

— The null pointer constant to which the macro

NULL

expands (7.17).

— Whether the last line of a text stream requires a terminating new-line character

(7.19.2).

— Whether space characters that are written out to a text stream immediately before a

new-line character appear when read in (7.19.2).

— The number of null characters that may be appended to data written to a binary

stream (7.19.2).

— Whether the file position indicator of an append-mode stream is initially positioned at

the beginning or end of the file (7.19.3).

— Whether a write on a text stream causes the associated file to be truncated beyond that

point (7.19.3).

— The characteristics of file buffering (7.19.3).

— Whether a zero-length file actually exists (7.19.3).

— The rules for composing valid file names (7.19.3).

— Whether the same file can be simultaneously open multiple times (7.19.3).

— The nature and choice of encodings used for multibyte characters in files (7.19.3).

— The effect of the

remove

function on an open file (7.19.4.1).

— The effect if a file with the new name exists prior to a call to the

rename

function

(7.19.4.2).

— Whether an open temporary file is removed upon abnormal program termination

(7.19.4.3).

— Which changes of mode are permitted (if any), and under what circumstances

(7.19.5.4).

— The style used to print an infinity or NaN, and the meaning of any n-char or n-wchar

sequence printed for a NaN (7.19.6.1, 7.24.2.1).

— The output for

%p

conversion in the

fprintf

or

fwprintf

function (7.19.6.1,

7.24.2.1).

— The interpretation of a

-

character that is neither the first nor the last character, nor

the second where a

^

character is the first, in the scanlist for

%[

conversion in the

fscanf

or

fwscanf

function (7.19.6.2, 7.24.2.1).

— The set of sequences matched by a

%p

conversion and the interpretation of the

corresponding input item in the

fscanf

or

fwscanf

function (7.19.6.2, 7.24.2.2).

— The value to which the macro

errno

is set by the

fgetpos

,

fsetpos

, or

ftell

functions on failure (7.19.9.1, 7.19.9.3, 7.19.9.4).

— The meaning of any n-char or n-wchar sequence in a string representing a NaN that is

converted by the

strtod

,

strtof

,

strtold

,

wcstod

,

wcstof

, or

wcstold

function (7.20.1.3, 7.24.4.1.1).

— Whether or not the

strtod

,

strtof

,

strtold

,

wcstod

,

wcstof

, or

wcstold

function sets

errno

to

ERANGE

when underflow occurs (7.20.1.3, 7.24.4.1.1).

— Whether the

calloc

,

malloc

, and

realloc

functions return a null pointer or a

pointer to an allocated object when the size requested is zero (7.20.3).

— Whether open streams with unwritten buffered data are flushed, open streams are

closed, or temporary files are removed when the

abort

or

_Exit

function is called

(7.20.4.1, 7.20.4.4).

— The termination status returned to the host environment by the

abort

,

exit

, or

_Exit

function (7.20.4.1, 7.20.4.3, 7.20.4.4).

— The value returned by the

system

function when its argument is not a null pointer

(7.20.4.6).

— The local time zone and Daylight Saving Time (7.23.1).

— The range and precision of times representable in

clock_t

and

time_t

(7.23).

— The era for the

clock

function (7.23.2.1).

— The replacement string for the

%Z

specifier to the

strftime

, and

wcsftime

functions in the

"C"

locale (7.23.3.5, 7.24.5.1).

— Whether the functions in

<math.h>

honor the rounding direction mode in an

IEC 60559 conformant implementation, unless explicitly specified otherwise (F.9).

J.3.13 Architecture

1

— The values or expressions assigned to the macros specified in the headers

<float.h>

,

<limits.h>

, and

<stdint.h>

(5.2.4.2, 7.18.2, 7.18.3).

— The number, order, and encoding of bytes in any object (when not explicitly specified

in this International Standard) (6.2.6.1).

— The value of the result of the

sizeof

operator (6.5.3.4).

J.4 Locale-specific behavior

1

The following characteristics of a hosted environment are locale-specific and are required
to be documented by the implementation:

— Additional members of the source and execution character sets beyond the basic

character set (5.2.1).

— The presence, meaning, and representation of additional multibyte characters in the

execution character set beyond the basic character set (5.2.1.2).

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

— The direction of writing of successive printing characters (5.2.2).

— The decimal-point character (7.1.1).

— The set of printing characters (7.4, 7.25.2).

— The set of control characters (7.4, 7.25.2).

— The sets of characters tested for by the

isalpha

,

isblank

,

islower

,

ispunct

,

isspace

,

isupper

,

iswalpha

,

iswblank

,

iswlower

,

iswpunct

,

iswspace

, or

iswupper

functions (7.4.1.2, 7.4.1.3, 7.4.1.7, 7.4.1.9, 7.4.1.10,

7.4.1.11, 7.25.2.1.2, 7.25.2.1.3, 7.25.2.1.7, 7.25.2.1.9, 7.25.2.1.10, 7.25.2.1.11).

— The native environment (7.11.1.1).

— Additional subject sequences accepted by the numeric conversion functions (7.20.1,

7.24.4.1).

— The collation sequence of the execution character set (7.21.4.3, 7.24.4.4.2).

— The contents of the error message strings set up by the

strerror

function

(7.21.6.2).

— The formats for time and date (7.23.3.5, 7.24.5.1).

— Character mappings that are supported by the

towctrans

function (7.25.1).

— Character classifications that are supported by the

iswctype

function (7.25.1).

J.5 Common extensions

1

The following extensions are widely used in many systems, but are not portable to all
implementations. The inclusion of any extension that may cause a strictly conforming
program to become invalid renders an implementation nonconforming. Examples of such
extensions are new keywords, extra library functions declared in standard headers, or
predefined macros with names that do not begin with an underscore.

J.5.1 Environment arguments

1

In a hosted environment, the

main

function receives a third argument,

char *envp[]

,

that points to a null-terminated array of pointers to

char

, each of which points to a string

that provides information about the environment for this execution of the program
(5.1.2.2.1).

J.5.2 Specialized identifiers

1

Characters other than the underscore

_

, letters, and digits, that are not part of the basic

source character set (such as the dollar sign

$

, or characters in national character sets)

may appear in an identifier (6.4.2).

J.5.3 Lengths and cases of identifiers

1

All characters in identifiers (with or without external linkage) are significant (6.4.2).

J.5.4 Scopes of identifiers

1

A function identifier, or the identifier of an object the declaration of which contains the
keyword

extern

, has file scope (6.2.1).

J.5.5 Writable string literals

1

String literals are modifiable (in which case, identical string literals should denote distinct
objects) (6.4.5).

J.5.6 Other arithmetic types

1

Additional arithmetic types, such as

_ _int128

or

double double

, and their

appropriate conversions are defined (6.2.5, 6.3.1). Additional floating types may have
more range or precision than

long double

, may be used for evaluating expressions of

other floating types, and may be used to define

float_t

or

double_t

.

J.5.7 Function pointer casts

1

A pointer to an object or to

void

may be cast to a pointer to a function, allowing data to

be invoked as a function (6.5.4).

2

A pointer to a function may be cast to a pointer to an object or to

void

, allowing a

function to be inspected or modified (for example, by a debugger) (6.5.4).

J.5.8 Extended bit-field types

1

A bit-field may be declared with a type other than

_Bool

,

unsigned int

, or

signed int

, with an appropriate maximum width (6.7.2.1).

J.5.9 The

fortran

keyword

1

The

fortran

function specifier may be used in a function declaration to indicate that

calls suitable for FORTRAN should be generated, or that a different representation for the
external name is to be generated (6.7.4).

J.5.10 The

asm

keyword

1

The

asm

keyword may be used to insert assembly language directly into the translator

output (6.8). The most common implementation is via a statement of the form:

asm (

character-string-literal

);

J.5.11 Multiple external definitions

1

There may be more than one external definition for the identifier of an object, with or
without the explicit use of the keyword

extern

; if the definitions disagree, or more than

one is initialized, the behavior is undefined (6.9.2).

J.5.12 Predefined macro names

1

Macro names that do not begin with an underscore, describing the translation and
execution environments, are defined by the implementation before translation begins
(6.10.8).

J.5.13 Floating-point status flags

1

If any floating-point status flags are set on normal termination after all calls to functions
registered by the

atexit

function have been made (see 7.20.4.3), the implementation

writes some diagnostics indicating the fact to the

stderr

stream, if it is still open,

J.5.14 Extra arguments for signal handlers

1

Handlers for specific signals are called with extra arguments in addition to the signal
number (7.14.1.1).

J.5.15 Additional stream types and file-opening modes

1

Additional mappings from files to streams are supported (7.19.2).

2

Additional file-opening modes may be specified by characters appended to the

mode

argument of the

fopen

function (7.19.5.3).

J.5.16 Defined file position indicator

1

The file position indicator is decremented by each successful call to the

ungetc

or

ungetwc

function for a text stream, except if its value was zero before a call (7.19.7.11,

7.24.3.10).

J.5.17 Math error reporting

1

Functions declared in

<complex.h>

and

<math.h>

raise

SIGFPE

to report errors

instead of, or in addition to, setting

errno

or raising floating-point exceptions (7.3,

7.12).

Bibliography

1.

‘‘The C Reference Manual’’ by Dennis M. Ritchie, a version of which was
published in The C Programming Language by Brian W. Kernighan and Dennis
M. Ritchie, Prentice-Hall, Inc., (1978). Copyright owned by AT&T.

2.

1984 /usr/group Standard by the /usr/group Standards Committee, Santa Clara,
California, USA, November 1984.

3.

ANSI X3/TR−1−82 (1982), American National Dictionary for Information
Processing Systems
, Information Processing Systems Technical Report.

4.

ANSI/IEEE 754−1985, American National Standard for Binary Floating-Point
Arithmetic
.

5.

ANSI/IEEE 854−1988, American National Standard for Radix-Independent
Floating-Point Arithmetic
.

6.

IEC 60559:1989, Binary floating-point arithmetic for microprocessor systems,
second edition 
(previously designated IEC 559:1989).

7.

ISO 31−11:1992, Quantities and units — Part 11: Mathematical signs and
symbols for use in the physical sciences and technology
.

8.

ISO/IEC 646:1991, Information technology —

ISO

7-bit coded character set for

information interchange.

9.

ISO/IEC 2382−1:1993, Information technology — Vocabulary — Part 1:
Fundamental terms
.

10.

ISO 4217:1995, Codes for the representation of currencies and funds.

11.

ISO 8601:1988, Data elements and interchange formats — Information
interchange — Representation of dates and times
.

12.

ISO/IEC 9899:1990, Programming languages — C.

13.

ISO/IEC 9899/COR1:1994, Technical Corrigendum 1.

14.

ISO/IEC 9899/COR2:1996, Technical Corrigendum 2.

15.

ISO/IEC 9899/AMD1:1995, Amendment 1 to ISO/IEC 9899:1990 C Integrity.

16.

ISO/IEC 9945−2:1993, Information technology — Portable Operating System
Interface (POSIX) — Part 2: Shell and Utilities
.

17.

ISO/IEC TR 10176:1998,

Information technology — Guidelines for the

preparation of programming language standards.

18.

ISO/IEC 10646-1:1993, Information technology — Universal Multiple-Octet
Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane
.

19.

ISO/IEC 10646-1/COR1:1996,

Technical Corrigendum 1 to

ISO/IEC 10646-1:1993.

20.

ISO/IEC 10646-1/COR2:1998,

Technical Corrigendum 2 to

ISO/IEC 10646-1:1993.

21.

ISO/IEC 10646-1/AMD1:1996,

Amendment 1 to ISO/IEC 10646-1:1993

Tr ansformation Format for 16 planes of group 00 (UTF-16).

22.

ISO/IEC 10646-1/AMD2:1996, Amendment 2 to ISO/IEC 10646-1:1993 UCS
Tr ansformation Format 8 (UTF-8)
.

23.

ISO/IEC 10646-1/AMD3:1996, Amendment 3 to ISO/IEC 10646-1:1993.

24.

ISO/IEC 10646-1/AMD4:1996, Amendment 4 to ISO/IEC 10646-1:1993.

25.

ISO/IEC 10646-1/AMD5:1998, Amendment 5 to ISO/IEC 10646-1:1993 Hangul
syllables
.

26.

ISO/IEC 10646-1/AMD6:1997, Amendment 6 to ISO/IEC 10646-1:1993 Tibetan.

27.

ISO/IEC 10646-1/AMD7:1997, Amendment 7 to ISO/IEC 10646-1:1993 33
additional characters
.

28.

ISO/IEC 10646-1/AMD8:1997, Amendment 8 to ISO/IEC 10646-1:1993.

29.

ISO/IEC 10646-1/AMD9:1997,

Amendment 9 to ISO/IEC 10646-1:1993

Identifiers for characters.

30.

ISO/IEC 10646-1/AMD10:1998,

Amendment 10 to ISO/IEC 10646-1:1993

Ethiopic.

31.

ISO/IEC 10646-1/AMD11:1998,

Amendment 11 to ISO/IEC 10646-1:1993

Unified Canadian Aboriginal Syllabics.

32.

ISO/IEC 10646-1/AMD12:1998,

Amendment 12 to ISO/IEC 10646-1:1993

Cherokee.

33.

ISO/IEC 10967−1:1994, Information technology — Language independent
arithmetic — Part 1: Integer and floating point arithmetic
.

 

 

 

 

 

 

 

Content      ..     16      17      18