WG14/N1336Committee Draft — August 11, 2008ISO/IEC9899:201xCISO/IECINTERNATIONALSTANDARDISO/IEC9899:201xProgramminglanguagesCABSTRACT(CoversheettobeprovidedbyISOSecretariat.)This International Standard specifies the form and establishes the interpretation ofprograms expressed in the programming language C.Its purpose is to promoteportability,reliability,maintainability,and eficient execution of C language programs onavarietyofcomputingsystems.Clauses are included that detail the C language itself and the contents of the C languageexecution library.Annexes summarize aspects of both of them, and enumerate factorsthat influence the portability of C programs.Although this International Standard is intended to guide knowledgeable C languageprogrammers as well as implementors of C language translation systems, the documentitself is not designed to serve as a tutorial.Recipients of this draft are invited to submit, with their comments, notification of anyrelevant patent rights of which they are aware and to provide supporting documentationAbstract
WG14/N1336 Committee Draft — August 11, 2008 ISO/IEC 9899:201x INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x Programming languages — C ABSTRACT (Cover sheet to be provided by ISO Secretariat.) This International Standard specifies the form and establishes the interpretation of programs expressed in the programming language C. Its purpose is to promote portability, reliability, maintainability, and efficient execution of C language programs on a variety of computing systems. Clauses are included that detail the C language itself and the contents of the C language execution library. Annexes summarize aspects of both of them, and enumerate factors that influence the portability of C programs. Although this International Standard is intended to guide knowledgeable C language programmers as well as implementors of C language translation systems, the document itself is not designed to serve asatutorial. Recipients of this draft are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation. Abstract i
WG14/N1336Committee Draft August 11, 2008ISO/IEC9899:201xContentsForewordxiIntroductionxiv11. Scope22. Normative references33. Terms, definitions, and symbols74.Conformance95.Environment95.1Conceptual models95.1.1Translation environment115.1.2Execution environments175.2Environmental considerations175.2.1Character sets195.2.2Character display semantics205.2.3Signals and interrupts5.2.420Environmental limits296.Language296.1Notation296.2Concepts296.2.1Scopes of identifiers306.2.2Linkages of identifiers316.2.3Namespacesofidentifiers326.2.4Storage durations of objects336.2.5Types6.2.637Representations of types6.2.740Compatible type and composite type426.3Conversions426.3.1Arithmetic operands466.3.2Otheroperands496.4Lexical elements506.4.1Keywords516.4.2Identifiers536.4.3Universal character names546.4.4Constants626.4.5String literals636.4.6Punctuators646.4.7Header names656.4.8Preprocessing numbers666.4.9Comments676.5ExpressionsiliContents
WG14/N1336 Committee Draft — August 11, 2008 ISO/IEC 9899:201x Contents Foreword . xi Introduction . xiv 1. Scope . 1 2. Normative references . 2 3. Terms, definitions, and symbols . 3 4. Conformance . 7 5. Environment . 9 5.1 Conceptual models . 9 5.1.1 Translation environment . 9 5.1.2 Execution environments . 11 5.2 Environmental considerations . 17 5.2.1 Character sets . 17 5.2.2 Character display semantics . 19 5.2.3 Signals and interrupts . 20 5.2.4 Environmental limits . 20 6. Language . 29 6.1 Notation . 29 6.2 Concepts . 29 6.2.1 Scopes of identifiers . 29 6.2.2 Linkages of identifiers . 30 6.2.3 Name spaces of identifiers . 31 6.2.4 Storage durations of objects . 32 6.2.5 Types . 33 6.2.6 Representations of types . 37 6.2.7 Compatible type and composite type . 40 6.3 Conversions . 42 6.3.1 Arithmetic operands . 42 6.3.2 Other operands . 46 6.4 Lexical elements . 49 6.4.1 Keywords . 50 6.4.2 Identifiers . 51 6.4.3 Universal character names . 53 6.4.4 Constants . 54 6.4.5 String literals . 62 6.4.6 Punctuators . 63 6.4.7 Header names . 64 6.4.8 Preprocessing numbers . 65 6.4.9 Comments . 66 6.5 Expressions . 67 Contents iii
ISO/IEC9899:201xCommittee Draft August 11, 2008WG14/N13366.5.169Primary expressions6.5.269Postfix operators786.5.3Unary operators816.5.4Castoperators826.5.5Multiplicativeoperators826.5.6Additive operators846.5.7Bitwise shift operators6.5.885Relational operators6.5.986Equality operators876.5.10Bitwise AND operator886.5.11Bitwiseexclusive ORoperator886.5.12BitwiseinclusiveORoperator896.5.13Logical AND operator896.5.14Logical OR operator6.5.1590Conditional operator916.5.16Assignment operators946.5.17Comma operator956.6Constant expressions976.7Declarations986.7.1Storage-class specifiers996.7.2Type specifiers6.7.3108Type qualifiers6.7.4112Function specifiers1146.7.5Declarators6.7.6122Type names6.7.7123Type definitions6.7.8125Initialization6.8131Statements and blocks6.8.1131Labeled statements6.8.2132Compound statement1326.8.3Expression and null statements6.8.4133Selection statements6.8.5135Iteration statements6.8.6136Jumpstatements6.9140External definitions1416.9.1Function definitions6.9.2143External object definitions1456.10 Preprocessing directives1476.10.1Conditional inclusion1496.10.2Sourcefileinclusion6.10.3151Macro replacement1586.10.4Line control6.10.5159Error directive1596.10.6Pragma directiveivContents
ISO/IEC 9899:201x Committee Draft — August 11, 2008 WG14/N1336 6.5.1 Primary expressions . 69 6.5.2 Postfix operators . 69 6.5.3 Unary operators . 78 6.5.4 Cast operators . 81 6.5.5 Multiplicative operators . 82 6.5.6 Additive operators . 82 6.5.7 Bitwise shift operators . 84 6.5.8 Relational operators . 85 6.5.9 Equality operators . 86 6.5.10 Bitwise AND operator . 87 6.5.11 Bitwise exclusive OR operator . 88 6.5.12 Bitwise inclusive OR operator . 88 6.5.13 Logical AND operator . 89 6.5.14 Logical OR operator . 89 6.5.15 Conditional operator . 90 6.5.16 Assignment operators . 91 6.5.17 Comma operator . 94 6.6 Constant expressions . 95 6.7 Declarations . 97 6.7.1 Storage-class specifiers . 98 6.7.2 Type specifiers . 99 6.7.3 Type qualifiers . 108 6.7.4 Function specifiers . 112 6.7.5 Declarators . 114 6.7.6 Type names . 122 6.7.7 Type definitions . 123 6.7.8 Initialization . 125 6.8 Statements and blocks . 131 6.8.1 Labeled statements . 131 6.8.2 Compound statement . 132 6.8.3 Expression and null statements . 132 6.8.4 Selection statements . 133 6.8.5 Iteration statements . 135 6.8.6 Jump statements . 136 6.9 External definitions . 140 6.9.1 Function definitions . 141 6.9.2 External object definitions . 143 6.10 Preprocessing directives . 145 6.10.1 Conditional inclusion . 147 6.10.2 Source file inclusion . 149 6.10.3 Macro replacement . 151 6.10.4 Line control . 158 6.10.5 Error directive . 159 6.10.6 Pragma directive . 159 iv Contents
WG14/N1336Committee Draft — August 11, 2008ISO/IEC9899:201x1606.10.7Null directive1606.10.8Predefinedmacronames1616.10.9Pragma operator1636.11 Future language directions1636.11.1Floatingtypes1636.11.2Linkages of identifiers1636.11.3Externalnames1636.11.4Character escape sequences1636.11.5Storage-class specifiers1636.11.6Function declarators1636.11.7Function definitions1636.11.8Pragma directives1636.11.9Predefined macro names1647. Library1647.1Introduction1647.1.1Definitions of terms1657.1.2Standard headers7.1.3166Reserved identifiers1667.1.4Use of library functions7.2169Diagnostics<assert.h>7.2.1169Program diagnostics1707.3Complex arithmetic<complex.h>1707.3.1Introduction1717.3.2Conventions7.3.3171Branch cuts7.3.4171TheCX LIMITED RANGEpragma7.3.5172Trigonometric functions1747.3.6Hyperbolic functions7.3.7176Exponential and logarithmic functions7.3.8177Power and absolute-value functions7.3.9178Manipulation functions1817.4Character handling<ctype.h>1817.4.1Character classification functions7.4.2184Character case mapping functions1867.5Errors<errno.h>1877.6Floating-pointenvironment<fenv.h>1897.6.1TheFENV_ACCESSpragma7.6.2190Floating-point exceptions1937.6.3Rounding1947.6.4Environment7.7197Characteristics offloatingtypes<float.h>7.8198Format conversion of integertypes<inttypes.h>1987.8.1Macrosforformat specifiers1997.8.2Functions for greatest-width integer typesContentsv
WG14/N1336 Committee Draft — August 11, 2008 ISO/IEC 9899:201x 6.10.7 Null directive . 160 6.10.8 Predefined macro names . 160 6.10.9 Pragma operator . 161 6.11 Future language directions . 163 6.11.1 Floating types . 163 6.11.2 Linkages of identifiers . 163 6.11.3 External names . 163 6.11.4 Character escape sequences . 163 6.11.5 Storage-class specifiers . 163 6.11.6 Function declarators . 163 6.11.7 Function definitions . 163 6.11.8 Pragma directives . 163 6.11.9 Predefined macro names . 163 7. Library . 164 7.1 Introduction . 164 7.1.1 Definitions of terms . 164 7.1.2 Standard headers . 165 7.1.3 Reserved identifiers . 166 7.1.4 Use of library functions . 166 7.2 Diagnostics <assert.h> . 169 7.2.1 Program diagnostics . 169 7.3 Complex arithmetic <complex.h> . 170 7.3.1 Introduction . 170 7.3.2 Conventions . 171 7.3.3 Branch cuts . 171 7.3.4 The CX_LIMITED_RANGE pragma . 171 7.3.5 Trigonometric functions . 172 7.3.6 Hyperbolic functions . 174 7.3.7 Exponential and logarithmic functions . 176 7.3.8 Power and absolute-value functions . 177 7.3.9 Manipulation functions . 178 7.4 Character handling <ctype.h> . 181 7.4.1 Character classification functions . 181 7.4.2 Character case mapping functions . 184 7.5 Errors <errno.h> . 186 7.6 Floating-point environment <fenv.h> . 187 7.6.1 The FENV_ACCESS pragma . 189 7.6.2 Floating-point exceptions . 190 7.6.3 Rounding . 193 7.6.4 Environment . 194 7.7 Characteristics of floating types <float.h> . 197 7.8 Format conversion of integer types <inttypes.h> . 198 7.8.1 Macros for format specifiers . 198 7.8.2 Functions for greatest-width integer types . 199 Contents v
ISO/IEC9899:201xCommittee Draft — August 11, 2008WG14/N13367.9Alternativespellings<iso646.h>2022037.10 Sizesof integertypes<1imits.h>2047.11 Localization<locale.h>2057.11.1 Locale control2067.11.2Numeric formatting convention inquiry2127.12Mathematics<math.h>2147.12.1Treatmentoferrorconditions7.12.2215TheFP CONTRACTpragma7.12.3216Classificationmacros7.12.4218Trigonometricfunctions7.12.5221Hyperbolic functions2237.12.6Exponential and logarithmic functions2287.12.7Power and absolute-value functions2307.12.8Error and gamma functions2317.12.9Nearest integer functions2357.12.10 Remainder functions2367.12.11 Manipulation functions2387.12.12 Maximum, minimum, and positive difference functions2397.12.13 Floating multiply-add2407.12.14Comparisonmacros2437.13 Nonlocal jumps<setjmp.h>2437.13.1Save calling environment2447.13.2Restore calling environment2467.14 Signal handling<signa1.h>2477.14.1 Specify signal handling2487.14.2 Send signal2497.15Variablearguments<stdarg.h>2497.15.1Variable argument listaccess macros2537.16 Boolean type and values<stdboo1.h>2547.17Commondefinitions<stddef.h>2557.18 Integertypes<stdint.h>2557.18.1Integer types7.18.2257Limits of specified-width integer types2597.18.3Limits of other integer types2607.18.4Macros for integer constants2627.19Input/output<stdio.h>2627.19.1Introduction7.19.2264Streams7.19.3266Files2687.19.4Operations on files7.19.5270File access functions2747.19.6Formatted input/outputfunctions7.19.7296Character input/output functions3017.19.8Direct input/output functionsviContents
ISO/IEC 9899:201x Committee Draft — August 11, 2008 WG14/N1336 7.9 Alternative spellings <iso646.h> . 202 7.10 Sizes of integer types <limits.h> . 203 7.11 Localization <locale.h> . 204 7.11.1 Locale control . 205 7.11.2 Numeric formatting convention inquiry . 206 7.12 Mathematics <math.h> . 212 7.12.1 Treatment of error conditions . 214 7.12.2 The FP_CONTRACT pragma . 215 7.12.3 Classification macros . 216 7.12.4 Trigonometric functions . 218 7.12.5 Hyperbolic functions . 221 7.12.6 Exponential and logarithmic functions . 223 7.12.7 Power and absolute-value functions . 228 7.12.8 Error and gamma functions . 230 7.12.9 Nearest integer functions . 231 7.12.10 Remainder functions . 235 7.12.11 Manipulation functions . 236 7.12.12 Maximum, minimum, and positive difference functions . 238 7.12.13 Floating multiply-add . 239 7.12.14 Comparison macros . 240 7.13 Nonlocal jumps <setjmp.h> . 243 7.13.1 Save calling environment . 243 7.13.2 Restore calling environment . 244 7.14 Signal handling <signal.h> . 246 7.14.1 Specify signal handling . 247 7.14.2 Send signal . 248 7.15 Variable arguments <stdarg.h> . 249 7.15.1 Variable argument list access macros . 249 7.16 Boolean type and values <stdbool.h> . 253 7.17 Common definitions <stddef.h> . 254 7.18 Integer types <stdint.h> . 255 7.18.1 Integer types . 255 7.18.2 Limits of specified-width integer types . 257 7.18.3 Limits of other integer types . 259 7.18.4 Macros for integer constants . 260 7.19 Input/output <stdio.h> . 262 7.19.1 Introduction . 262 7.19.2 Streams . 264 7.19.3 Files . 266 7.19.4 Operations on files . 268 7.19.5 File access functions . 270 7.19.6 Formatted input/output functions . 274 7.19.7 Character input/output functions . 296 7.19.8 Direct input/output functions . 301 vi Contents