From: nsz Date: Wed, 12 Sep 2012 07:24:36 +0000 (+0200) Subject: manually fix n1570.html, fix x^y in cpow for n1256.html X-Git-Url: http://nsz.repo.hu/git/?p=c-standard;a=commitdiff_plain;h=a195b77776bc262f52deca83fea5d60b1f7953e7 manually fix n1570.html, fix x^y in cpow for n1256.html --- diff --git a/n1256.html b/n1256.html index c628b68..074474e 100644 --- a/n1256.html +++ b/n1256.html @@ -9495,7 +9495,7 @@ unsigned long long int

Description

2 - The cpow functions compute the complex power function xy , with a branch cut for the + The cpow functions compute the complex power function xy , with a branch cut for the first parameter along the negative real axis.

Returns

3 diff --git a/n1570.html b/n1570.html index c2dd904..a756b02 100644 --- a/n1570.html +++ b/n1570.html @@ -842,8 +842,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

3.3

1 argument
- actual argument - actual parameter (deprecated) + actual argument
+ actual parameter (deprecated)
expression in the comma-separated list bounded by the parentheses in a function call expression, or a sequence of preprocessing tokens in the comma-separated list bounded by the parentheses in a function-like macro invocation @@ -1130,7 +1130,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

Contents

3.20

1 - [^ x^]
+ [^ x ^]
ceiling of x: the least integer greater than or equal to x

2 EXAMPLE [^2.4^] is 3, [^-2.4^] is -2. @@ -1139,7 +1139,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

Contents

3.21

1 - [_ x_]
+ [_ x _]
floor of x: the greatest integer less than or equal to x

2 EXAMPLE [_2.4_] is 2, [_-2.4_] is -3. @@ -1176,7 +1176,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

6 The two forms of conforming implementation are hosted and freestanding. A conforming hosted implementation shall accept any strictly conforming program. A conforming - freestanding implementation shall accept any strictly conforming program in which the * + freestanding implementation shall accept any strictly conforming program in which the use of the features specified in the library clause (clause 7) is confined to the contents of the standard headers <float.h>, <iso646.h>, <limits.h>, <stdalign.h>, <stdarg.h>, <stdbool.h>, <stddef.h>, <stdint.h>, and @@ -1882,22 +1882,22 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. Both the basic source and basic execution character sets shall have the following members: the 26 uppercase letters of the Latin alphabet

-         A    B   C      D   E     F   G   H    I    J    K    L   M
-         N    O   P      Q   R     S   T   U    V    W    X    Y   Z
+         A   B   C   D   E   F   G   H   I   J   K   L   M
+         N   O   P   Q   R   S   T   U   V   W   X   Y   Z
 
the 26 lowercase letters of the Latin alphabet
-         a    b   c      d   e     f   g   h    i    j    k    l   m
-         n    o   p      q   r     s   t   u    v    w    x    y   z
+         a   b   c   d   e   f   g   h   i   j   k   l   m
+         n   o   p   q   r   s   t   u   v   w   x   y   z
 
the 10 decimal digits
-         0    1   2      3   4     5   6   7    8    9
+         0   1   2   3   4   5   6   7   8   9
 
the following 29 graphic characters
-         !    "   #      %   &     '   (   )    *    +    ,    -   .    /    :
-         ;    <   =      >   ?     [   \   ]    ^    _    {    |   }    ~
+         !   "   #   %   &   '   (   )   *   +   ,   -   .   /   :
+         ;   <   =   >   ?   [   \   ]   ^   _   {   |   }   ~
 
the space character, and control characters representing horizontal tab, vertical tab, and form feed. The representation of each member of the source and execution basic @@ -2003,29 +2003,23 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

2 Alphabetic escape sequences representing nongraphic characters in the execution character set are intended to produce actions on display devices as follows: - \a (alert) Produces an audible or visible alert without changing the active position. - \b (backspace) Moves the active position to the previous position on the current line. If -

+
+
\a
(alert) Produces an audible or visible alert without changing the active position. +
\b
(backspace) Moves the active position to the previous position on the current line. If the active position is at the initial position of a line, the behavior of the display device is unspecified. -
- \f ( form feed) Moves the active position to the initial position at the start of the next -
+
\f
(form feed) Moves the active position to the initial position at the start of the next logical page. -
- \n (new line) Moves the active position to the initial position of the next line. - \r (carriage return) Moves the active position to the initial position of the current line. - \t (horizontal tab) Moves the active position to the next horizontal tabulation position -
+
\n
(new line) Moves the active position to the initial position of the next line. +
\r
(carriage return) Moves the active position to the initial position of the current line. +
\t
(horizontal tab) Moves the active position to the next horizontal tabulation position on the current line. If the active position is at or past the last defined horizontal tabulation position, the behavior of the display device is unspecified. -
- \v (vertical tab) Moves the active position to the initial position of the next vertical +
\v
(vertical tab) Moves the active position to the initial position of the next vertical -
     tabulation position. If the active position is at or past the last defined vertical
       tabulation position, the behavior of the display device is unspecified.
-
+

3 Each of these escape sequences shall produce a unique implementation-defined value which can be stored in a single char object. The external representations in a text file @@ -2068,14 +2062,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. character)

  • 31 significant initial characters in an external identifier (each universal character name specifying a short identifier of 0000FFFF or less is considered 6 characters, each - - -
         universal character name specifying a short identifier of 00010000 or more is
         considered 10 characters, and each extended source character is considered the same
         number of characters as the corresponding universal character name, if any)19)
    -
  • 4095 external identifiers in one translation unit
  • 511 identifiers with block scope declared in one block
  • 4095 macro identifiers simultaneously defined in one preprocessing translation unit @@ -2122,51 +2112,89 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. (absolute value) to those shown, with the same sign.
    • number of bits for smallest object that is not a bit-field (byte) +
        CHAR_BIT                                            8
      +
    • minimum value for an object of type signed char - SCHAR_MIN -127 // -(27 - 1) +
      + SCHAR_MIN                                -127 // -(27 - 1)
      +
    • maximum value for an object of type signed char - SCHAR_MAX +127 // 27 - 1 +
      + SCHAR_MAX                                +127 // 27 - 1
      +
    • maximum value for an object of type unsigned char - UCHAR_MAX 255 // 28 - 1 +
      + UCHAR_MAX                                 255 // 28 - 1
      +
    • minimum value for an object of type char - CHAR_MIN see below +
      + CHAR_MIN                              see below
      +
    • maximum value for an object of type char +
        CHAR_MAX                              see below
      +
    • maximum number of bytes in a multibyte character, for any supported locale +
        MB_LEN_MAX                                    1
      +
    • minimum value for an object of type short int - SHRT_MIN -32767 // -(215 - 1) +
      + SHRT_MIN                               -32767 // -(215 - 1)
      +
    • maximum value for an object of type short int - SHRT_MAX +32767 // 215 - 1 +
      + SHRT_MAX                               +32767 // 215 - 1
      +
    • maximum value for an object of type unsigned short int - USHRT_MAX 65535 // 216 - 1 +
      + USHRT_MAX                               65535 // 216 - 1
      +
    • minimum value for an object of type int - INT_MIN -32767 // -(215 - 1) +
      + INT_MIN                                -32767 // -(215 - 1)
      +
    • maximum value for an object of type int - INT_MAX +32767 // 215 - 1 +
      + INT_MAX                                +32767 // 215 - 1
      +
    • maximum value for an object of type unsigned int - UINT_MAX 65535 // 216 - 1 +
      + UINT_MAX                                65535 // 216 - 1
      +
    • minimum value for an object of type long int - LONG_MIN -2147483647 // -(231 - 1) +
      + LONG_MIN                         -2147483647 // -(231 - 1)
      +
    • maximum value for an object of type long int - LONG_MAX +2147483647 // 231 - 1 +
      + LONG_MAX                         +2147483647 // 231 - 1
      +
    • maximum value for an object of type unsigned long int - ULONG_MAX 4294967295 // 232 - 1 +
      + ULONG_MAX                         4294967295 // 232 - 1
      +
    • minimum value for an object of type long long int - LLONG_MIN -9223372036854775807 // -(263 - 1) +
      + LLONG_MIN          -9223372036854775807 // -(263 - 1)
      +
    • maximum value for an object of type long long int - LLONG_MAX +9223372036854775807 // 263 - 1 +
      + LLONG_MAX          +9223372036854775807 // 263 - 1
      +
    • maximum value for an object of type unsigned long long int - ULLONG_MAX 18446744073709551615 // 264 - 1 +
      + ULLONG_MAX         18446744073709551615 // 264 - 1
      +

    2 If the value of an object of type char is treated as a signed integer when used in an expression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and the value of CHAR_MAX shall be the same as that of SCHAR_MAX. Otherwise, the value of CHAR_MIN shall be 0 and the value of CHAR_MAX shall be the same as that of - UCHAR_MAX.20) The value UCHAR_MAX shall equal 2CHAR_BIT - 1. + UCHAR_MAX.20) The value UCHAR_MAX shall equal 2CHAR_BIT - 1.

    Forward references: representations of types (6.2.6), conditional inclusion (6.10.1).

    Footnotes @@ -2185,22 +2213,21 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. b base or radix of exponent representation (an integer > 1) e exponent (an integer between a minimum emin and a maximum emax ) p precision (the number of base-b digits in the significand) - fk nonnegative integers less than b (the significand digits) + fk nonnegative integers less than b (the significand digits)

    2 A floating-point number (x) is defined by the following model:

                         p
    -        x = sb e   (Sum) f k b-k ,
    +        x = s be (Sum) fk b-k ,   emin <= e <= emax
                        k=1
    -                                 emin <= e <= emax
     

    3 - In addition to normalized floating-point numbers ( f 1 > 0 if x != 0), floating types may be + In addition to normalized floating-point numbers ( f1 > 0 if x != 0), floating types may be able to contain other kinds of floating-point numbers, such as subnormal floating-point - numbers (x != 0, e = emin , f 1 = 0) and unnormalized floating-point numbers (x != 0, - e > emin , f 1 = 0), and values that are not floating-point numbers, such as infinities and + numbers (x != 0, e = emin , f1 = 0) and unnormalized floating-point numbers (x != 0, + e > emin , f1 = 0), and values that are not floating-point numbers, such as infinities and NaNs. A NaN is an encoding signifying Not-a-Number. A quiet NaN propagates through almost every arithmetic operation without raising a floating-point exception; a signaling NaN generally raises a floating-point exception when occurring as an @@ -2231,8 +2258,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. All integer values in the <float.h> header, except FLT_ROUNDS, shall be constant expressions suitable for use in #if preprocessing directives; all floating values shall be constant expressions. All except DECIMAL_DIG, FLT_EVAL_METHOD, FLT_RADIX, - and FLT_ROUNDS have separate names for all three floating-point types. The floating- - point model representation is provided for all values except FLT_EVAL_METHOD and + and FLT_ROUNDS have separate names for all three floating-point types. The floating-point + model representation is provided for all values except FLT_EVAL_METHOD and FLT_ROUNDS.

    8 The rounding mode for floating-point addition is characterized by the implementation- @@ -2256,14 +2283,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. may be greater than required by the type. The use of evaluation formats is characterized by the implementation-defined value of FLT_EVAL_METHOD:24)

    -        -1         indeterminable;
    -          0       evaluate all operations and constants just to the range and precision of the
    +        -1        indeterminable;
    +         0        evaluate all operations and constants just to the range and precision of the
                       type;
    -          1       evaluate operations and constants of type float and double to the
    +         1        evaluate operations and constants of type float and double to the
                       range and precision of the double type, evaluate long double
                       operations and constants to the range and precision of the long double
                       type;
    -          2       evaluate all operations and constants to the range and precision of the
    +         2        evaluate all operations and constants to the range and precision of the
                       long double type.
     
    All other negative values for FLT_EVAL_METHOD characterize implementation-defined @@ -2283,16 +2310,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. those shown, with the same sign:
    • radix of exponent representation, b - FLT_RADIX 2 - - - - +
      + FLT_RADIX                                                  2
      +
    • number of base-FLT_RADIX digits in the floating-point significand, p +
         FLT_MANT_DIG
         DBL_MANT_DIG
         LDBL_MANT_DIG
      +
    • number of decimal digits, n, such that any floating-point number with p radix b digits can be rounded to a floating-point number with n decimal digits and back again without change to the value, @@ -2301,9 +2328,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. { { [^1 + p log10 b^] otherwise +
         FLT_DECIMAL_DIG                                   6
         DBL_DECIMAL_DIG                                  10
         LDBL_DECIMAL_DIG                                 10
      +
    • number of decimal digits, n, such that any floating-point number in the widest supported floating type with pmax radix b digits can be rounded to a floating-point number with n decimal digits and back again without change to the value, @@ -2312,7 +2341,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. { { [^1 + pmax log10 b^] otherwise +
         DECIMAL_DIG                                     10
      +
    • number of decimal digits, q, such that any floating-point number with q decimal digits can be rounded into a floating-point number with p radix b digits and back again without change to the q decimal digits, @@ -2320,24 +2351,26 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. { p log10 b if b is a power of 10 { { [_( p - 1) log10 b_] otherwise - + FLT_DIG 6 DBL_DIG 10 LDBL_DIG 10 +
    • minimum negative integer such that FLT_RADIX raised to one less than that power is a normalized floating-point number, emin +
         FLT_MIN_EXP
         DBL_MIN_EXP
         LDBL_MIN_EXP
      +
    • minimum negative integer such that 10 raised to that power is in the range of - normalized floating-point numbers, [^log10 b emin -1 ^] + normalized floating-point numbers, [^log10 bemin-1^]
      -                                   [                  ]
      -
      FLT_MIN_10_EXP -37 DBL_MIN_10_EXP -37 LDBL_MIN_10_EXP -37 +
    • maximum integer such that FLT_RADIX raised to one less than that power is a representable finite floating-point number, emax
      @@ -2346,7 +2379,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
           LDBL_MAX_EXP
       
    • maximum integer such that 10 raised to that power is in the range of representable - finite floating-point numbers, [_log10 ((1 - b- p )b emax )_] + finite floating-point numbers, [_log10 ((1 - b-p)bemax)_]
           FLT_MAX_10_EXP                               +37
           DBL_MAX_10_EXP                               +37
      @@ -2357,7 +2390,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
        The values given in the following list shall be replaced by constant expressions with
        implementation-defined values that are greater than or equal to those shown:
       
        -
      • maximum representable finite floating-point number, (1 - b- p )b emax +
      • maximum representable finite floating-point number, (1 - b-p)bemax
             FLT_MAX                                   1E+37
             DBL_MAX                                   1E+37
        @@ -2369,13 +2402,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
          implementation-defined (positive) values that are less than or equal to those shown:
         
        • the difference between 1 and the least value greater than 1 that is representable in the - given floating point type, b1- p + given floating point type, b1-p
               FLT_EPSILON                                1E-5
               DBL_EPSILON                                1E-9
               LDBL_EPSILON                               1E-9
           
          -
        • minimum normalized positive floating-point number, b emin -1 +
        • minimum normalized positive floating-point number, bemin-1
               FLT_MIN                                   1E-37
          @@ -2397,11 +2430,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
            float:
           
                               6
          -       x = s16e    (Sum) f k 16-k ,
          +       x = s 16e (Sum) fk 16-k ,   -31 <= e <= +32
                              k=1
          -                                   -31 <= e <= +32
           
          -
                    FLT_RADIX                                    16
                    FLT_MANT_DIG                                  6
          @@ -2422,18 +2453,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
            <float.h> header for types float and double:
           
                              24
          -       x f = s2e   (Sum) f k 2-k ,
          +       xf = s 2e (Sum) fk 2-k ,   -125 <= e <= +128
                              k=1
          -                                  -125 <= e <= +128
           
          -
                              53
          -       x d = s2e   (Sum) f k 2-k ,
          +       xd = s 2e (Sum) fk 2-k ,   -1021 <= e <= +1024
                              k=1
          -                                  -1021 <= e <= +1024
           
          -
                    FLT_RADIX                                     2
                    DECIMAL_DIG                                  17
          @@ -3039,12 +3066,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
            represented by successive bits are additive, begin with 1, and are multiplied by successive integral
            powers of 2, except perhaps the bit with the highest position. (Adapted from the American National
            Dictionary for Information Processing Systems.) A byte contains CHAR_BIT bits, and the values of
          - type unsigned char range from 0 to 2
          -
          -
          -                                           CHAR_BIT
          -                                                     - 1.
          -
          + type unsigned char range from 0 to 2CHAR_BIT - 1.

          50) Thus, an automatic variable can be initialized to a trap representation without causing undefined behavior, but the value of the variable cannot be used until a proper value is stored in it. @@ -3064,8 +3086,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. For unsigned integer types other than unsigned char, the bits of the object representation shall be divided into two groups: value bits and padding bits (there need not be any of the latter). If there are N value bits, each bit shall represent a different - power of 2 between 1 and 2 N -1 , so that objects of that type shall be capable of - representing values from 0 to 2 N - 1 using a pure binary representation; this shall be + power of 2 between 1 and 2N - 1, so that objects of that type shall be capable of + representing values from 0 to 2N - 1 using a pure binary representation; this shall be known as the value representation. The values of any padding bits are unspecified.53)

          2 For signed integer types, the bits of the object representation shall be divided into three @@ -3080,8 +3102,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. following ways:

          • the corresponding value with sign bit 0 is negated (sign and magnitude); -
          • the sign bit has the value -(2 M ) (two's complement); -
          • the sign bit has the value -(2 M - 1) (ones' complement). +
          • the sign bit has the value -(2M) (two's complement); +
          • the sign bit has the value -(2M- 1) (ones' complement).
          Which of these applies is implementation-defined, as is whether the value with sign bit 1 and all value bits zero (for the first two), or with sign bit and all value bits 1 (for ones' @@ -3413,33 +3435,35 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. the result, whose type domain is the type domain of the operands if they are the same, and complex otherwise. This pattern is called the usual arithmetic conversions: -
          -       First, if the corresponding real type of either operand is long double, the other
          +
            +
          • First, if the corresponding real type of either operand is long double, the other operand is converted, without change of type domain, to a type whose corresponding real type is long double. - Otherwise, if the corresponding real type of either operand is double, the other +
          • Otherwise, if the corresponding real type of either operand is double, the other operand is converted, without change of type domain, to a type whose corresponding real type is double. - Otherwise, if the corresponding real type of either operand is float, the other +
          • Otherwise, if the corresponding real type of either operand is float, the other operand is converted, without change of type domain, to a type whose corresponding real type is float.62) - Otherwise, the integer promotions are performed on both operands. Then the +
          • Otherwise, the integer promotions are performed on both operands. Then the following rules are applied to the promoted operands: - If both operands have the same type, then no further conversion is needed. - Otherwise, if both operands have signed integer types or both have unsigned +
              +
            • If both operands have the same type, then no further conversion is needed. +
            • Otherwise, if both operands have signed integer types or both have unsigned integer types, the operand with the type of lesser integer conversion rank is converted to the type of the operand with greater rank. - Otherwise, if the operand that has unsigned integer type has rank greater or +
            • Otherwise, if the operand that has unsigned integer type has rank greater or equal to the rank of the type of the other operand, then the operand with signed integer type is converted to the type of the operand with unsigned integer type. - Otherwise, if the type of the operand with signed integer type can represent +
            • Otherwise, if the type of the operand with signed integer type can represent all of the values of the type of the operand with unsigned integer type, then the operand with unsigned integer type is converted to the type of the operand with signed integer type. - Otherwise, both operands are converted to the unsigned integer type +
            • Otherwise, both operands are converted to the unsigned integer type corresponding to the type of the operand with signed integer type. -
          +
        +

      2 The values of floating operands and of the results of floating expressions may be represented in greater range and precision than that required by the type; the types are not @@ -3666,7 +3690,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      1

                 keyword: one of
      -                auto                        * if                             unsigned
      +                auto                          if                             unsigned
                       break                         inline                         void
                       case                          int                            volatile
                       char                          long                           while
      @@ -3710,12 +3734,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                        universal-character-name
                        other implementation-defined characters
                 nondigit: one of
      -                 _ a b            c    d    e    f     g    h    i    j     k    l    m
      -                     n o          p    q    r    s     t    u    v    w     x    y    z
      -                     A B          C    D    E    F     G    H    I    J     K    L    M
      -                     N O          P    Q    R    S     T    U    V    W     X    Y    Z
      +                 _   a   b   c   d   e   f   g   h   i   j   k   l   m
      +                     n   o   p   q   r   s   t   u   v   w   x   y   z
      +                     A   B   C   D   E   F   G   H   I   J   K   L   M
      +                     N   O   P   Q   R   S   T   U   V   W   X   Y   Z
                 digit: one of
      -                 0 1        2     3    4    5    6     7    8    9
      +                 0   1   2   3   4   5   6   7   8   9
       

      Semantics

      2 @@ -3866,39 +3890,39 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

                 integer-constant:
      -                  decimal-constant integer-suffixopt
      -                  octal-constant integer-suffixopt
      -                  hexadecimal-constant integer-suffixopt
      +                decimal-constant integer-suffixopt
      +                octal-constant integer-suffixopt
      +                hexadecimal-constant integer-suffixopt
                 decimal-constant:
                       nonzero-digit
                       decimal-constant digit
                 octal-constant:
      -                 0
      -                 octal-constant octal-digit
      +                0
      +                octal-constant octal-digit
                 hexadecimal-constant:
                       hexadecimal-prefix hexadecimal-digit
                       hexadecimal-constant hexadecimal-digit
                 hexadecimal-prefix: one of
      -                0x 0X
      +                0x   0X
                 nonzero-digit: one of
      -                 1 2 3 4          5     6     7   8    9
      +                1   2   3   4   5   6   7   8   9
                 octal-digit: one of
      -                  0 1 2 3         4     5     6   7
      -         hexadecimal-digit:   one of
      -               0 1 2           3 4     5    6   7     8   9
      -               a b c           d e     f
      -               A B C           D E     F
      -         integer-suffix:
      -                 unsigned-suffix long-suffixopt
      -                 unsigned-suffix long-long-suffix
      -                 long-suffix unsigned-suffixopt
      -                 long-long-suffix unsigned-suffixopt
      -         unsigned-suffix: one of
      -                u U
      -         long-suffix: one of
      -                l L
      -         long-long-suffix: one of
      -                ll LL
      +                0   1   2   3   4   5   6   7
      +          hexadecimal-digit: one of
      +                0   1   2   3   4   5   6   7   8   9
      +                a   b   c   d   e   f
      +                A   B   C   D   E   F
      +          integer-suffix:
      +                unsigned-suffix long-suffixopt
      +                unsigned-suffix long-long-suffix
      +                long-suffix unsigned-suffixopt
      +                long-long-suffix unsigned-suffixopt
      +          unsigned-suffix: one of
      +                u   U
      +          long-suffix: one of
      +                l   L
      +          long-long-suffix: one of
      +                ll   LL
       

      Description

      2 @@ -3918,43 +3942,69 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. The type of an integer constant is the first of the corresponding list in which its value can be represented. -

      -                                                                  Octal or Hexadecimal
      -
      - Suffix Decimal Constant Constant - - none int int -
      -                     long int                               unsigned int
      -                     long long int                          long int
      -                                                            unsigned long int
      -                                                            long long int
      -                                                            unsigned long long int
      -
      - - u or U unsigned int unsigned int -
      -                     unsigned long int                      unsigned long int
      -                     unsigned long long int                 unsigned long long int
      -
      - - l or L long int long int -
      -                     long long int                          unsigned long int
      -                                                            long long int
      -                                                            unsigned long long int
      -
      - - Both u or U unsigned long int unsigned long int - and l or L unsigned long long int unsigned long long int - - ll or LL long long int long long int -
      -                                                            unsigned long long int
      -
      - - Both u or U unsigned long long int unsigned long long int - and ll or LL + +
      Suffix Decimal Constant Octal or Hexadecimal Constant +
      none +
      +int
      +long int
      +long long int
      +
      +
      +int
      +unsigned int
      +long int
      +unsigned long int
      +long long int
      +unsigned long long int
      +
      +
      u or U +
      +unsigned int
      +unsigned long int
      +unsigned long long int
      +
      +
      +unsigned int
      +unsigned long int
      +unsigned long long int
      +
      +
      l or L +
      +long int
      +long long int
      +
      +
      +long int
      +unsigned long int
      +long long int
      +unsigned long long int
      +
      +
      Both u or U and l or L +
      +unsigned long int
      +unsigned long long int
      +
      +
      +unsigned long int
      +unsigned long long int
      +
      +
      ll or LL +
      +long long int
      +
      +
      +long long int
      +unsigned long long int
      +
      +
      Both u or U and ll or LL +
      +unsigned long long int
      +
      +
      +unsigned long long int
      +
      +

      6 If an integer constant cannot be represented by any type in its list, it may have an extended integer type, if the extended integer type can represent its value. If all of the @@ -4084,24 +4134,24 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. c-char c-char-sequence c-char c-char: - any member of the source character set except - the single-quote ', backslash \, or new-line character - escape-sequence + any member of the source character set except + the single-quote ', backslash \, or new-line character + escape-sequence escape-sequence: simple-escape-sequence octal-escape-sequence hexadecimal-escape-sequence universal-character-name simple-escape-sequence: one of - \' \" \? \\ - \a \b \f \n \r \t \v + \' \" \? \\ + \a \b \f \n \r \t \v octal-escape-sequence: - \ octal-digit - \ octal-digit octal-digit - \ octal-digit octal-digit octal-digit - hexadecimal-escape-sequence: - \x hexadecimal-digit - hexadecimal-escape-sequence hexadecimal-digit + \ octal-digit + \ octal-digit octal-digit + \ octal-digit octal-digit octal-digit + hexadecimal-escape-sequence: + \x hexadecimal-digit + hexadecimal-escape-sequence hexadecimal-digit

      Description

      2 @@ -4150,13 +4200,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      9 The value of an octal or hexadecimal escape sequence shall be in the range of representable values for the corresponding type: -

      -        Prefix      Corresponding Type
      -        none       unsigned char
      -        L          the unsigned type corresponding to wchar_t
      -        u          char16_t
      -        U          char32_t
      -
      + +
      Prefix Corresponding Type +
      noneunsigned char +
      Lthe unsigned type corresponding to wchar_t +
      uchar16_t +
      Uchar32_t +

      Semantics

      10 An integer character constant has type int. The value of an integer character constant @@ -4221,7 +4271,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      1

                 string-literal:
      -                  encoding-prefixopt " s-char-sequenceopt "
      +                 encoding-prefixopt " s-char-sequenceopt "
                 encoding-prefix:
                        u8
                        u
      @@ -4231,9 +4281,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                        s-char
                        s-char-sequence s-char
                 s-char:
      -                    any member of the source character set except
      -                                 the double-quote ", backslash \, or new-line character
      -                    escape-sequence
      +                 any member of the source character set except
      +                              the double-quote ", backslash \, or new-line character
      +                 escape-sequence
       

      Constraints

      2 @@ -4333,13 +4383,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      1

                 punctuator: one of
      -                 [ ] ( ) { } . ->
      -                 ++ -- & * + - ~ !
      -                 / % << >> < > <= >=                             ==       !=    ^    |   &&   ||
      -                 ? : ; ...
      -                 = *= /= %= += -= <<=                            >>=       &=       ^=   |=
      -                 , # ##
      -                 <: :> <% %> %: %:%:
      +                 [   ]   (   )   {   }   .   ->
      +                 ++   --   &   *   +   -   ~   !
      +                 /   %   <<   >>   <   >   <=   >=   ==   !=   ^   |   &&   ||
      +                 ?   :   ;   ...
      +                 =   *=   /=   %=   +=   -=   <<=   >>=   &=   ^=   |=
      +                 ,   #   ##
      +                 <:   :>   <%   %>   %:   %:%:
       

      Semantics

      2 @@ -5525,14 +5575,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. greater than or equal to the width of the promoted left operand, the behavior is undefined.

      4 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with - zeros. If E1 has an unsigned type, the value of the result is E1 x 2E2 , reduced modulo + zeros. If E1 has an unsigned type, the value of the result is E1 x 2E2 , reduced modulo one more than the maximum value representable in the result type. If E1 has a signed - type and nonnegative value, and E1 x 2E2 is representable in the result type, then that is + type and nonnegative value, and E1 x 2E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.

      5 The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a nonnegative value, the value of the result is the integral - part of the quotient of E1 / 2E2 . If E1 has a signed type and a negative value, the + part of the quotient of E1 / 2E2 . If E1 has a signed type and a negative value, the resulting value is implementation-defined.

      Contents @@ -5845,7 +5895,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. conditional-expression unary-expression assignment-operator assignment-expression assignment-operator: one of - = *= /= %= += -= <<= >>= &= ^= |= + = *= /= %= += -= <<= >>= &= ^= |=

      Constraints

      2 @@ -6517,10 +6567,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      21 Following the above declaration:

      -          struct s t1 = { 0 };                         //   valid
      -          struct s t2 = { 1, { 4.2 }};                 //   invalid
      -          t1.n = 4;                                    //   valid
      -          t1.d[0] = 4.2;                               //   might be undefined behavior
      +          struct s t1 = { 0 };                       //   valid
      +          struct s t2 = { 1, { 4.2 }};               //   invalid
      +          t1.n = 4;                                  //   valid
      +          t1.d[0] = 4.2;                             //   might be undefined behavior
       
      The initialization of t2 is invalid (and violates a constraint) because struct s is treated as if it did not contain member d. The assignment to t1.d[0] is probably undefined behavior, but it is possible that @@ -7789,11 +7839,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                 void copyt(int n)
                 {
      -                typedef int B[n];   //               B is n ints, n evaluated now
      +                typedef int B[n];   //  B is n ints, n evaluated now
                       n += 1;
      -                B a;                //               a is n ints, n without += 1
      -                int b[n];           //               a and b are different sizes
      -                for (int i = 1; i < n;               i++)
      +                B a;                //  a is n ints, n without += 1
      +                int b[n];           //  a and b are different sizes
      +                for (int i = 1; i < n; i++)
                             a[i-1] = b[i];
                 }
       
      @@ -7960,10 +8010,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      26 EXAMPLE 3 The declaration

      -          int y[4][3] =         {
      -                { 1, 3,         5 },
      -                { 2, 4,         6 },
      -                { 3, 5,         7 },
      +          int y[4][3] = {
      +                { 1, 3, 5 },
      +                { 2, 4, 6 },
      +                { 3, 5, 7 },
                 };
       
      is a definition with a fully bracketed initialization: 1, 3, and 5 initialize the first row of y (the array object @@ -8082,10 +8132,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. EXAMPLE 9 Arrays can be initialized to correspond to the elements of an enumeration by using designators:
      -          enum { member_one,           member_two };
      -          const char *nm[] =           {
      -                [member_two]           = "member two",
      -                [member_one]           = "member one",
      +          enum { member_one, member_two };
      +          const char *nm[] = {
      +                [member_two] = "member two",
      +                [member_one] = "member one",
                 };
       
      @@ -8544,13 +8594,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. goto lab3; // invalid: going INTO scope of VLA. { double a[n]; - a[j] = 4.4; + a[j] = 4.4; lab3: - a[j] = 3.3; + a[j] = 3.3; goto lab4; // valid: going WITHIN scope of VLA. - a[j] = 5.5; + a[j] = 5.5; lab4: - a[j] = 6.6; + a[j] = 6.6; } goto lab4; // invalid: going INTO scope of VLA. @@ -8566,14 +8616,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. A continue statement causes a jump to the loop-continuation portion of the smallest enclosing iteration statement; that is, to the end of the loop body. More precisely, in each of the statements - while (/* ... */) { do { for (/* ... */) {
      + while (/* ... */) {                  do {                                 for (/* ... */) {
           /* ... */                            /* ... */                            /* ... */
           continue;                            continue;                            continue;
           /* ... */                            /* ... */                            /* ... */
      -
      contin: ; contin: ; contin: ; } } while (/* ... */); } + unless the continue statement shown is in an enclosed iteration statement (in which case it is interpreted within that statement), it is equivalent to goto contin;.159) @@ -9686,36 +9736,26 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
      6.10.8.1 Mandatory macros

      1 The following macro names shall be defined by the implementation: - __DATE__ The date of translation of the preprocessing translation unit: a character -

      +
      +
      __DATE__
      The date of translation of the preprocessing translation unit: a character string literal of the form "Mmm dd yyyy", where the names of the months are the same as those generated by the asctime function, and the first character of dd is a space character if the value is less than 10. If the date of translation is not available, an implementation-defined valid date shall be supplied. -
      - __FILE__ The presumed name of the current source file (a character string literal).177) - __LINE__ The presumed line number (within the current source file) of the current -
      +
      __FILE__
      The presumed name of the current source file (a character string literal).177) +
      __LINE__
      The presumed line number (within the current source file) of the current source line (an integer constant).177) -
      - __STDC__ The integer constant 1, intended to indicate a conforming implementation. - __STDC_HOSTED__ The integer constant 1 if the implementation is a hosted -
      +
      __STDC__
      The integer constant 1, intended to indicate a conforming implementation. +
      __STDC_HOSTED__
      The integer constant 1 if the implementation is a hosted implementation or the integer constant 0 if it is not. -
      - - - - - __STDC_VERSION__ The integer constant 201ymmL.178) - __TIME__ The time of translation of the preprocessing translation unit: a character -
      +
      __STDC_VERSION__
      The integer constant 201ymmL.178) +
      __TIME__
      The time of translation of the preprocessing translation unit: a character string literal of the form "hh:mm:ss" as in the time generated by the asctime function. If the time of translation is not available, an implementation-defined valid time shall be supplied. -
      +

      Forward references: the asctime function (7.27.3.1).

      Footnotes @@ -9731,8 +9771,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      6.10.8.2 Environment macros

      1 The following macro names are conditionally defined by the implementation: - __STDC_ISO_10646__ An integer constant of the form yyyymmL (for example, -

      +
      +
      __STDC_ISO_10646__
      An integer constant of the form yyyymmL (for example, 199712L). If this symbol is defined, then every character in the Unicode required set, when stored in an object of type wchar_t, has the same value as the short identifier of that character. The Unicode required set @@ -9740,25 +9780,19 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. all amendments and technical corrigenda, as of the specified year and month. If some other encoding is used, the macro shall not be defined and the actual encoding used is implementation-defined. -
      - __STDC_MB_MIGHT_NEQ_WC__ The integer constant 1, intended to indicate that, in -
      +
      __STDC_MB_MIGHT_NEQ_WC__
      The integer constant 1, intended to indicate that, in the encoding for wchar_t, a member of the basic character set need not have a code value equal to its value when used as the lone character in an integer character constant. -
      - __STDC_UTF_16__ The integer constant 1, intended to indicate that values of type -
      +
      __STDC_UTF_16__
      The integer constant 1, intended to indicate that values of type char16_t are UTF-16 encoded. If some other encoding is used, the macro shall not be defined and the actual encoding used is implementation- defined. -
      - __STDC_UTF_32__ The integer constant 1, intended to indicate that values of type -
      +
      __STDC_UTF_32__
      The integer constant 1, intended to indicate that values of type char32_t are UTF-32 encoded. If some other encoding is used, the macro shall not be defined and the actual encoding used is implementation- defined. -
      +

      Forward references: common definitions (7.19), unicode utilities (7.28). @@ -9770,42 +9804,28 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      6.10.8.3 Conditional feature macros

      1 The following macro names are conditionally defined by the implementation: - __STDC_ANALYZABLE__ The integer constant 1, intended to indicate conformance to -

      +
      +
      __STDC_ANALYZABLE__
      The integer constant 1, intended to indicate conformance to the specifications in annex L (Analyzability). -
      - __STDC_IEC_559__ The integer constant 1, intended to indicate conformance to the -
      +
      __STDC_IEC_559__
      The integer constant 1, intended to indicate conformance to the specifications in annex F (IEC 60559 floating-point arithmetic). -
      - __STDC_IEC_559_COMPLEX__ The integer constant 1, intended to indicate -
      +
      __STDC_IEC_559_COMPLEX__
      The integer constant 1, intended to indicate adherence to the specifications in annex G (IEC 60559 compatible complex arithmetic). -
      - __STDC_LIB_EXT1__ The integer constant 201ymmL, intended to indicate support -
      +
      __STDC_LIB_EXT1__
      The integer constant 201ymmL, intended to indicate support for the extensions defined in annex K (Bounds-checking interfaces).179) -
      - __STDC_NO_ATOMICS__ The integer constant 1, intended to indicate that the -
      +
      __STDC_NO_ATOMICS__
      The integer constant 1, intended to indicate that the implementation does not support atomic types (including the _Atomic type qualifier) and the <stdatomic.h> header. -
      - __STDC_NO_COMPLEX__ The integer constant 1, intended to indicate that the -
      +
      __STDC_NO_COMPLEX__
      The integer constant 1, intended to indicate that the implementation does not support complex types or the <complex.h> header. -
      - __STDC_NO_THREADS__ The integer constant 1, intended to indicate that the -
      +
      __STDC_NO_THREADS__
      The integer constant 1, intended to indicate that the implementation does not support the <threads.h> header. -
      - __STDC_NO_VLA__ The integer constant 1, intended to indicate that the -
      +
      __STDC_NO_VLA__
      The integer constant 1, intended to indicate that the implementation does not support variable length arrays or variably modified types. -
      +

      2 An implementation that defines __STDC_NO_COMPLEX__ shall not define __STDC_IEC_559_COMPLEX__. @@ -10246,7 +10266,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Footnotes

      191) The message written might be of the form: +

         Assertion failed: expression, function abc, file xyz, line nnn.
      +

      Contents @@ -10305,7 +10327,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Footnotes

      192) See ''future library directions'' (7.31.1). -

      193) The imaginary unit is a number i such that i 2 = -1. +

      193) The imaginary unit is a number i such that i2 = -1.

      194) A specification for imaginary types is in informative annex G. @@ -10367,8 +10389,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

            (x + iy) x (u + iv) = (xu - yv) + i(yu + xv)
      -     (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v 2 )
      -     | x + iy | = (sqrt) x 2 + y 2
      +     (x + iy) / (u + iv) = [(xu + yv) + i(yu - xv)]/(u2 + v2 )
      +     | x + iy | = (sqrt)(x2 + y2)
                         -----
       
      where the programmer can determine they are safe. @@ -10683,7 +10705,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Description

      2 - The cpow functions compute the complex power function xy , with a branch cut for the + The cpow functions compute the complex power function xy , with a branch cut for the first parameter along the negative real axis.

      Returns

      3 @@ -11242,9 +11264,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. FE_DFL_ENV represents the default floating-point environment -- the one installed at program startup -

        -
      • and has type ''pointer to const-qualified fenv_t''. It can be used as an argument to -
      + -- and has type ''pointer to const-qualified fenv_t''. It can be used as an argument to <fenv.h> functions that manage the floating-point environment.

      10 Additional implementation-defined environments, with macro definitions beginning with @@ -12064,168 +12084,144 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. strings shall start and end in the initial shift state. The members with type char are nonnegative numbers, any of which can be CHAR_MAX to indicate that the value is not available in the current locale. The members include the following: - char *decimal_point -

      +
      +
      char *decimal_point +
      The decimal-point character used to format nonmonetary quantities. -
      - char *thousands_sep -
      +
      char *thousands_sep +
      The character used to separate groups of digits before the decimal-point character in formatted nonmonetary quantities. -
      - char *grouping -
      +
      char *grouping +
      A string whose elements indicate the size of each group of digits in formatted nonmonetary quantities. -
      - char *mon_decimal_point -
      +
      char *mon_decimal_point +
      The decimal-point used to format monetary quantities. -
      - char *mon_thousands_sep -
      +
      char *mon_thousands_sep +
      The separator for groups of digits before the decimal-point in formatted monetary quantities. -
      - char *mon_grouping -
      +
      char *mon_grouping +
      A string whose elements indicate the size of each group of digits in formatted monetary quantities. -
      - char *positive_sign -
      +
      char *positive_sign +
      The string used to indicate a nonnegative-valued formatted monetary quantity. -
      - char *negative_sign -
      +
      char *negative_sign +
      The string used to indicate a negative-valued formatted monetary quantity. -
      - char *currency_symbol -
      +
      char *currency_symbol +
      The local currency symbol applicable to the current locale. -
      - char frac_digits -
      +
      char frac_digits +
      The number of fractional digits (those after the decimal-point) to be displayed in a locally formatted monetary quantity. -
      - char p_cs_precedes - -
      +
      char p_cs_precedes +
      Set to 1 or 0 if the currency_symbol respectively precedes or succeeds the value for a nonnegative locally formatted monetary quantity. -
      - char n_cs_precedes -
      +
      +
      char n_cs_precedes +
      Set to 1 or 0 if the currency_symbol respectively precedes or succeeds the value for a negative locally formatted monetary quantity. -
      - char p_sep_by_space -
      +
      char p_sep_by_space +
      Set to a value indicating the separation of the currency_symbol, the sign string, and the value for a nonnegative locally formatted monetary quantity. -
      - char n_sep_by_space -
      +
      char n_sep_by_space +
      Set to a value indicating the separation of the currency_symbol, the sign string, and the value for a negative locally formatted monetary quantity. -
      - char p_sign_posn -
      +
      char p_sign_posn +
      Set to a value indicating the positioning of the positive_sign for a nonnegative locally formatted monetary quantity. -
      - char n_sign_posn -
      +
      char n_sign_posn +
      Set to a value indicating the positioning of the negative_sign for a negative locally formatted monetary quantity. -
      - char *int_curr_symbol -
      +
      char *int_curr_symbol +
      The international currency symbol applicable to the current locale. The first three characters contain the alphabetic international currency symbol in accordance with those specified in ISO 4217. The fourth character (immediately preceding the null character) is the character used to separate the international currency symbol from the monetary quantity. -
      - char int_frac_digits -
      +
      char int_frac_digits +
      The number of fractional digits (those after the decimal-point) to be displayed in an internationally formatted monetary quantity. -
      - char int_p_cs_precedes -
      +
      char int_p_cs_precedes +
      Set to 1 or 0 if the int_curr_symbol respectively precedes or succeeds the value for a nonnegative internationally formatted monetary quantity. -
      - char int_n_cs_precedes -
      +
      char int_n_cs_precedes +
      Set to 1 or 0 if the int_curr_symbol respectively precedes or succeeds the value for a negative internationally formatted monetary quantity. -
      - char int_p_sep_by_space - -
      +
      char int_p_sep_by_space +
      Set to a value indicating the separation of the int_curr_symbol, the sign string, and the value for a nonnegative internationally formatted monetary quantity. -
      - char int_n_sep_by_space -
      +
      +
      char int_n_sep_by_space +
      Set to a value indicating the separation of the int_curr_symbol, the sign string, and the value for a negative internationally formatted monetary quantity. -
      - char int_p_sign_posn -
      +
      char int_p_sign_posn +
      Set to a value indicating the positioning of the positive_sign for a nonnegative internationally formatted monetary quantity. -
      - char int_n_sign_posn -
      +
      char int_n_sign_posn +
      Set to a value indicating the positioning of the negative_sign for a negative internationally formatted monetary quantity. -
      +

      4 The elements of grouping and mon_grouping are interpreted according to the following: - CHAR_MAX No further grouping is to be performed. - 0 The previous element is to be repeatedly used for the remainder of the -

      -                 digits.
      -
      - other The integer value is the number of digits that compose the current group. -
      -                 The next element is examined to determine the size of the next group of
      -                 digits before the current group.
      -
      +
      +
      CHAR_MAX
      No further grouping is to be performed. +
      0
      The previous element is to be repeatedly used for the remainder of the + digits. +
      other
      The integer value is the number of digits that compose the current group. + The next element is examined to determine the size of the next group of + digits before the current group. +

      5 The values of p_sep_by_space, n_sep_by_space, int_p_sep_by_space, and int_n_sep_by_space are interpreted according to the following: - 0 No space separates the currency symbol and value. - 1 If the currency symbol and sign string are adjacent, a space separates them from the -

      -       value; otherwise, a space separates the currency symbol from the value.
      -
      - 2 If the currency symbol and sign string are adjacent, a space separates them; -
      +
      +
      0
      No space separates the currency symbol and value. +
      1
      If the currency symbol and sign string are adjacent, a space separates them from the + value; otherwise, a space separates the currency symbol from the value. +
      2
      If the currency symbol and sign string are adjacent, a space separates them; otherwise, a space separates the sign string from the value. -
      + For int_p_sep_by_space and int_n_sep_by_space, the fourth character of int_curr_symbol is used instead of a space.

      6 The values of p_sign_posn, n_sign_posn, int_p_sign_posn, and int_n_sign_posn are interpreted according to the following: - 0 Parentheses surround the quantity and currency symbol. - 1 The sign string precedes the quantity and currency symbol. - 2 The sign string succeeds the quantity and currency symbol. - 3 The sign string immediately precedes the currency symbol. - 4 The sign string immediately succeeds the currency symbol. +

      +
      0
      Parentheses surround the quantity and currency symbol. +
      1
      The sign string precedes the quantity and currency symbol. +
      2
      The sign string succeeds the quantity and currency symbol. +
      3
      The sign string immediately precedes the currency symbol. +
      4
      The sign string immediately succeeds the currency symbol. +

      7 The implementation shall behave as if no library function calls the localeconv @@ -12241,21 +12237,20 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. EXAMPLE 1 The following table illustrates rules which may well be used by four countries to format monetary quantities.

      -                               Local format                                     International format
      -
      + Local format International format - Country Positive Negative Positive Negative + Country Positive Negative Positive Negative Country1 1.234,56 mk -1.234,56 mk FIM 1.234,56 FIM -1.234,56 Country2 L.1.234 -L.1.234 ITL 1.234 -ITL 1.234 - Country3 fl. 1.234,56 fl. -1.234,56 NLG 1.234,56 NLG -1.234,56 + Country3 fl. 1.234,56 fl. -1.234,56 NLG 1.234,56 NLG -1.234,56 Country4 SFrs.1,234.56 SFrs.1,234.56C CHF 1,234.56 CHF 1,234.56C +

      10 For these four countries, the respective values for the monetary members of the structure returned by localeconv could be:

      -                                   Country1              Country2              Country3            Country4
      -
      + Country1 Country2 Country3 Country4 mon_decimal_point "," "" "," "." mon_thousands_sep "." "." "." "," @@ -12278,31 +12273,27 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. int_n_sep_by_space 2 1 2 1 int_p_sign_posn 1 1 1 1 int_n_sign_posn 4 1 4 2 +

      11 EXAMPLE 2 The following table illustrates how the cs_precedes, sep_by_space, and sign_posn members affect the formatted value.

                                                                      p_sep_by_space
      -
      - p_cs_precedes p_sign_posn 0 1 2 - -
      -                 0                    0         (1.25$)            (1.25 $)            (1.25$)
      -                                      1         +1.25$             +1.25 $             + 1.25$
      -                                      2         1.25$+             1.25 $+             1.25$ +
      -                                      3         1.25+$             1.25 +$             1.25+ $
      -                                      4         1.25$+             1.25 $+             1.25$ +
      -
      + p_cs_precedes p_sign_posn 0 1 2 + 0 0 (1.25$) (1.25 $) (1.25$) + 1 +1.25$ +1.25 $ + 1.25$ + 2 1.25$+ 1.25 $+ 1.25$ + + 3 1.25+$ 1.25 +$ 1.25+ $ + 4 1.25$+ 1.25 $+ 1.25$ + -
      -                 1                    0         ($1.25)            ($ 1.25)            ($1.25)
      -                                      1         +$1.25             +$ 1.25             + $1.25
      -                                      2         $1.25+             $ 1.25+             $1.25 +
      -                                      3         +$1.25             +$ 1.25             + $1.25
      -                                      4         $+1.25             $+ 1.25             $ +1.25
      +                 1                    0         ($1.25)            ($ 1.25)            ($1.25)
      +                                      1         +$1.25             +$ 1.25             + $1.25
      +                                      2         $1.25+             $ 1.25+             $1.25 +
      +                                      3         +$1.25             +$ 1.25             + $1.25
      +                                      4         $+1.25             $+ 1.25             $ +1.25
       

      Contents @@ -12931,7 +12922,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. magnitude of x is too large.

      Returns

      3 - The exp functions return ex . + The exp functions return ex.

      Contents

      7.12.6.2 The exp2 functions
      @@ -12950,7 +12941,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Returns

      3 - The exp2 functions return 2x . + The exp2 functions return 2x.

      Contents

      7.12.6.3 The expm1 functions
      @@ -12968,7 +12959,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. error occurs if x is too large.237)

      Returns

      3 - The expm1 functions return ex - 1. + The expm1 functions return ex - 1.

      Footnotes

      237) For small magnitude x, expm1(x) is expected to be more accurate than exp(x) - 1. @@ -12992,7 +12983,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      3 If value is not a floating-point number or if the integral power of 2 is outside the range of int, the results are unspecified. Otherwise, the frexp functions return the value x, - such that x has a magnitude in the interval [1/2, 1) or zero, and value equals x x 2*exp . + such that x has a magnitude in the interval [1/2, 1) or zero, and value equals x 2*exp. If value is zero, both parts of the result are zero. @@ -13039,7 +13030,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. range error may occur.

      Returns

      3 - The ldexp functions return x x 2exp . + The ldexp functions return x 2exp.

      Contents

      7.12.6.7 The log functions
      @@ -13140,7 +13131,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. format. If x is subnormal it is treated as though it were normalized; thus, for positive finite x,
      -       1 <= x x FLT_RADIX-logb(x) < FLT_RADIX
      +       1 <= x x FLT_RADIX-logb(x) < FLT_RADIX
       
      A domain error or pole error may occur if the argument is zero.

      Returns @@ -13182,11 +13173,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Description

      2 - The scalbn and scalbln functions compute x x FLT_RADIXn efficiently, not - normally by computing FLT_RADIXn explicitly. A range error may occur. + The scalbn and scalbln functions compute x FLT_RADIXn efficiently, not + normally by computing FLT_RADIXn explicitly. A range error may occur.

      Returns

      3 - The scalbn and scalbln functions return x x FLT_RADIXn . + The scalbn and scalbln functions return x FLT_RADIXn.

      Contents

      7.12.7 Power and absolute-value functions

      @@ -13206,7 +13197,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. The cbrt functions compute the real cube root of x.

      Returns

      3 - The cbrt functions return x1/3 . + The cbrt functions return x1/3.

      Contents @@ -13243,11 +13234,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      3

      Returns

      4 - The hypot functions return (sqrt)x2 + y2 . -

      -                            -
      -                            -----
      -
      + The hypot functions return (sqrt)(x2 + y2).

      Contents

      7.12.7.4 The pow functions
      @@ -13268,7 +13255,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Returns

      3 - The pow functions return xy . + The pow functions return xy.

      Contents

      7.12.7.5 The sqrt functions
      @@ -13286,11 +13273,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. the argument is less than zero.

      Returns

      3 - The sqrt functions return (sqrt)x. -

      -                           -
      -                           -
      -
      + The sqrt functions return (sqrt)(x).

      Contents

      7.12.8 Error and gamma functions

      @@ -13310,18 +13293,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. The erf functions compute the error function of x.

      Returns

      3 + The erf functions return

      -                                    2        x
      -                                         (integral)       e-t dt.
      -                                                   2
      -
      - The erf functions return erf x = -
      -                                    (sqrt)pi
      -                                    -
      -                                    -    0
      +              2        x
      + erf x =     ---    (integral)  e-t2 dt .
      +          (sqrt)(pi)   0 
       
      -

      Contents

      7.12.8.2 The erfc functions
      @@ -13340,18 +13317,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Returns

      3 + The erfc functions return

      -                                                     2       (inf)
      -                                                         (integral)       e-t dt.
      -                                                                   2
      +                           2       (inf)
      + erfc x = 1 - erf x =     ---    (integral)  e-t2 dt .
      +                       (sqrt)(pi)    x 
       
      - The erfc functions return erfc x = 1 - erf x = -
      -                                                  (sqrt)pi
      -                                                  -
      -                                                  -      x
      -
      -

      Contents

      7.12.8.3 The lgamma functions
      @@ -13621,7 +13592,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      2 The remquo functions compute the same remainder as the remainder functions. In the object pointed to by quo they store a value whose sign is the sign of x/y and whose - magnitude is congruent modulo 2n to the magnitude of the integral quotient of x/y, where + magnitude is congruent modulo 2n to the magnitude of the integral quotient of x/y, where n is an implementation-defined integer greater than or equal to 3.

      Returns

      3 @@ -13745,7 +13716,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      2 The fdim functions determine the positive difference between their arguments:

      -       {x - y if x > y
      +       {x - y  if x > y
              {
              {+0     if x <= y
       
      @@ -13817,12 +13788,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

      Description

      2 - The fma functions compute (x x y) + z, rounded as one ternary operation: they compute + The fma functions compute (x y) + z, rounded as one ternary operation: they compute the value (as if) to infinite precision and round once to the result format, according to the current rounding mode. A range error may occur.

      Returns

      3 - The fma functions return (x x y) + z, rounded as one ternary operation. + The fma functions return (x y) + z, rounded as one ternary operation. @@ -14129,13 +14100,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. expand to positive integer constant expressions with type int and distinct values that are the signal numbers, each corresponding to the specified condition:

      -          SIGABRT abnormal termination, such as is initiated by the abort function
      -          SIGFPE        an erroneous arithmetic operation, such as zero divide or an operation
      -                        resulting in overflow
      -          SIGILL        detection of an invalid function image, such as an invalid instruction
      -          SIGINT        receipt of an interactive attention signal
      -          SIGSEGV an invalid access to storage
      -          SIGTERM a termination request sent to the program
      +          SIGABRT  abnormal termination, such as is initiated by the abort function
      +          SIGFPE   an erroneous arithmetic operation, such as zero divide or an operation
      +                   resulting in overflow
      +          SIGILL   detection of an invalid function image, such as an invalid instruction
      +          SIGINT   receipt of an interactive attention signal
      +          SIGSEGV  an invalid access to storage
      +          SIGTERM  a termination request sent to the program
       

      4 An implementation need not generate any of these signals, except as a result of explicit @@ -14516,13 +14487,13 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

                  atomic_flag
       
      - which is a structure type representing a lock-free, primitive atomic flag; and several * + which is a structure type representing a lock-free, primitive atomic flag; and several atomic analogs of integer types.

      5 In the following synopses:

      • An A refers to one of the atomic types. -
      • A C refers to its corresponding non-atomic type. * +
      • A C refers to its corresponding non-atomic type.
      • An M refers to the type of the other argument for arithmetic operations. For atomic integer types, M is C. For atomic pointer types, M is ptrdiff_t. @@ -14696,28 +14667,24 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. // Thread 1: r1 = atomic_load_explicit(&y, memory_order_relaxed); atomic_store_explicit(&x, r1, memory_order_relaxed); - - -
        +
                    // Thread 2:
                    r2 = atomic_load_explicit(&x, memory_order_relaxed);
                    atomic_store_explicit(&y, 42, memory_order_relaxed);
         
        is allowed to produce r1 == 42 && r2 == 42. The sequence of evaluations justifying this consists of:
        -           atomic_store_explicit(&y, 42,             memory_order_relaxed);
        -           r1 = atomic_load_explicit(&y,             memory_order_relaxed);
        -           atomic_store_explicit(&x, r1,             memory_order_relaxed);
        -           r2 = atomic_load_explicit(&x,             memory_order_relaxed);
        +           atomic_store_explicit(&y, 42, memory_order_relaxed);
        +           r1 = atomic_load_explicit(&y, memory_order_relaxed);
        +           atomic_store_explicit(&x, r1, memory_order_relaxed);
        +           r2 = atomic_load_explicit(&x, memory_order_relaxed);
         
        On the other hand,
                    // Thread 1:
                    r1 = atomic_load_explicit(&y, memory_order_relaxed);
                    atomic_store_explicit(&x, r1, memory_order_relaxed);
        -
        - -
        +
                    // Thread 2:
                    r2 = atomic_load_explicit(&x, memory_order_relaxed);
                    atomic_store_explicit(&y, r2, memory_order_relaxed);
        @@ -14735,9 +14702,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                  r1 = atomic_load_explicit(&x, memory_order_relaxed);
                  if (r1 == 42)
                       atomic_store_explicit(&y, r1, memory_order_relaxed);
        -
        - -
        +
                  // Thread 2:
                  r2 = atomic_load_explicit(&y, memory_order_relaxed);
                  if (r2 == 42)
        @@ -14871,7 +14836,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
         

        Description

        2 The atomic_is_lock_free generic function indicates whether or not the object - pointed to by obj is lock-free. * + pointed to by obj is lock-free.

        Returns

        3 The atomic_is_lock_free generic function returns nonzero (true) if and only if the @@ -14890,47 +14855,48 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        -               Atomic type name                           Direct type
        -           atomic_bool                        _Atomic    _Bool
        -           atomic_char                        _Atomic    char
        -           atomic_schar                       _Atomic    signed char
        -           atomic_uchar                       _Atomic    unsigned char
        -           atomic_short                       _Atomic    short
        -           atomic_ushort                      _Atomic    unsigned short
        -           atomic_int                         _Atomic    int
        -           atomic_uint                        _Atomic    unsigned int
        -           atomic_long                        _Atomic    long
        -           atomic_ulong                       _Atomic    unsigned long
        -           atomic_llong                       _Atomic    long long
        -           atomic_ullong                      _Atomic    unsigned long long
        -           atomic_char16_t                    _Atomic    char16_t
        -           atomic_char32_t                    _Atomic    char32_t
        -           atomic_wchar_t                     _Atomic    wchar_t
        -           atomic_int_least8_t                _Atomic    int_least8_t
        -           atomic_uint_least8_t               _Atomic    uint_least8_t
        -           atomic_int_least16_t               _Atomic    int_least16_t
        -           atomic_uint_least16_t              _Atomic    uint_least16_t
        -           atomic_int_least32_t               _Atomic    int_least32_t
        -           atomic_uint_least32_t              _Atomic    uint_least32_t
        -           atomic_int_least64_t               _Atomic    int_least64_t
        -           atomic_uint_least64_t              _Atomic    uint_least64_t
        -           atomic_int_fast8_t                 _Atomic    int_fast8_t
        -           atomic_uint_fast8_t                _Atomic    uint_fast8_t
        -           atomic_int_fast16_t                _Atomic    int_fast16_t
        -           atomic_uint_fast16_t               _Atomic    uint_fast16_t
        -           atomic_int_fast32_t                _Atomic    int_fast32_t
        -           atomic_uint_fast32_t               _Atomic    uint_fast32_t
        -           atomic_int_fast64_t                _Atomic    int_fast64_t
        -           atomic_uint_fast64_t               _Atomic    uint_fast64_t
        -           atomic_intptr_t                    _Atomic    intptr_t
        -           atomic_uintptr_t                   _Atomic    uintptr_t
        -           atomic_size_t                      _Atomic    size_t
        -           atomic_ptrdiff_t                   _Atomic    ptrdiff_t
        -           atomic_intmax_t                    _Atomic    intmax_t
        -           atomic_uintmax_t                   _Atomic    uintmax_t
        +             Atomic type name                      Direct type
        +
        +           atomic_bool                        _Atomic _Bool
        +           atomic_char                        _Atomic char
        +           atomic_schar                       _Atomic signed char
        +           atomic_uchar                       _Atomic unsigned char
        +           atomic_short                       _Atomic short
        +           atomic_ushort                      _Atomic unsigned short
        +           atomic_int                         _Atomic int
        +           atomic_uint                        _Atomic unsigned int
        +           atomic_long                        _Atomic long
        +           atomic_ulong                       _Atomic unsigned long
        +           atomic_llong                       _Atomic long long
        +           atomic_ullong                      _Atomic unsigned long long
        +           atomic_char16_t                    _Atomic char16_t
        +           atomic_char32_t                    _Atomic char32_t
        +           atomic_wchar_t                     _Atomic wchar_t
        +           atomic_int_least8_t                _Atomic int_least8_t
        +           atomic_uint_least8_t               _Atomic uint_least8_t
        +           atomic_int_least16_t               _Atomic int_least16_t
        +           atomic_uint_least16_t              _Atomic uint_least16_t
        +           atomic_int_least32_t               _Atomic int_least32_t
        +           atomic_uint_least32_t              _Atomic uint_least32_t
        +           atomic_int_least64_t               _Atomic int_least64_t
        +           atomic_uint_least64_t              _Atomic uint_least64_t
        +           atomic_int_fast8_t                 _Atomic int_fast8_t
        +           atomic_uint_fast8_t                _Atomic uint_fast8_t
        +           atomic_int_fast16_t                _Atomic int_fast16_t
        +           atomic_uint_fast16_t               _Atomic uint_fast16_t
        +           atomic_int_fast32_t                _Atomic int_fast32_t
        +           atomic_uint_fast32_t               _Atomic uint_fast32_t
        +           atomic_int_fast64_t                _Atomic int_fast64_t
        +           atomic_uint_fast64_t               _Atomic uint_fast64_t
        +           atomic_intptr_t                    _Atomic intptr_t
        +           atomic_uintptr_t                   _Atomic uintptr_t
        +           atomic_size_t                      _Atomic size_t
        +           atomic_ptrdiff_t                   _Atomic ptrdiff_t
        +           atomic_intmax_t                    _Atomic intmax_t
        +           atomic_uintmax_t                   _Atomic uintmax_t
         

        2 - The semantics of the operations on these types are defined in 7.17.7. * + The semantics of the operations on these types are defined in 7.17.7.

        3 NOTE The representation of atomic integer types need not have the same size as their corresponding @@ -15074,21 +15040,23 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        7.17.7.5 The atomic_fetch and modify generic functions

        1 The following operations perform arithmetic and bitwise computations. All of these - operations are applicable to an object of any atomic integer type. None of these * + operations are applicable to an object of any atomic integer type. None of these operations is applicable to atomic_bool. The key, operator, and computation correspondence is: - key op computation - add + addition - sub - subtraction - or | bitwise inclusive or - xor ^ bitwise exclusive or - and & bitwise and + +
        key op computation +
        add + addition +
        sub - subtraction +
        or | bitwise inclusive or +
        xor ^ bitwise exclusive or +
        and & bitwise and +

        Synopsis

        2

                   #include <stdatomic.h>
        -          C atomic_fetch_key(volatile A *object, M operand);
        -          C atomic_fetch_key_explicit(volatile A *object,
        +          C atomic_fetch_key(volatile A *object, M operand);
        +          C atomic_fetch_key_explicit(volatile A *object,
                        M operand, memory_order order);
         

        Description @@ -15320,11 +15288,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        Contents

        7.20.1.1 Exact-width integer types

        1 - The typedef name intN_t designates a signed integer type with width N , no padding + The typedef name intN_t designates a signed integer type with width N , no padding bits, and a two's complement representation. Thus, int8_t denotes such a signed integer type with a width of exactly 8 bits.

        2 - The typedef name uintN_t designates an unsigned integer type with width N and no + The typedef name uintN_t designates an unsigned integer type with width N and no padding bits. Thus, uint24_t denotes such an unsigned integer type with a width of exactly 24 bits.

        3 @@ -15335,11 +15303,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        Contents

        7.20.1.2 Minimum-width integer types

        1 - The typedef name int_leastN_t designates a signed integer type with a width of at + The typedef name int_leastN_t designates a signed integer type with a width of at least N , such that no signed integer type with lesser size has at least the specified width. Thus, int_least32_t denotes a signed integer type with a width of at least 32 bits.

        2 - The typedef name uint_leastN_t designates an unsigned integer type with a width + The typedef name uint_leastN_t designates an unsigned integer type with a width of at least N , such that no unsigned integer type with lesser size has at least the specified width. Thus, uint_least16_t denotes an unsigned integer type with a width of at least 16 bits. @@ -15359,8 +15327,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. Each of the following types designates an integer type that is usually fastest262) to operate with among all integer types that have at least the specified width.

        2 - The typedef name int_fastN_t designates the fastest signed integer type with a width - of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer + The typedef name int_fastN_t designates the fastest signed integer type with a width + of at least N . The typedef name uint_fastN_t designates the fastest unsigned integer type with a width of at least N . @@ -15436,14 +15404,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        • minimum values of exact-width signed integer types
          -     INTN_MIN                                  exactly -(2 N -1 )
          +     INTN_MIN                                  exactly -(2N-1)
           
        • maximum values of exact-width signed integer types
          -     INTN_MAX                                  exactly 2 N -1 - 1
          +     INTN_MAX                                  exactly 2N-1 - 1
           
        • maximum values of exact-width unsigned integer types - UINTN_MAX exactly 2 N - 1 +
          +     UINTN_MAX                                 exactly 2N - 1
          +

        Contents @@ -15452,14 +15422,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        • minimum values of minimum-width signed integer types
          -     INT_LEASTN_MIN                                    -(2 N -1 - 1)
          +     INT_LEASTN_MIN                                    -(2N-1 - 1)
           
        • maximum values of minimum-width signed integer types
          -     INT_LEASTN_MAX                                    2 N -1 - 1
          +     INT_LEASTN_MAX                                    2N-1 - 1
           
        • maximum values of minimum-width unsigned integer types - UINT_LEASTN_MAX 2N - 1 +
          +     UINT_LEASTN_MAX                                    2N - 1
          +

        Contents @@ -15468,12 +15440,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        • minimum values of fastest minimum-width signed integer types
          -     INT_FASTN_MIN                                     -(2 N -1 - 1)
          +     INT_FASTN_MIN                                     -(2N-1 - 1)
           
        • maximum values of fastest minimum-width signed integer types - INT_FASTN_MAX 2 N -1 - 1 +
          +     INT_FASTN_MAX                                      2N-1 - 1
          +
        • maximum values of fastest minimum-width unsigned integer types - UINT_FASTN_MAX 2N - 1 +
          +     UINT_FASTN_MAX                                     2N - 1
          +

        Contents @@ -15482,25 +15458,35 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        • minimum value of pointer-holding signed integer type
          -     INTPTR_MIN                                        -(215 - 1)
          +     INTPTR_MIN                                        -(215 - 1)
           
        • maximum value of pointer-holding signed integer type - INTPTR_MAX 215 - 1 +
          +     INTPTR_MAX                                         215 - 1
          +
        • maximum value of pointer-holding unsigned integer type - UINTPTR_MAX 216 - 1 - +
          +     UINTPTR_MAX                                        216 - 1
          +
        +

        Contents

        7.20.2.5 Limits of greatest-width integer types

        1

        • minimum value of greatest-width signed integer type - INTMAX_MIN -(263 - 1) +
          +   INTMAX_MIN                                                    -(263 - 1)
          +
        • maximum value of greatest-width signed integer type - INTMAX_MAX 263 - 1 +
          +   INTMAX_MAX                                                    263 - 1
          +
        • maximum value of greatest-width unsigned integer type - UINTMAX_MAX 264 - 1 +
          +   UINTMAX_MAX                                                   264 - 1
          +

        Contents @@ -15518,24 +15504,30 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. actually provides.263)

        • limits of ptrdiff_t +
              PTRDIFF_MIN                                                 -65535
              PTRDIFF_MAX                                                 +65535
          +
        • limits of sig_atomic_t +
              SIG_ATOMIC_MIN                                              see below
              SIG_ATOMIC_MAX                                              see below
          +
        • limit of size_t - SIZE_MAX 65535 +
          +   SIZE_MAX                                                     65535
          +
        • limits of wchar_t +
              WCHAR_MIN                                                   see below
              WCHAR_MAX                                                   see below
          +
        • limits of wint_t - - - - - WINT_MIN see below - WINT_MAX see below +
          +   WINT_MIN                                                    see below
          +   WINT_MAX                                                    see below
          +

        3 If sig_atomic_t (see 7.14) is defined as a signed integer type, the value of @@ -15579,9 +15571,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        Contents

        7.20.4.1 Macros for minimum-width integer constants

        1 - The macro INTN_C(value) shall expand to an integer constant expression - corresponding to the type int_leastN_t. The macro UINTN_C(value) shall expand - to an integer constant expression corresponding to the type uint_leastN_t. For + The macro INTN_C(value) shall expand to an integer constant expression + corresponding to the type int_leastN_t. The macro UINTN_C(value) shall expand + to an integer constant expression corresponding to the type uint_leastN_t. For example, if uint_least64_t is a name for the type unsigned long long int, then UINT64_C(0x123) might expand to the integer constant 0x123ULL. @@ -15856,9 +15848,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        7 At program startup, three text streams are predefined and need not be opened explicitly -

          -
        • standard input (for reading conventional input), standard output (for writing -
        + -- standard input (for reading conventional input), standard output (for writing conventional output), and standard error (for writing diagnostic output). As initially opened, the standard error stream is not fully buffered; the standard input and standard output streams are fully buffered if and only if the stream can be determined not to refer @@ -16099,25 +16089,25 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        3 The argument mode points to a string. If the string is one of the following, the file is open in the indicated mode. Otherwise, the behavior is undefined.271) - r open text file for reading - w truncate to zero length or create text file for writing - wx create text file for writing - a append; open or create text file for writing at end-of-file - rb open binary file for reading - wb truncate to zero length or create binary file for writing - - +

        +
        r
        open text file for reading +
        w
        truncate to zero length or create text file for writing +
        wx
        create text file for writing +
        a
        append; open or create text file for writing at end-of-file +
        rb
        open binary file for reading +
        wb
        truncate to zero length or create binary file for writing - wbx create binary file for writing - ab append; open or create binary file for writing at end-of-file - r+ open text file for update (reading and writing) - w+ truncate to zero length or create text file for update - w+x create text file for update - a+ append; open or create text file for update, writing at end-of-file - r+b or rb+ open binary file for update (reading and writing) - w+b or wb+ truncate to zero length or create binary file for update - w+bx or wb+x create binary file for update - a+b or ab+ append; open or create binary file for update, writing at end-of-file +
        wbx
        create binary file for writing +
        ab
        append; open or create binary file for writing at end-of-file +
        r+
        open text file for update (reading and writing) +
        w+
        truncate to zero length or create text file for update +
        w+x
        create text file for update +
        a+
        append; open or create text file for update, writing at end-of-file +
        r+b or rb+
        open binary file for update (reading and writing) +
        w+b or wb+
        truncate to zero length or create binary file for update +
        w+bx or wb+x
        create binary file for update +
        a+b or ab+
        append; open or create binary file for update, writing at end-of-file +

        4 Opening a file with read mode ('r' as the first character in the mode argument) fails if the file does not exist or cannot be read. @@ -16321,22 +16311,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. precision were omitted.

        6 The flag characters and their meanings are: - - The result of the conversion is left-justified within the field. (It is right-justified if -

        +
        +
        -
        The result of the conversion is left-justified within the field. (It is right-justified if this flag is not specified.) -
        - + The result of a signed conversion always begins with a plus or minus sign. (It -
        +
        +
        The result of a signed conversion always begins with a plus or minus sign. (It begins with a sign only when a negative value is converted if this flag is not specified.)276) -
        - space If the first character of a signed conversion is not a sign, or if a signed conversion -
        +
        space
        If the first character of a signed conversion is not a sign, or if a signed conversion results in no characters, a space is prefixed to the result. If the space and + flags both appear, the space flag is ignored. -
        - # The result is converted to an ''alternative form''. For o conversion, it increases -
        +
        #
        The result is converted to an ''alternative form''. For o conversion, it increases the precision, if and only if necessary, to force the first digit of the result to be a zero (if the value and precision are both 0, a single 0 is printed). For x (or X) conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g, @@ -16345,97 +16329,73 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. decimal-point character appears in the result of these conversions only if a digit follows it.) For g and G conversions, trailing zeros are not removed from the result. For other conversions, the behavior is undefined. -
        - 0 For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros -
        +
        0
        For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros (following any indication of sign or base) are used to pad to the field width rather than performing space padding, except when converting an infinity or NaN. If the 0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X -
        - - -
                    conversions, if a precision is specified, the 0 flag is ignored. For other
                    conversions, the behavior is undefined.
        -
        +

        7 The length modifiers and their meanings are: - hh Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -

        +
        +
        hh
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a signed char or unsigned char argument (the argument will have been promoted according to the integer promotions, but its value shall be converted to signed char or unsigned char before printing); or that a following n conversion specifier applies to a pointer to a signed char argument. -
        - h Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        h
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a short int or unsigned short int argument (the argument will have been promoted according to the integer promotions, but its value shall be converted to short int or unsigned short int before printing); or that a following n conversion specifier applies to a pointer to a short int argument. -
        - l (ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        l (ell)
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long int or unsigned long int argument; that a following n conversion specifier applies to a pointer to a long int argument; that a following c conversion specifier applies to a wint_t argument; that a following s conversion specifier applies to a pointer to a wchar_t argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion specifier. -
        - ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        ll (ell-ell)
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long long int or unsigned long long int argument; or that a following n conversion specifier applies to a pointer to a long long int argument. -
        - j Specifies that a following d, i, o, u, x, or X conversion specifier applies to -
        +
        j
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to an intmax_t or uintmax_t argument; or that a following n conversion specifier applies to a pointer to an intmax_t argument. -
        - z Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        z
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a size_t or the corresponding signed integer type argument; or that a following n conversion specifier applies to a pointer to a signed integer type corresponding to size_t argument. -
        - t Specifies that a following d, i, o, u, x, or X conversion specifier applies to a +
        t
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
                        ptrdiff_t or the corresponding unsigned integer type argument; or that a
                        following n conversion specifier applies to a pointer to a ptrdiff_t
                        argument.
        -
        - L Specifies that a following a, A, e, E, f, F, g, or G conversion specifier -
        +
        L
        Specifies that a following a, A, e, E, f, F, g, or G conversion specifier applies to a long double argument. -
        + If a length modifier appears with any conversion specifier other than as specified above, the behavior is undefined.

        8 The conversion specifiers and their meanings are: - d,i The int argument is converted to signed decimal in the style [-]dddd. The -

        +
        +
        d,i
        The int argument is converted to signed decimal in the style [-]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no characters. -
        - o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned -
        +
        o,u,x,X
        The unsigned int argument is converted to unsigned octal (o), unsigned decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the letters abcdef are used for x conversion and the letters ABCDEF for X conversion. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no characters. -
        - f,F A double argument representing a floating-point number is converted to -
        +
        f,F
        A double argument representing a floating-point number is converted to decimal notation in the style [-]ddd.ddd, where the number of digits after the decimal-point character is equal to the precision specification. If the precision is missing, it is taken as 6; if the precision is zero and the # flag is @@ -16449,17 +16409,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. any n-char-sequence, is implementation-defined. The F conversion specifier produces INF, INFINITY, or NAN instead of inf, infinity, or nan, respectively.277) -
        - e,E A double argument representing a floating-point number is converted in the -
        +
        e,E
        A double argument representing a floating-point number is converted in the style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the argument is nonzero) before the decimal-point character and the number of digits after it is equal to the precision; if the precision is missing, it is taken as -
        - - -
                        6; if the precision is zero and the # flag is not specified, no decimal-point
                        character appears. The value is rounded to the appropriate number of digits.
                        The E conversion specifier produces a number with E instead of e
        @@ -16468,24 +16422,22 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                        value is zero, the exponent is zero.
                        A double argument representing an infinity or NaN is converted in the style
                        of an f or F conversion specifier.
        -
        - g,G A double argument representing a floating-point number is converted in -
        +
        g,G
        A double argument representing a floating-point number is converted in style f or e (or in style F or E in the case of a G conversion specifier), depending on the value converted and the precision. Let P equal the precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero. Then, if a conversion with style E would have an exponent of X: - -- if P > X >= -4, the conversion is with style f (or F) and precision +
          +
        • if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1). - -- otherwise, the conversion is with style e (or E) and precision P - 1. +
        • otherwise, the conversion is with style e (or E) and precision P - 1. +
        Finally, unless the # flag is used, any trailing zeros are removed from the fractional portion of the result and the decimal-point character is removed if there is no fractional portion remaining. A double argument representing an infinity or NaN is converted in the style of an f or F conversion specifier. -
        - a,A A double argument representing a floating-point number is converted in the -
        +
        a,A
        A double argument representing a floating-point number is converted in the style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is nonzero if the argument is a normalized floating-point number and is otherwise unspecified) before the decimal-point character278) and the number @@ -16493,13 +16445,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. missing and FLT_RADIX is a power of 2, then the precision is sufficient for an exact representation of the value; if the precision is missing and FLT_RADIX is not a power of 2, then the precision is sufficient to -
        - - - - -
                        distinguish279) values of type double, except that trailing zeros may be
                        omitted; if the precision is zero and the # flag is not specified, no decimal-
                        point character appears. The letters abcdef are used for a conversion and
        @@ -16509,18 +16455,14 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                        decimal exponent of 2. If the value is zero, the exponent is zero.
                        A double argument representing an infinity or NaN is converted in the style
                        of an f or F conversion specifier.
        -
        - c If no l length modifier is present, the int argument is converted to an -
        +
        c
        If no l length modifier is present, the int argument is converted to an unsigned char, and the resulting character is written. If an l length modifier is present, the wint_t argument is converted as if by an ls conversion specification with no precision and an argument that points to the initial element of a two-element array of wchar_t, the first element containing the wint_t argument to the lc conversion specification and the second a null wide character. -
        - s If no l length modifier is present, the argument shall be a pointer to the initial -
        +
        s
        If no l length modifier is present, the argument shall be a pointer to the initial element of an array of character type.280) Characters from the array are written up to (but not including) the terminating null character. If the precision is specified, no more than that many bytes are written. If the @@ -16537,29 +16479,20 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. character. If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by -
        - -
                         the precision, the function would need to access a wide character one past the
                         end of the array. In no case is a partial multibyte character written.281)
        -
        - p The argument shall be a pointer to void. The value of the pointer is -
        +
        p
        The argument shall be a pointer to void. The value of the pointer is converted to a sequence of printing characters, in an implementation-defined manner. -
        - n The argument shall be a pointer to signed integer into which is written the -
        +
        n
        The argument shall be a pointer to signed integer into which is written the number of characters written to the output stream so far by this call to fprintf. No argument is converted, but one is consumed. If the conversion specification includes any flags, a field width, or a precision, the behavior is undefined. -
        - % A % character is written. No argument is converted. The complete -
        +
        %
        A % character is written. No argument is converted. The complete conversion specification shall be %%. -
        +

        9 If a conversion specification is invalid, the behavior is undefined.282) If any argument is not the correct type for the corresponding conversion specification, the behavior is @@ -16614,31 +16547,31 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        17 EXAMPLE 2 In this example, multibyte characters do not have a state-dependent encoding, and the members of the extended character set that consist of more than one byte each consist of exactly two bytes, - the first of which is denoted here by a and the second by an uppercase letter. + the first of which is denoted here by a # and the second by an uppercase letter.

        18 Given the following wide string with length seven,

        -          static wchar_t wstr[] = L" X Yabc Z W";
        +          static wchar_t wstr[] = L"#X#Yabc#Z#W";
         
        the seven calls
        -          fprintf(stdout,          "|1234567890123|\n");
        -          fprintf(stdout,          "|%13ls|\n", wstr);
        -          fprintf(stdout,          "|%-13.9ls|\n", wstr);
        -          fprintf(stdout,          "|%13.10ls|\n", wstr);
        -          fprintf(stdout,          "|%13.11ls|\n", wstr);
        -          fprintf(stdout,          "|%13.15ls|\n", &wstr[2]);
        -          fprintf(stdout,          "|%13lc|\n", (wint_t) wstr[5]);
        +          fprintf(stdout, "|1234567890123|\n");
        +          fprintf(stdout, "|%13ls|\n", wstr);
        +          fprintf(stdout, "|%-13.9ls|\n", wstr);
        +          fprintf(stdout, "|%13.10ls|\n", wstr);
        +          fprintf(stdout, "|%13.11ls|\n", wstr);
        +          fprintf(stdout, "|%13.15ls|\n", &wstr[2]);
        +          fprintf(stdout, "|%13lc|\n", (wint_t) wstr[5]);
         
        will print the following seven lines:
                   |1234567890123|
        -          |   X Yabc Z W|
        -          | X Yabc Z    |
        -          |     X Yabc Z|
        -          |   X Yabc Z W|
        -          |      abc Z W|
        -          |            Z|
        +          |  #X#Yabc#Z#W|
        +          |#X#Yabc#Z    |
        +          |    #X#Yabc#Z|
        +          |  #X#Yabc#Z#W|
        +          |      abc#Z#W|
        +          |           #Z|
         

        Forward references: conversion state (7.29.6), the wcrtomb function (7.29.6.3.3). @@ -16744,91 +16677,62 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. in the object, the behavior is undefined.

        11 The length modifiers and their meanings are: - hh Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -

        +
        +
        hh
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to signed char or unsigned char. -
        - h Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        h
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to short int or unsigned short int. -
        - l (ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        l (ell)
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long int or unsigned long int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to an argument with type pointer to double; or that a following c, s, or [ conversion specifier applies to an argument with type pointer to wchar_t. -
        - ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        ll (ell-ell)
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long long int or unsigned long long int. -
        - - - - j Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        j
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to intmax_t or uintmax_t. -
        - z Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        z
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to size_t or the corresponding signed integer type. -
        - t Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        t
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to ptrdiff_t or the corresponding unsigned integer type. -
        - L Specifies that a following a, A, e, E, f, F, g, or G conversion specifier -
        +
        L
        Specifies that a following a, A, e, E, f, F, g, or G conversion specifier applies to an argument with type pointer to long double. -
        + If a length modifier appears with any conversion specifier other than as specified above, the behavior is undefined.

        12 The conversion specifiers and their meanings are: - d Matches an optionally signed decimal integer, whose format is the same as -

        +
        +
        d
        Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. -
        - i Matches an optionally signed integer, whose format is the same as expected -
        +
        i
        Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the strtol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer. -
        - o Matches an optionally signed octal integer, whose format is the same as -
        +
        o
        Matches an optionally signed octal integer, whose format is the same as expected for the subject sequence of the strtoul function with the value 8 for the base argument. The corresponding argument shall be a pointer to unsigned integer. -
        - u Matches an optionally signed decimal integer, whose format is the same as -
        +
        u
        Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtoul function with the value 10 for the base argument. The corresponding argument shall be a pointer to unsigned integer. -
        - x Matches an optionally signed hexadecimal integer, whose format is the same -
        +
        x
        Matches an optionally signed hexadecimal integer, whose format is the same as expected for the subject sequence of the strtoul function with the value 16 for the base argument. The corresponding argument shall be a pointer to unsigned integer. -
        - a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose +
        a,e,f,g
        Matches an optionally signed floating-point number, infinity, or NaN, whose -
                  format is the same as expected for the subject sequence of the strtod
                  function. The corresponding argument shall be a pointer to floating.
        -
        - c Matches a sequence of characters of exactly the number specified by the field -
        +
        c
        Matches a sequence of characters of exactly the number specified by the field width (1 if no field width is present in the directive).286) If no l length modifier is present, the corresponding argument shall be a pointer to the initial element of a character array large enough to accept the @@ -16841,9 +16745,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. corresponding argument shall be a pointer to the initial element of an array of wchar_t large enough to accept the resulting sequence of wide characters. No null wide character is added. -
        - s Matches a sequence of non-white-space characters.286) -
        +
        s
        Matches a sequence of non-white-space characters.286) If no l length modifier is present, the corresponding argument shall be a pointer to the initial element of a character array large enough to accept the sequence and a terminating null character, which will be added automatically. @@ -16855,9 +16757,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. shall be a pointer to the initial element of an array of wchar_t large enough to accept the sequence and the terminating null wide character, which will be added automatically. -
        - [ Matches a nonempty sequence of characters from a set of expected characters -
        +
        [
        Matches a nonempty sequence of characters from a set of expected characters (the scanset).286) If no l length modifier is present, the corresponding argument shall be a pointer to the initial element of a character array large enough to accept the @@ -16866,10 +16766,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. characters that begins in the initial shift state. Each multibyte character is converted to a wide character as if by a call to the mbrtowc function, with the conversion state described by an mbstate_t object initialized to zero -
        - -
                         before the first multibyte character is converted. The corresponding argument
                         shall be a pointer to the initial element of an array of wchar_t large enough
                         to accept the sequence and the terminating null wide character, which will be
        @@ -16886,29 +16783,23 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                         specification. If a - character is in the scanlist and is not the first, nor the
                         second where the first character is a ^, nor the last character, the behavior is
                         implementation-defined.
        -
        - p Matches an implementation-defined set of sequences, which should be the -
        +
        p
        Matches an implementation-defined set of sequences, which should be the same as the set of sequences that may be produced by the %p conversion of the fprintf function. The corresponding argument shall be a pointer to a pointer to void. The input item is converted to a pointer value in an implementation-defined manner. If the input item is a value converted earlier during the same program execution, the pointer that results shall compare equal to that value; otherwise the behavior of the %p conversion is undefined. -
        - n No input is consumed. The corresponding argument shall be a pointer to -
        +
        n
        No input is consumed. The corresponding argument shall be a pointer to signed integer into which is to be written the number of characters read from the input stream so far by this call to the fscanf function. Execution of a %n directive does not increment the assignment count returned at the completion of execution of the fscanf function. No argument is converted, but one is consumed. If the conversion specification includes an assignment- suppressing character or a field width, the behavior is undefined. -
        - % Matches a single % character; no conversion or assignment occurs. The -
        +
        %
        Matches a single % character; no conversion or assignment occurs. The complete conversion specification shall be %%. -
        +

        13 If a conversion specification is invalid, the behavior is undefined.287)

        14 @@ -17010,7 +16901,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. #include <stdio.h> /* ... */ int n, i; - n = sscanf("foo % bar 42", "foo%%bar%d", &i); + n = sscanf("foo % bar 42", "foo%%bar%d", &i);

        will assign to n the value 1 and to i the value 42 because input white-space characters are skipped for both the % and d conversion specifiers. @@ -17018,8 +16909,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        23 EXAMPLE 6 In these examples, multibyte characters do have a state-dependent encoding, and the members of the extended character set that consist of more than one byte each consist of exactly two bytes, - the first of which is denoted here by a and the second by an uppercase letter, but are only recognized as - such when in the alternate shift state. The shift sequences are denoted by (uparrow) and (downarrow), in which the first causes + the first of which is denoted here by a # and the second by an uppercase letter, but are only recognized as + such when in the alternate shift state. The shift sequences are denoted by ^ and $, in which the first causes entry into the alternate shift state.

        24 After the call: @@ -17031,9 +16922,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. with the input line:

        -           a(uparrow) X Y(downarrow) bc
        +           a^#X#Y$ bc
         
        - str will contain (uparrow) X Y(downarrow)\0 assuming that none of the bytes of the shift sequences (or of the multibyte + str will contain ^#X#Y$\0 assuming that none of the bytes of the shift sequences (or of the multibyte characters, in the more general case) appears to be a single-byte white-space character.

        25 In contrast, after the call: @@ -17045,7 +16936,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. wchar_t wstr[50]; fscanf(stdin, "a%ls", wstr); - with the same input line, wstr will contain the two wide characters that correspond to X and Y and a + with the same input line, wstr will contain the two wide characters that correspond to #X and #Y and a terminating null wide character.

        26 However, the call: @@ -17054,19 +16945,19 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. #include <stddef.h> /* ... */ wchar_t wstr[50]; - fscanf(stdin, "a(uparrow) X(downarrow)%ls", wstr); + fscanf(stdin, "a^#X$%ls", wstr); - with the same input line will return zero due to a matching failure against the (downarrow) sequence in the format + with the same input line will return zero due to a matching failure against the $ sequence in the format string.

        27 - Assuming that the first byte of the multibyte character X is the same as the first byte of the multibyte - character Y, after the call: + Assuming that the first byte of the multibyte character #X is the same as the first byte of the multibyte + character #Y, after the call:

                  #include <stdio.h>
                  #include <stddef.h>
                  /* ... */
                  wchar_t wstr[50];
        -         fscanf(stdin, "a(uparrow) Y(downarrow)%ls", wstr);
        +         fscanf(stdin, "a^#Y$%ls", wstr);
         
        with the same input line, zero will again be returned, but stdin will be left with a partially consumed multibyte character. @@ -19550,6 +19441,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                  <math.h>          <complex.h>              type-generic
                   function            function                 macro
        +
                   acos               cacos                    acos
                   asin               casin                    asin
                   atan               catan                    atan
        @@ -19614,6 +19506,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
         
         
                           macro use                                  invokes
        +
                      exp(n)                              exp(n), the function
                      acosh(f)                            acoshf(f)
                      sin(d)                              sin(d), the function
        @@ -19932,10 +19825,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
         

        2 The mtx_init function creates a mutex object with properties indicated by type, which must have one of the six values: - mtx_plain for a simple non-recursive mutex, - mtx_timed for a non-recursive mutex that supports timeout, * - mtx_plain | mtx_recursive for a simple recursive mutex, or - mtx_timed | mtx_recursive for a recursive mutex that supports timeout. +

        +
        mtx_plain
        for a simple non-recursive mutex, +
        mtx_timed
        for a non-recursive mutex that supports timeout, +
        mtx_plain | mtx_recursive
        for a simple recursive mutex, or +
        mtx_timed | mtx_recursive
        for a recursive mutex that supports timeout. +

        3 If the mtx_init function succeeds, it sets the mutex pointed to by mtx to a value that uniquely identifies the newly created mutex. @@ -19959,7 +19854,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. on the same mutex shall synchronize with this operation.

        Returns

        3 - The mtx_lock function returns thrd_success on success, or thrd_error if the * + The mtx_lock function returns thrd_success on success, or thrd_error if the request could not be honored.

        Contents @@ -19994,7 +19889,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        Description

        2 - The mtx_trylock function endeavors to lock the mutex pointed to by mtx. If the * + The mtx_trylock function endeavors to lock the mutex pointed to by mtx. If the mutex is already locked, the function returns without blocking. If the operation succeeds, prior calls to mtx_unlock on the same mutex shall synchronize with this operation.

        Returns @@ -20254,7 +20149,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        Returns

        3 The tss_set function returns thrd_success on success or thrd_error if the - request could not be honored. * + request could not be honored.

        Contents @@ -20270,7 +20165,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. Saving Time, which is a temporary change in the algorithm for determining local time. The local time zone and Daylight Saving Time are implementation-defined.

        2 - The macros defined are NULL (described in 7.19); * + The macros defined are NULL (described in 7.19);

                  CLOCKS_PER_SEC
         
        @@ -20524,23 +20419,18 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. Sun Sep 16 01:03:52 1973\n\0
        using the equivalent of the following algorithm. - char *asctime(const struct tm *timeptr) - {
        -      static const char wday_name[7][3] = {
        -           "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
        -      };
        -      static const char mon_name[12][3] = {
        -           "Jan", "Feb", "Mar", "Apr", "May", "Jun",
        -           "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
        -      };
        -      static char result[26];
        -
        - - - + char *asctime(const struct tm *timeptr) + { + static const char wday_name[7][3] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + static const char mon_name[12][3] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; + static char result[26]; -
                  sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
                       wday_name[timeptr->tm_wday],
                       mon_name[timeptr->tm_mon],
        @@ -20548,8 +20438,8 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                       timeptr->tm_min, timeptr->tm_sec,
                       1900 + timeptr->tm_year);
                  return result;
        +    }
         
        - }

        3 If any of the members of the broken-down time contain values that are outside their normal ranges,323) the behavior of the asctime function is undefined. Likewise, if the @@ -20652,151 +20542,101 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. of the current locale and by the values of zero or more members of the broken-down time structure pointed to by timeptr, as specified in brackets in the description. If any of the specified values is outside the normal range, the characters stored are unspecified. - %a is replaced by the locale's abbreviated weekday name. [tm_wday] - %A is replaced by the locale's full weekday name. [tm_wday] - %b is replaced by the locale's abbreviated month name. [tm_mon] - %B is replaced by the locale's full month name. [tm_mon] - %c is replaced by the locale's appropriate date and time representation. [all specified -

        +
        +
        %a
        is replaced by the locale's abbreviated weekday name. [tm_wday] +
        %A
        is replaced by the locale's full weekday name. [tm_wday] +
        %b
        is replaced by the locale's abbreviated month name. [tm_mon] +
        %B
        is replaced by the locale's full month name. [tm_mon] +
        %c
        is replaced by the locale's appropriate date and time representation. [all specified in 7.27.1] -
        - %C is replaced by the year divided by 100 and truncated to an integer, as a decimal -
        +
        %C
        is replaced by the year divided by 100 and truncated to an integer, as a decimal number (00-99). [tm_year] -
        - %d is replaced by the day of the month as a decimal number (01-31). [tm_mday] - %D is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year] - %e is replaced by the day of the month as a decimal number (1-31); a single digit is -
        +
        %d
        is replaced by the day of the month as a decimal number (01-31). [tm_mday] +
        %D
        is equivalent to ''%m/%d/%y''. [tm_mon, tm_mday, tm_year] +
        %e
        is replaced by the day of the month as a decimal number (1-31); a single digit is preceded by a space. [tm_mday] -
        - %F is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon, -
        +
        %F
        is equivalent to ''%Y-%m-%d'' (the ISO 8601 date format). [tm_year, tm_mon, tm_mday] -
        - %g is replaced by the last 2 digits of the week-based year (see below) as a decimal -
        +
        %g
        is replaced by the last 2 digits of the week-based year (see below) as a decimal number (00-99). [tm_year, tm_wday, tm_yday] -
        - %G is replaced by the week-based year (see below) as a decimal number (e.g., 1997). -
        +
        %G
        is replaced by the week-based year (see below) as a decimal number (e.g., 1997). [tm_year, tm_wday, tm_yday] -
        - %h is equivalent to ''%b''. [tm_mon] - %H is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour] - %I is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour] - %j is replaced by the day of the year as a decimal number (001-366). [tm_yday] - %m is replaced by the month as a decimal number (01-12). [tm_mon] - %M is replaced by the minute as a decimal number (00-59). [tm_min] - %n is replaced by a new-line character. - %p is replaced by the locale's equivalent of the AM/PM designations associated with a -
        +
        %h
        is equivalent to ''%b''. [tm_mon] +
        %H
        is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour] +
        %I
        is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour] +
        %j
        is replaced by the day of the year as a decimal number (001-366). [tm_yday] +
        %m
        is replaced by the month as a decimal number (01-12). [tm_mon] +
        %M
        is replaced by the minute as a decimal number (00-59). [tm_min] +
        %n
        is replaced by a new-line character. +
        %p
        is replaced by the locale's equivalent of the AM/PM designations associated with a 12-hour clock. [tm_hour] -
        - %r is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec] - %R is equivalent to ''%H:%M''. [tm_hour, tm_min] - %S is replaced by the second as a decimal number (00-60). [tm_sec] - %t is replaced by a horizontal-tab character. - %T is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min, -
        +
        %r
        is replaced by the locale's 12-hour clock time. [tm_hour, tm_min, tm_sec] +
        %R
        is equivalent to ''%H:%M''. [tm_hour, tm_min] +
        %S
        is replaced by the second as a decimal number (00-60). [tm_sec] +
        %t
        is replaced by a horizontal-tab character. +
        %T
        is equivalent to ''%H:%M:%S'' (the ISO 8601 time format). [tm_hour, tm_min, tm_sec] -
        - %u is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday -
        +
        %u
        is replaced by the ISO 8601 weekday as a decimal number (1-7), where Monday is 1. [tm_wday] -
        - %U is replaced by the week number of the year (the first Sunday as the first day of week -
        +
        %U
        is replaced by the week number of the year (the first Sunday as the first day of week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday] -
        - %V is replaced by the ISO 8601 week number (see below) as a decimal number +
        %V
        is replaced by the ISO 8601 week number (see below) as a decimal number -
                (01-53). [tm_year, tm_wday, tm_yday]
        -
        - %w is replaced by the weekday as a decimal number (0-6), where Sunday is 0. -
        +
        %w
        is replaced by the weekday as a decimal number (0-6), where Sunday is 0. [tm_wday] -
        - %W is replaced by the week number of the year (the first Monday as the first day of -
        +
        %W
        is replaced by the week number of the year (the first Monday as the first day of week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday] -
        - %x is replaced by the locale's appropriate date representation. [all specified in 7.27.1] - %X is replaced by the locale's appropriate time representation. [all specified in 7.27.1] - %y is replaced by the last 2 digits of the year as a decimal number (00-99). -
        +
        %x
        is replaced by the locale's appropriate date representation. [all specified in 7.27.1] +
        %X
        is replaced by the locale's appropriate time representation. [all specified in 7.27.1] +
        %y
        is replaced by the last 2 digits of the year as a decimal number (00-99). [tm_year] -
        - %Y is replaced by the year as a decimal number (e.g., 1997). [tm_year] - %z is replaced by the offset from UTC in the ISO 8601 format ''-0430'' (meaning 4 -
        +
        %Y
        is replaced by the year as a decimal number (e.g., 1997). [tm_year] +
        %z
        is replaced by the offset from UTC in the ISO 8601 format ''-0430'' (meaning 4 hours 30 minutes behind UTC, west of Greenwich), or by no characters if no time zone is determinable. [tm_isdst] -
        - %Z is replaced by the locale's time zone name or abbreviation, or by no characters if no -
        +
        %Z
        is replaced by the locale's time zone name or abbreviation, or by no characters if no time zone is determinable. [tm_isdst] -
        - %% is replaced by %. +
        %%
        is replaced by %. +

        4 Some conversion specifiers can be modified by the inclusion of an E or O modifier character to indicate an alternative format or specification. If the alternative format or specification does not exist for the current locale, the modifier is ignored. - %Ec is replaced by the locale's alternative date and time representation. - %EC is replaced by the name of the base year (period) in the locale's alternative -

        +
        +
        %Ec
        is replaced by the locale's alternative date and time representation. +
        %EC
        is replaced by the name of the base year (period) in the locale's alternative representation. -
        - %Ex is replaced by the locale's alternative date representation. - %EX is replaced by the locale's alternative time representation. - %Ey is replaced by the offset from %EC (year only) in the locale's alternative -
        +
        %Ex
        is replaced by the locale's alternative date representation. +
        %EX
        is replaced by the locale's alternative time representation. +
        %Ey
        is replaced by the offset from %EC (year only) in the locale's alternative representation. -
        - %EY is replaced by the locale's full alternative year representation. - %Od is replaced by the day of the month, using the locale's alternative numeric symbols -
        +
        %EY
        is replaced by the locale's full alternative year representation. +
        %Od
        is replaced by the day of the month, using the locale's alternative numeric symbols (filled as needed with leading zeros, or with leading spaces if there is no alternative symbol for zero). -
        - %Oe is replaced by the day of the month, using the locale's alternative numeric symbols -
        +
        %Oe
        is replaced by the day of the month, using the locale's alternative numeric symbols (filled as needed with leading spaces). -
        - %OH is replaced by the hour (24-hour clock), using the locale's alternative numeric -
        +
        %OH
        is replaced by the hour (24-hour clock), using the locale's alternative numeric symbols. -
        - %OI is replaced by the hour (12-hour clock), using the locale's alternative numeric -
        +
        %OI
        is replaced by the hour (12-hour clock), using the locale's alternative numeric symbols. -
        - %Om is replaced by the month, using the locale's alternative numeric symbols. - %OM is replaced by the minutes, using the locale's alternative numeric symbols. - %OS is replaced by the seconds, using the locale's alternative numeric symbols. - %Ou is replaced by the ISO 8601 weekday as a number in the locale's alternative +
        %Om
        is replaced by the month, using the locale's alternative numeric symbols. +
        %OM
        is replaced by the minutes, using the locale's alternative numeric symbols. +
        %OS
        is replaced by the seconds, using the locale's alternative numeric symbols. +
        %Ou
        is replaced by the ISO 8601 weekday as a number in the locale's alternative -
              representation, where Monday is 1.
        -
        - %OU is replaced by the week number, using the locale's alternative numeric symbols. - %OV is replaced by the ISO 8601 week number, using the locale's alternative numeric -
        +
        %OU
        is replaced by the week number, using the locale's alternative numeric symbols. +
        %OV
        is replaced by the ISO 8601 week number, using the locale's alternative numeric symbols. -
        - %Ow is replaced by the weekday as a number, using the locale's alternative numeric -
        +
        %Ow
        is replaced by the weekday as a number, using the locale's alternative numeric symbols. -
        - %OW is replaced by the week number of the year, using the locale's alternative numeric -
        +
        %OW
        is replaced by the week number of the year, using the locale's alternative numeric symbols. -
        - %Oy is replaced by the last 2 digits of the year, using the locale's alternative numeric -
        +
        %Oy
        is replaced by the last 2 digits of the year, using the locale's alternative numeric symbols. -
        +

        5 %g, %G, and %V give values according to the ISO 8601 week-based year. In this system, weeks begin on a Monday and week 1 of the year is the week that includes January 4th, @@ -20812,16 +20652,18 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        7 In the "C" locale, the E and O modifiers are ignored and the replacement strings for the following specifiers are: - %a the first three characters of %A. - %A one of ''Sunday'', ''Monday'', ... , ''Saturday''. - %b the first three characters of %B. - %B one of ''January'', ''February'', ... , ''December''. - %c equivalent to ''%a %b %e %T %Y''. - %p one of ''AM'' or ''PM''. - %r equivalent to ''%I:%M:%S %p''. - %x equivalent to ''%m/%d/%y''. - %X equivalent to %T. - %Z implementation-defined. +

        +
        %a
        the first three characters of %A. +
        %A
        one of ''Sunday'', ''Monday'', ... , ''Saturday''. +
        %b
        the first three characters of %B. +
        %B
        one of ''January'', ''February'', ... , ''December''. +
        %c
        equivalent to ''%a %b %e %T %Y''. +
        %p
        one of ''AM'' or ''PM''. +
        %r
        equivalent to ''%I:%M:%S %p''. +
        %x
        equivalent to ''%m/%d/%y''. +
        %X
        equivalent to %T. +
        %Z
        implementation-defined. +

        Returns

        8 If the total number of resulting characters including the terminating null character is not @@ -20892,30 +20734,22 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        4 The mbrtoc16 function returns the first of the following that applies (given the current conversion state): - 0 if the next n or fewer bytes complete the multibyte character that -

        +
        +
        0
        if the next n or fewer bytes complete the multibyte character that corresponds to the null wide character (which is the value stored). -
        - between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte -
        +
        between 1 and n inclusive
        if the next n or fewer bytes complete a valid multibyte character (which is the value stored); the value returned is the number of bytes that complete the multibyte character. -
        - (size_t)(-3) if the next character resulting from a previous call has been stored (no -
        +
        (size_t)(-3)
        if the next character resulting from a previous call has been stored (no bytes from the input have been consumed by this call). -
        - (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid) -
        +
        (size_t)(-2)
        if the next n bytes contribute to an incomplete (but potentially valid) multibyte character, and all n bytes have been processed (no value is stored).324) -
        - (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes -
        +
        (size_t)(-1)
        if an encoding error occurs, in which case the next n or fewer bytes do not contribute to a complete and valid multibyte character (no value is stored); the value of the macro EILSEQ is stored in errno, and the conversion state is unspecified. -
        +

        Footnotes

        324) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a @@ -20985,31 +20819,23 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        4 The mbrtoc32 function returns the first of the following that applies (given the current conversion state): - 0 if the next n or fewer bytes complete the multibyte character that -

        +
        +
        0
        if the next n or fewer bytes complete the multibyte character that corresponds to the null wide character (which is the value stored). -
        - between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte +
        between 1 and n inclusive
        if the next n or fewer bytes complete a valid multibyte -
                             character (which is the value stored); the value returned is the number
                             of bytes that complete the multibyte character.
        -
        - (size_t)(-3) if the next character resulting from a previous call has been stored (no -
        +
        (size_t)(-3)
        if the next character resulting from a previous call has been stored (no bytes from the input have been consumed by this call). -
        - (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid) -
        +
        (size_t)(-2)
        if the next n bytes contribute to an incomplete (but potentially valid) multibyte character, and all n bytes have been processed (no value is stored).325) -
        - (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes -
        +
        (size_t)(-1)
        if an encoding error occurs, in which case the next n or fewer bytes do not contribute to a complete and valid multibyte character (no value is stored); the value of the macro EILSEQ is stored in errno, and the conversion state is unspecified. -
        +

        Footnotes

        325) When n has at least the value of the MB_CUR_MAX macro, this case can only occur if s points at a @@ -21193,29 +21019,17 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. precision were omitted.

        6 The flag wide characters and their meanings are: - - The result of the conversion is left-justified within the field. (It is right-justified if -

        +
        +
        -
        The result of the conversion is left-justified within the field. (It is right-justified if this flag is not specified.) -
        - + The result of a signed conversion always begins with a plus or minus sign. (It -
        +
        +
        The result of a signed conversion always begins with a plus or minus sign. (It begins with a sign only when a negative value is converted if this flag is not -
        - - - - -
                    specified.)331)
        -
        - space If the first wide character of a signed conversion is not a sign, or if a signed -
        +
        space
        If the first wide character of a signed conversion is not a sign, or if a signed conversion results in no wide characters, a space is prefixed to the result. If the space and + flags both appear, the space flag is ignored. -
        - # The result is converted to an ''alternative form''. For o conversion, it increases -
        +
        #
        The result is converted to an ''alternative form''. For o conversion, it increases the precision, if and only if necessary, to force the first digit of the result to be a zero (if the value and precision are both 0, a single 0 is printed). For x (or X) conversion, a nonzero result has 0x (or 0X) prefixed to it. For a, A, e, E, f, F, g, @@ -21224,97 +21038,72 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. decimal-point wide character appears in the result of these conversions only if a digit follows it.) For g and G conversions, trailing zeros are not removed from the result. For other conversions, the behavior is undefined. -
        - 0 For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros -
        +
        0
        For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, leading zeros (following any indication of sign or base) are used to pad to the field width rather than performing space padding, except when converting an infinity or NaN. If the 0 and - flags both appear, the 0 flag is ignored. For d, i, o, u, x, and X conversions, if a precision is specified, the 0 flag is ignored. For other conversions, the behavior is undefined. -
        +

        7 The length modifiers and their meanings are: - hh Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -

        +
        +
        hh
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a signed char or unsigned char argument (the argument will have been promoted according to the integer promotions, but its value shall be converted to signed char or unsigned char before printing); or that a following n conversion specifier applies to a pointer to a signed char argument. -
        - h Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        h
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a short int or unsigned short int argument (the argument will have been promoted according to the integer promotions, but its value shall be converted to short int or unsigned short int before printing); or that a following n conversion specifier applies to a pointer to a short int argument. -
        - l (ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        l (ell)
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long int or unsigned long int argument; that a following n conversion specifier applies to a pointer to a long int argument; that a -
        - - -
                       following c conversion specifier applies to a wint_t argument; that a
                       following s conversion specifier applies to a pointer to a wchar_t
                       argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion
                       specifier.
        -
        - ll (ell-ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        ll (ell-ell)
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long long int or unsigned long long int argument; or that a following n conversion specifier applies to a pointer to a long long int argument. -
        - j Specifies that a following d, i, o, u, x, or X conversion specifier applies to -
        +
        j
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to an intmax_t or uintmax_t argument; or that a following n conversion specifier applies to a pointer to an intmax_t argument. -
        - z Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        z
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a size_t or the corresponding signed integer type argument; or that a following n conversion specifier applies to a pointer to a signed integer type corresponding to size_t argument. -
        - t Specifies that a following d, i, o, u, x, or X conversion specifier applies to a -
        +
        t
        Specifies that a following d, i, o, u, x, or X conversion specifier applies to a ptrdiff_t or the corresponding unsigned integer type argument; or that a following n conversion specifier applies to a pointer to a ptrdiff_t argument. -
        - L Specifies that a following a, A, e, E, f, F, g, or G conversion specifier -
        +
        L
        Specifies that a following a, A, e, E, f, F, g, or G conversion specifier applies to a long double argument. -
        + If a length modifier appears with any conversion specifier other than as specified above, the behavior is undefined.

        8 The conversion specifiers and their meanings are: - d,i The int argument is converted to signed decimal in the style [-]dddd. The -

        +
        d,i
        The int argument is converted to signed decimal in the style [-]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no wide characters. -
        - o,u,x,X The unsigned int argument is converted to unsigned octal (o), unsigned +
        o,u,x,X
        The unsigned int argument is converted to unsigned octal (o), unsigned -
                  decimal (u), or unsigned hexadecimal notation (x or X) in the style dddd; the
                  letters abcdef are used for x conversion and the letters ABCDEF for X
                  conversion. The precision specifies the minimum number of digits to appear;
                  if the value being converted can be represented in fewer digits, it is expanded
                  with leading zeros. The default precision is 1. The result of converting a
                  zero value with a precision of zero is no wide characters.
        -
        - f,F A double argument representing a floating-point number is converted to -
        +
        f,F
        A double argument representing a floating-point number is converted to decimal notation in the style [-]ddd.ddd, where the number of digits after the decimal-point wide character is equal to the precision specification. If the precision is missing, it is taken as 6; if the precision is zero and the # flag is @@ -21328,9 +21117,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. any n-wchar-sequence, is implementation-defined. The F conversion specifier produces INF, INFINITY, or NAN instead of inf, infinity, or nan, respectively.332) -
        - e,E A double argument representing a floating-point number is converted in the -
        +
        e,E
        A double argument representing a floating-point number is converted in the style [-]d.ddd e(+-)dd, where there is one digit (which is nonzero if the argument is nonzero) before the decimal-point wide character and the number of digits after it is equal to the precision; if the precision is missing, it is taken @@ -21342,29 +21129,23 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. value is zero, the exponent is zero. A double argument representing an infinity or NaN is converted in the style of an f or F conversion specifier. -
        - g,G A double argument representing a floating-point number is converted in -
        +
        g,G
        A double argument representing a floating-point number is converted in style f or e (or in style F or E in the case of a G conversion specifier), depending on the value converted and the precision. Let P equal the precision if nonzero, 6 if the precision is omitted, or 1 if the precision is zero. Then, if a conversion with style E would have an exponent of X: - -- if P > X >= -4, the conversion is with style f (or F) and precision +
          +
        • if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1). - -- otherwise, the conversion is with style e (or E) and precision P - 1. +
        • otherwise, the conversion is with style e (or E) and precision P - 1. +
        Finally, unless the # flag is used, any trailing zeros are removed from the -
        - - -
                       fractional portion of the result and the decimal-point wide character is
                       removed if there is no fractional portion remaining.
                       A double argument representing an infinity or NaN is converted in the style
                       of an f or F conversion specifier.
        -
        - a,A A double argument representing a floating-point number is converted in the -
        +
        a,A
        A double argument representing a floating-point number is converted in the style [-]0xh.hhhh p(+-)d, where there is one hexadecimal digit (which is nonzero if the argument is a normalized floating-point number and is otherwise unspecified) before the decimal-point wide character333) and the @@ -21382,24 +21163,17 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. zero. A double argument representing an infinity or NaN is converted in the style of an f or F conversion specifier. -
        - c If no l length modifier is present, the int argument is converted to a wide -
        +
        c
        If no l length modifier is present, the int argument is converted to a wide character as if by calling btowc and the resulting wide character is written. If an l length modifier is present, the wint_t argument is converted to wchar_t and written. -
        - s If no l length modifier is present, the argument shall be a pointer to the initial -
        +
        s
        If no l length modifier is present, the argument shall be a pointer to the initial element of a character array containing a multibyte character sequence beginning in the initial shift state. Characters from the array are converted as if by repeated calls to the mbrtowc function, with the conversion state described by an mbstate_t object initialized to zero before the first multibyte character is converted, and written up to (but not including) the -
        - -
                         terminating null wide character. If the precision is specified, no more than
                         that many wide characters are written. If the precision is not specified or is
                         greater than the size of the converted array, the converted array shall contain a
        @@ -21410,23 +21184,17 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
                         precision is specified, no more than that many wide characters are written. If
                         the precision is not specified or is greater than the size of the array, the array
                         shall contain a null wide character.
        -
        - p The argument shall be a pointer to void. The value of the pointer is -
        +
        p
        The argument shall be a pointer to void. The value of the pointer is converted to a sequence of printing wide characters, in an implementation- defined manner. -
        - n The argument shall be a pointer to signed integer into which is written the -
        +
        n
        The argument shall be a pointer to signed integer into which is written the number of wide characters written to the output stream so far by this call to fwprintf. No argument is converted, but one is consumed. If the conversion specification includes any flags, a field width, or a precision, the behavior is undefined. -
        - % A % wide character is written. No argument is converted. The complete -
        +
        %
        A % wide character is written. No argument is converted. The complete conversion specification shall be %%. -
        +

        9 If a conversion specification is invalid, the behavior is undefined.335) If any argument is not the correct type for the corresponding conversion specification, the behavior is @@ -21583,90 +21351,60 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. represented in the object, the behavior is undefined.

        11 The length modifiers and their meanings are: - hh Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -

        +
        +
        hh
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to signed char or unsigned char. -
        - h Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        h
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to short int or unsigned short int. -
        - l (ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        l (ell)
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long int or unsigned long int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to an argument with type pointer to double; or that a following c, s, or [ conversion specifier applies to an argument with type pointer to wchar_t. -
        - ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        ll (ell-ell)
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long long int or unsigned long long int. -
        - j Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        j
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to intmax_t or uintmax_t. -
        - z Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        z
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to size_t or the corresponding signed integer type. -
        - t Specifies that a following d, i, o, u, x, X, or n conversion specifier applies -
        +
        t
        Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to ptrdiff_t or the corresponding unsigned integer type. -
        - - - L Specifies that a following a, A, e, E, f, F, g, or G conversion specifier -
        +
        L
        Specifies that a following a, A, e, E, f, F, g, or G conversion specifier applies to an argument with type pointer to long double. -
        + If a length modifier appears with any conversion specifier other than as specified above, the behavior is undefined.

        12 The conversion specifiers and their meanings are: - d Matches an optionally signed decimal integer, whose format is the same as -

        +
        d
        Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the wcstol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. -
        - i Matches an optionally signed integer, whose format is the same as expected -
        +
        i
        Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the wcstol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer. -
        - o Matches an optionally signed octal integer, whose format is the same as -
        +
        o
        Matches an optionally signed octal integer, whose format is the same as expected for the subject sequence of the wcstoul function with the value 8 for the base argument. The corresponding argument shall be a pointer to unsigned integer. -
        - u Matches an optionally signed decimal integer, whose format is the same as -
        +
        u
        Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the wcstoul function with the value 10 for the base argument. The corresponding argument shall be a pointer to unsigned integer. -
        - x Matches an optionally signed hexadecimal integer, whose format is the same -
        +
        x
        Matches an optionally signed hexadecimal integer, whose format is the same as expected for the subject sequence of the wcstoul function with the value 16 for the base argument. The corresponding argument shall be a pointer to unsigned integer. -
        - a,e,f,g Matches an optionally signed floating-point number, infinity, or NaN, whose -
        +
        a,e,f,g
        Matches an optionally signed floating-point number, infinity, or NaN, whose format is the same as expected for the subject sequence of the wcstod function. The corresponding argument shall be a pointer to floating. -
        - c Matches a sequence of wide characters of exactly the number specified by the - -
        +
        c
        Matches a sequence of wide characters of exactly the number specified by the field width (1 if no field width is present in the directive). If no l length modifier is present, characters from the input field are converted as if by repeated calls to the wcrtomb function, with the @@ -21675,11 +21413,10 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. shall be a pointer to the initial element of a character array large enough to accept the sequence. No null character is added. If an l length modifier is present, the corresponding argument shall be a + pointer to the initial element of an array of wchar_t large enough to accept the sequence. No null wide character is added. -
        - s Matches a sequence of non-white-space wide characters. -
        +
        s
        Matches a sequence of non-white-space wide characters. If no l length modifier is present, characters from the input field are converted as if by repeated calls to the wcrtomb function, with the conversion state described by an mbstate_t object initialized to zero @@ -21691,10 +21428,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. pointer to the initial element of an array of wchar_t large enough to accept the sequence and the terminating null wide character, which will be added automatically. -
        - [ Matches a nonempty sequence of wide characters from a set of expected - -
        +
        [
        Matches a nonempty sequence of wide characters from a set of expected characters (the scanset). If no l length modifier is present, characters from the input field are converted as if by repeated calls to the wcrtomb function, with the @@ -21718,19 +21452,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. the specification; otherwise the first following right bracket wide character is the one that ends the specification. If a - wide character is in the scanlist and is not the first, nor the second where the first wide character is a ^, nor the + last character, the behavior is implementation-defined. -
        - p Matches an implementation-defined set of sequences, which should be the -
        +
        p
        Matches an implementation-defined set of sequences, which should be the same as the set of sequences that may be produced by the %p conversion of the fwprintf function. The corresponding argument shall be a pointer to a pointer to void. The input item is converted to a pointer value in an implementation-defined manner. If the input item is a value converted earlier during the same program execution, the pointer that results shall compare equal to that value; otherwise the behavior of the %p conversion is undefined. -
        - n No input is consumed. The corresponding argument shall be a pointer to -
        +
        n
        No input is consumed. The corresponding argument shall be a pointer to signed integer into which is to be written the number of wide characters read from the input stream so far by this call to the fwscanf function. Execution of a %n directive does not increment the assignment count returned at the @@ -21738,11 +21469,9 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. converted, but one is consumed. If the conversion specification includes an assignment-suppressing wide character or a field width, the behavior is undefined. -
        - % Matches a single % wide character; no conversion or assignment occurs. The -
        +
        %
        Matches a single % wide character; no conversion or assignment occurs. The complete conversion specification shall be %%. -
        +

        13 If a conversion specification is invalid, the behavior is undefined.339)

        14 @@ -23201,26 +22930,20 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        4 The mbrtowc function returns the first of the following that applies (given the current conversion state): - 0 if the next n or fewer bytes complete the multibyte character that -

        +
        +
        0
        if the next n or fewer bytes complete the multibyte character that corresponds to the null wide character (which is the value stored). -
        - between 1 and n inclusive if the next n or fewer bytes complete a valid multibyte -
        +
        between 1 and n inclusive
        if the next n or fewer bytes complete a valid multibyte character (which is the value stored); the value returned is the number of bytes that complete the multibyte character. -
        - (size_t)(-2) if the next n bytes contribute to an incomplete (but potentially valid) -
        +
        (size_t)(-2)
        if the next n bytes contribute to an incomplete (but potentially valid) multibyte character, and all n bytes have been processed (no value is stored).349) -
        - (size_t)(-1) if an encoding error occurs, in which case the next n or fewer bytes -
        +
        (size_t)(-1)
        if an encoding error occurs, in which case the next n or fewer bytes do not contribute to a complete and valid multibyte character (no value is stored); the value of the macro EILSEQ is stored in errno, and the conversion state is unspecified. -
        + @@ -23975,7 +23698,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        A.1.2 Keywords

        (6.4.1) keyword: one of
        -               auto                     * if                     unsigned
        +               auto                       if                     unsigned
                        break                      inline                 void
                        case                       int                    volatile
                        char                       long                   while
        @@ -24008,15 +23731,15 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
         
        (6.4.2.1) nondigit: one of
        -               _ a b           c    d   e   f   g   h    i   j   k   l   m
        -                    n o        p    q   r   s   t   u    v   w   x   y   z
        -                    A B        C    D   E   F   G   H    I   J   K   L   M
        -                    N O        P    Q   R   S   T   U    V   W   X   Y   Z
        +               _   a   b   c    d   e   f   g   h    i   j   k   l   m
        +                   n   o   p    q   r   s   t   u    v   w   x   y   z
        +                   A   B   C    D   E   F   G   H    I   J   K   L   M
        +                   N   O   P    Q   R   S   T   U    V   W   X   Y   Z
         
        (6.4.2.1) digit: one of
        -                0 1 2          3    4   5   6   7   8    9
        +               0   1   2   3    4   5   6   7   8    9
         

        Contents @@ -25308,7 +25031,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. ATOMIC_FLAG_INIT atomic_int_least16_t memory_order atomic_uint_least16_t atomic_flag atomic_int_least32_t - memory_order_relaxed * atomic_uint_least32_t + memory_order_relaxed atomic_uint_least32_t memory_order_consume atomic_int_least64_t memory_order_acquire atomic_uint_least64_t memory_order_release atomic_int_fast8_t @@ -25724,7 +25447,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

                  thread_local                    once_flag
        -         ONCE_FLAG_INIT                  mtx_plain                     *
        +         ONCE_FLAG_INIT                  mtx_plain
                  TSS_DTOR_ITERATIONS             mtx_recursive
                  cnd_t                           mtx_timed
                  thrd_t                          thrd_timedout
        @@ -26626,51 +26349,33 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
         

        Contents

        F.9.2 Expression transformations

        1 - x/2 <-> x x 0.5 Although similar transformations involving inexact constants -

        +
        +
         x/2 <-> x * 0.5          
        Although similar transformations involving inexact constants generally do not yield numerically equivalent expressions, if the constants are exact then such transformations can be made on IEC 60559 machines and others that round perfectly. - - 1 x x and x/1 -> x The expressions 1 x x, x/1, and x are equivalent (on IEC 60559 -
        +
         1 * x and x/1 -> x 
        The expressions 1*x, x/1, and x are equivalent (on IEC 60559 machines, among others).368) - - x/x -> 1.0 The expressions x/x and 1.0 are not equivalent if x can be zero, -
        +
         x/x -> 1.0             
        The expressions x/x and 1.0 are not equivalent if x can be zero, infinite, or NaN. - - x - y <-> x + (-y) The expressions x - y, x + (-y), and (-y) + x are equivalent (on -
        +
         x - y <-> x + (-y)       
        The expressions x - y, x + (-y), and (-y) + x are equivalent (on IEC 60559 machines, among others). - - x - y <-> -(y - x) The expressions x - y and -(y - x) are not equivalent because 1 - 1 -
        +
         x - y <-> -(y - x)       
        The expressions x - y and -(y - x) are not equivalent because 1 - 1 is +0 but -(1 - 1) is -0 (in the default rounding direction).369) - - x - x -> 0.0 The expressions x - x and 0.0 are not equivalent if x is a NaN or -
        +
         x - x -> 0.0           
        The expressions x - x and 0.0 are not equivalent if x is a NaN or infinite. - - 0 x x -> 0.0 The expressions 0 x x and 0.0 are not equivalent if x is a NaN, -
        +
         0 * x -> 0.0           
        The expressions 0*x and 0.0 are not equivalent if x is a NaN, infinite, or -0. - - x+0-> x The expressions x + 0 and x are not equivalent if x is -0, because -
        +
         x + 0 -> x                 
        The expressions x + 0 and x are not equivalent if x is -0, because (-0) + (+0) yields +0 (in the default rounding direction), not -0. - - x-0-> x (+0) - (+0) yields -0 when rounding is downward (toward -(inf)), but -
        +
         x - 0 -> x                 
        (+0) - (+0) yields -0 when rounding is downward (toward -(inf)), but +0 otherwise, and (-0) - (+0) always yields -0; so, if the state of the FENV_ACCESS pragma is ''off'', promising default rounding, then the implementation can replace x - 0 by x, even if x might be zero. - - -x <-> 0 - x The expressions -x and 0 - x are not equivalent if x is +0, because -
        +
         -x <-> 0 - x             
        The expressions -x and 0 - x are not equivalent if x is +0, because -(+0) yields -0, but 0 - (+0) yields +0 (unless rounding is downward). - +
        @@ -26682,7 +26387,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. Examples include:
        -    1/(1/ (+-) (inf)) is (+-) (inf)
        +    1/(1/(+-)(inf)) is (+-)(inf)
         
        and @@ -26695,17 +26400,17 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        Contents

        F.9.3 Relational operators

        1 - x != x -> false The expression x != x is true if x is a NaN. - x = x -> true The expression x = x is false if x is a NaN. - x < y -> isless(x,y) (and similarly for <=, >, >=) Though numerically equal, these -

        +
        +
         x != x -> false           
        The expression x != x is true if x is a NaN. +
         x == x -> true            
        The expression x = x is false if x is a NaN. +
         x < y -> isless(x,y)
        (and similarly for <=, >, >=)
        Though numerically equal, these expressions are not equivalent because of side effects when x or y is a NaN and the state of the FENV_ACCESS pragma is ''on''. This transformation, which would be desirable if extra code were required to cause the ''invalid'' floating-point exception for unordered cases, could be performed provided the state of the FENV_ACCESS pragma is ''off''. - +
        The sense of relational operators shall be maintained. This includes handling unordered cases as expressed by the source code.

        2 @@ -27644,39 +27349,21 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        2 If the operands are not both complex, then the result and floating-point exception behavior of the * operator is defined by the usual mathematical formula: -

        -        *                  u                   iv                 u + iv
        -
        - -
        -        x                  xu                i(xv)            (xu) + i(xv)
        -
        - -
        -        iy               i(yu)                -yv            (-yv) + i(yu)
        -
        - -
        -        x + iy       (xu) + i(yu)        (-yv) + i(xv)
        -
        + +
        * u iv u + iv +
        x xu i(xv) (xu) + i(xv) +
        iy i(yu) -yv (-yv) + i(yu) +
        x + iy (xu) + i(yu) (-yv) + i(xv) +

        3 If the second operand is not complex, then the result and floating-point exception behavior of the / operator is defined by the usual mathematical formula: -

        -        /                   u                       iv
        -
        - -
        -        x                  x/u                 i(-x/v)
        -
        - -
        -        iy               i(y/u)                     y/v
        -
        - -
        -        x + iy       (x/u) + i(y/u)        (y/v) + i(-x/v)
        -
        + +
        / u iv +
        x x/u i(-x/v) +
        iy i(y/u) y/v +
        x + iy (x/u) + i(y/u) (y/v) + i(-x/v) +

        4 The * and / operators satisfy the following infinity properties for all real, imaginary, and complex operands:377) @@ -27826,21 +27513,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        2 In all cases the result and floating-point exception behavior of a + or - operator is defined by the usual mathematical formula: -

        -        + or -              u                       iv                    u + iv
        -
        - -
        -        x                 x(+-)u                     x (+-) iv              (x (+-) u) (+-) iv
        -
        - -
        -        iy               (+-)u + iy                 i(y (+-) v)             (+-)u + i(y (+-) v)
        -
        - -
        -        x + iy         (x (+-) u) + iy            x + i(y (+-) v)        (x (+-) u) + i(y (+-) v)
        -
        + +
        + or - u iv u + iv +
        x x(+-)u x (+-) iv (x (+-) u) (+-) iv +
        iy (+-)u + iy i(y (+-) v) (+-)u + i(y (+-) v) +
        x + iy (x (+-) u) + iy x + i(y (+-) v) (x (+-) u) + i(y (+-) v) +

        Contents

        G.6 Complex arithmetic <complex.h>

        @@ -28243,11 +27921,11 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. only integer divide-by-zero need be detected.

        2 The parameters for the integer data types can be accessed by the following: - maxint INT_MAX, LONG_MAX, LLONG_MAX, UINT_MAX, ULONG_MAX,

        + maxint        INT_MAX, LONG_MAX, LLONG_MAX, UINT_MAX, ULONG_MAX,
                        ULLONG_MAX
        -
        minint INT_MIN, LONG_MIN, LLONG_MIN +

        3 The parameter ''bounded'' is always true, and is not provided. The parameter ''minint'' is always 0 for the unsigned types, and is not provided for those types. @@ -28257,6 +27935,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        H.2.2.1 Integer operations

        1 The integer operations on integer types are the following: +

          addI           x + y
          subI           x - y
          mulI           x * y
        @@ -28270,6 +27949,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
          leqI           x <= y
          gtrI           x > y
          geqI           x >= y
        +
        where x and y are expressions of the same integer type.

        Contents @@ -28286,22 +27966,26 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        H.2.3.1 Floating-point parameters

        1 The parameters for a floating point data type can be accessed by the following: +

          r              FLT_RADIX
          p              FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG
          emax           FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP
          emin           FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP
        +

        2 The derived constants for the floating point types are accessed by the following: +

          fmax          FLT_MAX, DBL_MAX, LDBL_MAX
          fminN         FLT_MIN, DBL_MIN, LDBL_MIN
          epsilon       FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON
          rnd_style     FLT_ROUNDS
        -
        +

        Contents

        H.2.3.2 Floating-point operations

        1 The floating-point operations on floating-point types are the following: +

          addF          x + y
          subF          x - y
          mulF          x * y
        @@ -28310,9 +27994,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.
          absF          fabsf(x), fabs(x), fabsl(x)
          exponentF     1.f+logbf(x), 1.0+logb(x), 1.L+logbl(x)
          scaleF        scalbnf(x, n), scalbn(x, n), scalbnl(x, n),
        -
                        scalblnf(x, li), scalbln(x, li), scalblnl(x, li)
        -
        intpartF modff(x, &y), modf(x, &y), modfl(x, &y) fractpartF modff(x, &y), modf(x, &y), modfl(x, &y) eqF x == y @@ -28321,6 +28003,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. leqF x <= y gtrF x > y geqF x >= y +
        where x and y are expressions of the same floating point type, n is of type int, and li is of type long int. @@ -28331,10 +28014,12 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. that only one identifier for each is provided to map to LIA-1.

        2 The FLT_ROUNDS parameter can be used to indicate the LIA-1 rounding styles: +

          truncate      FLT_ROUNDS == 0
         
          nearest       FLT_ROUNDS == 1
          other         FLT_ROUNDS != 0 && FLT_ROUNDS != 1
        +
        provided that an implementation extends FLT_ROUNDS to cover the rounding style used in all relevant LIA-1 operations, not just addition as in C. @@ -28342,18 +28027,16 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        H.2.4 Type conversions

        1 The LIA-1 type conversions are the following type casts: - cvtI' -> I (int)i, (long int)i, (long long int)i,

        + cvtI' -> I     (int)i, (long int)i, (long long int)i,
                        (unsigned int)i, (unsigned long int)i,
                        (unsigned long long int)i
        -
        cvtF -> I (int)x, (long int)x, (long long int)x, -
                        (unsigned int)x, (unsigned long int)x,
                        (unsigned long long int)x
        -
        cvtI -> F (float)i, (double)i, (long double)i cvtF' -> F (float)x, (double)x, (long double)x +

        2 In the above conversions from floating to integer, the use of (cast)x can be replaced with (cast)round(x), (cast)rint(x), (cast)nearbyint(x), (cast)trunc(x), @@ -28413,15 +28096,19 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. C's <fenv.h> status flags are compatible with the LIA-1 indicators.

        2 The following mapping is for floating-point types: +

          undefined                FE_INVALID, FE_DIVBYZERO
          floating_overflow         FE_OVERFLOW
          underflow                FE_UNDERFLOW
        +

        3 The floating-point indicator interrogation and manipulation operations are: +

          set_indicators          feraiseexcept(i)
          clear_indicators        feclearexcept(i)
          test_indicators         fetestexcept(i)
          current_indicators      fetestexcept(FE_ALL_EXCEPT)
        +
        where i is an expression of type int representing a subset of the LIA-1 indicators.

        4 C allows an implementation to provide the following LIA-1 required behavior: at @@ -29991,42 +29678,28 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''.

        5 The mode string shall be as described for fopen, with the addition that modes starting with the character 'w' or 'a' may be preceded by the character 'u', see below: - uw truncate to zero length or create text file for writing, default -

        +
        +
        uw
        truncate to zero length or create text file for writing, default permissions -
        - uwx create text file for writing, default permissions - ua append; open or create text file for writing at end-of-file, default -
        +
        uwx
        create text file for writing, default permissions +
        ua
        append; open or create text file for writing at end-of-file, default permissions -
        - uwb truncate to zero length or create binary file for writing, default -
        +
        uwb
        truncate to zero length or create binary file for writing, default permissions -
        - uwbx create binary file for writing, default permissions - uab append; open or create binary file for writing at end-of-file, default -
        +
        uwbx
        create binary file for writing, default permissions +
        uab
        append; open or create binary file for writing at end-of-file, default permissions -
        - uw+ truncate to zero length or create text file for update, default -
        +
        uw+
        truncate to zero length or create text file for update, default permissions -
        - uw+x create text file for update, default permissions - ua+ append; open or create text file for update, writing at end-of-file, -
        +
        uw+x
        create text file for update, default permissions +
        ua+
        append; open or create text file for update, writing at end-of-file, default permissions -
        - uw+b or uwb+ truncate to zero length or create binary file for update, default -
        +
        uw+b or uwb+
        truncate to zero length or create binary file for update, default permissions -
        - uw+bx or uwb+x create binary file for update, default permissions - ua+b or uab+ append; open or create binary file for update, writing at end-of-file, -
        +
        uw+bx or uwb+x
        create binary file for update, default permissions +
        ua+b or uab+
        append; open or create binary file for update, writing at end-of-file, default permissions -
        +

        6 Opening a file with exclusive mode ('x' as the last character in the mode argument) fails if the file already exists or cannot be created. @@ -34826,7 +34499,7 @@ margin: deleted text is marked with ''*'', new or changed text with '' ''. wscanf_s function, K.3.9.1.12, K.3.9.1.14 xor macro, 7.9 - xor_eq macro, 7.9 * + xor_eq macro, 7.9

        Contents