david@dhw68k.cts.com (David H. Wolfskill) (06/29/88)
From the cover page of the 20 May, 1988 dpANS: The 3rd 2-month period of public review and comment will run from 01 July, 1988 to 01 September, 1988. It ought to be no surprise to readers of this group that "X3J11 requests that the public review comments on this draft be limited to the areas that have been changed between the second and third public review drafts." The following page has an updated list of substantive changes, with the note (to reinforce the above) "THIS PUBLIC REVIEW COMMENT PERIOD IS RESTRICTED TO THE 37 POINTS LISTED BELOW." Here is a copy of the text of that page, with boldface type indicated thus: _b_o_l_d_f_a_c_e. The following list summarizes the substantive changes that were made between the second and third public review drafts of the C programming language dpANS. 1. The _n_o_a_l_i_a_s keyword was removed, as well as all its uses. 2. The description of conversions of "pointers to qualified types" to "pointers to unqualified types" has been corrected. 3. Three identifiers (_e_r_r_n_o, _s_e_t_j_m_p, and _v_a___e_n_d) are allowed to be implemented either as macros or as external identifiers. 4. The _f_f_l_u_s_h function was enhanced to flush all output streams if passed a null pointer. 5. Use of a stream after it has been closed now explicitly causes undefined behavior. 6. The _%_% format for the _f_s_c_a_n_f function disallows any characters between the two _% characters. 7. Multibyte characters are now allowed in header names. 8. The unary _+ operator is now constrained to operate only on arithmetic types. 9. The _m_e_m_c_m_p, _s_t_r_c_m_p, and _s_t_r_n_c_m_p comparison functions now treat their arguments as _u_n_s_i_g_n_e_d _c_h_a_r arrays. 10. The _o_f_f_s_e_t_o_f macro has been generalized to allow more than just a simple identifier as its second argument. 11. The _=_=, _!_=, _?_:, and _= operators now allow operands that are pointers to qualified incomplete types (including _v_o_i_d). 12. The _<, _>, _<_=, and _>_= operators now allow operands that are pointers to qualified incomplete types. 13. A parameter for a function definition must be an object type after the "array of" and "function returning" rewrite to "pointer to" has occurred. 14. The math library functions may now have other domain errors, such as sometimes when "infinity" is passed as an argument. 15. The _a_t_a_n_2 function may now have a domain error if both its arguments are zero. 16. If more than one call to the _e_x_i_t function is executed, the behavior is explicitly undefined. 17. An additional field, _i_n_t___f_r_a_c___d_i_g_i_t_s, was added to the _s_t_r_u_c_t _l_c_o_n_v structure. 18. The range of the _t_m___s_e_c field of the _s_t_r_u_c_t _t_m structure was increased to [0,60] in order to accommodate leap seconds. 19. Unnamed structure and union members are now explicitly ignored during initialization. 20. A program is now constrained to have not more than one definition of an identifier with internal linkage and to have exactly one definition if the identifier is used. 21. The error number names in _<_e_r_r_n_o_._h_> were extended to include all names that begin with _E followed by a digit, underscore, or upper case letter. 22. A function defined with an ellipsis must now invoke both _v_a___s_t_a_r_t and _v_a___e_n_d or must invoke neither. 23. The _s_i_g_n_a_l function is no longer required to be reentrant. 24. A function's image is no longer required to be unmodified during execution. 25. Casts to qualified types are no longer a constraint violation. 26. The behavior is explicitly undefined if a call with a prototype is made to a function that is not defined with a compatible type. 27. The redeclaration constraints involving identifiers with no linkage were corrected with respect to tags. 28. The distinction between "signed" and "plain" _i_n_t bit-fields is now explicitly distinguishable, even through _t_y_p_e_d_e_f_s. 29. Unions are padded at their end as necessary for alignment, just like structures. 30. Use of typedef names in prototypes and in structure and union member declarations was clarified. 31. The behavior of identifiers during the evaluation of the expressions for the _#_i_f and _#_e_l_i_f preprocessing directives was corrected. 32. Macro definitions of keywords are not permitted when a header is included. 33. The error and end-of-file indicators are explicitly cleared by the _f_o_p_e_n and _f_r_e_o_p_e_n functions. 34. No prior operations are allowed on a stream before a call to the _s_e_t_v_b_u_f function. 35. An implementation must behave as if its library does not call the _s_r_a_n_d, _m_b_l_e_n, _m_b_t_o_w_c, _w_c_t_o_m_b, and _s_t_r_e_r_r_o_r functions. 36. The environment for _a_t_e_x_i_t-registered functions is no longer specified. 37. The shift states for the _m_b_l_e_n, _m_b_t_o_w_c, and _w_c_t_o_m_b functions are explicitly undefined after a change to the _L_C___C_T_Y_P_E category. I hope I entered everything correctly -- and that I have not offended anyone by posting this. david -- David H. Wolfskill uucp: ...{trwrb,hplabs}!felix!dhw68k!david InterNet: david@dhw68k.cts.com