|
|
1.1 ! root 1: .\" @(#)Clang.ms 6.2 (Berkeley) 5/27/86 ! 2: .\" ! 3: .nr Cl 2 ! 4: .TL ! 5: The C Programming Language - Reference Manual ! 6: .AU ! 7: Dennis M. Ritchie ! 8: .AI ! 9: .MH ! 10: .PP ! 11: This manual is a reprint, with updates to the current C standard, from ! 12: \fIThe C Programming Language\fR, ! 13: by Brian W. Kernighan and Dennis M. Richie, Prentice-Hall, Inc., 1978. ! 14: .EH 'PS1:1-%''The C Programming Language - Reference Manual' ! 15: .OH 'The C Programming Language - Reference Manual''PS1:1-%' ! 16: .NH 1 ! 17: Introduction ! 18: .PP ! 19: This manual describes the C language on the DEC PDP-11\(dg, the DEC VAX-11, ! 20: .FS ! 21: .LP ! 22: \(dg DEC PDP-11, and DEC VAX-11 are trademarks of Digital Equipment Corporation. ! 23: .LP ! 24: \(dd 3B 20 is a trademark of AT&T. ! 25: .FE ! 26: and the AT&T 3B 20\(dd. ! 27: Where differences exist, it concentrates on the VAX, but tries to point ! 28: out implementation-dependent details. With few execptions, these dependencies ! 29: follow directly from the underlying properties of the hardware; the various ! 30: compilers are generally quite compatible. ! 31: .NH 1 ! 32: Lexical Conventions ! 33: .PP ! 34: There are six classes of tokens\ -\ ! 35: identifiers, keywords, constants, strings, operators, and other separators. ! 36: Blanks, tabs, new\(hylines, ! 37: and comments (collectively, ``white space'') as described below ! 38: are ignored except as they serve to separate ! 39: tokens. ! 40: Some white space is required to separate ! 41: otherwise adjacent identifiers, ! 42: keywords, and constants. ! 43: .PP ! 44: If the input stream has been parsed into tokens ! 45: up to a given character, the next token is taken ! 46: to include the longest string of characters ! 47: which could possibly constitute a token. ! 48: .NH 2 ! 49: Comments ! 50: .PP ! 51: The characters ! 52: .B ! 53: /* ! 54: .R ! 55: introduce a comment which terminates ! 56: with the characters ! 57: \fB\(**/\fR. ! 58: Comments do not nest. ! 59: .NH 2 ! 60: Identifiers (Names) ! 61: .PP ! 62: An identifier is a sequence of letters and digits. ! 63: The first character must be a letter. ! 64: The underscore ! 65: (\fB_\fR) ! 66: counts as a letter. ! 67: Uppercase and lowercase letters ! 68: are different. ! 69: Although there is no limit on the length of a name, ! 70: only initial characters are significant: at least ! 71: eight characters of a non-external name, and perhaps ! 72: fewer for external names. ! 73: Moreover, some implementations may collapse case ! 74: distinctions for external names. ! 75: The external name sizes include: ! 76: .DS ! 77: .TS ! 78: l l. ! 79: PDP-11 7 characters, 2 cases ! 80: VAX-11 >100 characters, 2 cases ! 81: AT&T 3B 20 >100 characters, 2 cases ! 82: .TE ! 83: .fi ! 84: .DE ! 85: .NH 2 ! 86: Keywords ! 87: .PP ! 88: The following identifiers are reserved for use ! 89: as keywords and may not be used otherwise: ! 90: .DS ! 91: .ta 0.8i 1.6i 2.4i 3.2i 4.0i ! 92: \fBauto do for return typedef ! 93: break double goto short union ! 94: case else if sizeof unsigned ! 95: char enum int static void ! 96: continue external long struct while ! 97: default float register switch\fR ! 98: .ta 0.5i ! 99: .DE ! 100: .PP ! 101: Some implementations also reserve the words ! 102: .B ! 103: fortran, asm, gfloat, hfloat ! 104: .R ! 105: and ! 106: .B quad ! 107: .R ! 108: .NH 2 ! 109: Constants ! 110: .PP ! 111: There are several kinds ! 112: of constants. ! 113: Each has a type; an introduction to types is given in ``NAMES.'' ! 114: Hardware characteristics that affect sizes are summarized in ! 115: ``Hardware Characteristics'' under ``LEXICAL CONVENTIONS.'' ! 116: .NH 3 ! 117: Integer Constants ! 118: .br ! 119: .PP ! 120: An integer constant consisting of a sequence of digits ! 121: is taken ! 122: to be octal if it begins with ! 123: .B ! 124: 0 ! 125: .R ! 126: (digit zero). ! 127: An octal constant consists of the digits \fB0\fR through \fB7\fR only. ! 128: A sequence of digits preceded by ! 129: .B ! 130: 0x ! 131: .R ! 132: or ! 133: .B ! 134: 0X ! 135: .R ! 136: (digit zero) is taken to be a hexadecimal integer. ! 137: The hexadecimal digits include ! 138: .B ! 139: a ! 140: .R ! 141: or ! 142: .B ! 143: A ! 144: .R ! 145: through ! 146: .B ! 147: f ! 148: .R ! 149: or ! 150: .B ! 151: F ! 152: .R ! 153: with values 10 through 15. ! 154: Otherwise, the integer constant is taken to be decimal. ! 155: A decimal constant whose value exceeds the largest ! 156: signed machine integer is taken to be ! 157: \fBlong\fR; ! 158: an octal or hex constant which exceeds the largest unsigned machine integer ! 159: is likewise taken to be ! 160: .B ! 161: long\fR. ! 162: .R ! 163: Otherwise, integer constants are \fBint\fR. ! 164: .NH 3 ! 165: Explicit Long Constants ! 166: .br ! 167: .PP ! 168: A decimal, octal, or hexadecimal integer constant immediately followed ! 169: by ! 170: .B ! 171: l ! 172: .R ! 173: (letter ell) ! 174: or ! 175: .B ! 176: L ! 177: .R ! 178: is a long constant. ! 179: As discussed below, ! 180: on some machines ! 181: integer and long values may be considered identical. ! 182: .NH 3 ! 183: Character Constants ! 184: .br ! 185: .PP ! 186: A character constant is a character enclosed in single quotes, ! 187: as in '\fBx\fR'. ! 188: The value of a character constant is the numerical value of the ! 189: character in the machine's character set. ! 190: .PP ! 191: Certain nongraphic characters, ! 192: the single quote ! 193: (\fB'\fR) ! 194: and the backslash ! 195: (\fB\e\fR), ! 196: may be represented according to the following table ! 197: of escape sequences: ! 198: .DS ! 199: .TS ! 200: l l l. ! 201: new\(hyline NL (LF) \en ! 202: horizontal tab HT \et ! 203: vertical tab VT \ev ! 204: backspace BS \eb ! 205: carriage return CR \er ! 206: form feed FF \ef ! 207: backslash \e \e\e ! 208: single quote ' \e' ! 209: bit pattern \fIddd\fR\^ \e\fIddd\fR\^ ! 210: .TE ! 211: .DE ! 212: .PP ! 213: The escape ! 214: \e\fIddd\fR ! 215: consists of the backslash followed by 1, 2, or 3 octal digits ! 216: which are taken to specify the value of the ! 217: desired character. ! 218: A special case of this construction is ! 219: .B ! 220: \e0 ! 221: .R ! 222: (not followed ! 223: by a digit), which indicates the character ! 224: .B ! 225: NUL\fR. ! 226: .R ! 227: If the character following a backslash is not one ! 228: of those specified, the ! 229: behavior is undefined. ! 230: A new-line character is illegal in a character constant. ! 231: The type of a character constant is \fBint\fR. ! 232: .NH 3 ! 233: Floating Constants ! 234: .br ! 235: .PP ! 236: A floating constant consists of ! 237: an integer part, a decimal point, a fraction part, ! 238: an ! 239: .B ! 240: e ! 241: .R ! 242: or ! 243: \fBE\fR, ! 244: and an optionally signed integer exponent. ! 245: The integer and fraction parts both consist of a sequence ! 246: of digits. ! 247: Either the integer part or the fraction ! 248: part (not both) may be missing. ! 249: Either the decimal point or ! 250: the ! 251: .B ! 252: e ! 253: .R ! 254: and the exponent (not both) may be missing. ! 255: Every floating constant has type \fBdouble\fR. ! 256: .NH 3 ! 257: Enumeration Constants ! 258: .br ! 259: .PP ! 260: Names declared as enumerators ! 261: (see ``Structure, Union, and Enumeration Declarations'' under ! 262: ``DECLARATIONS'') ! 263: have type \fBint\fR. ! 264: .NH 2 ! 265: Strings ! 266: .PP ! 267: A string is a sequence of characters surrounded by ! 268: double quotes, ! 269: as in ! 270: \fB"..."\fR. ! 271: A string has type ! 272: ``array of \fBchar\fR'' and storage class ! 273: \fBstatic\fR ! 274: (see ``NAMES'') ! 275: and is initialized with ! 276: the given characters. ! 277: The compiler places ! 278: a null byte ! 279: (\fB\e0\fR) ! 280: at the end of each string so that programs ! 281: which scan the string can ! 282: find its end. ! 283: In a string, the double quote character ! 284: (\fB"\fR) ! 285: must be preceded by ! 286: a ! 287: \fB\e\fR; ! 288: in addition, the same escapes as described for character ! 289: constants may be used. ! 290: .PP ! 291: A ! 292: .B ! 293: \e ! 294: .R ! 295: and ! 296: the immediately following new\(hyline are ignored. ! 297: All strings, even when written identically, are distinct. ! 298: .NH 2 ! 299: Hardware Characteristics ! 300: .PP ! 301: The following figure summarize ! 302: certain hardware properties that vary from machine to machine. ! 303: .DS ! 304: .TS ! 305: center box; ! 306: c cfB s cfB s cfB s ! 307: c c s c s c s ! 308: l | l1 lp8 | l1 lp8 | l1 lp8. ! 309: DEC PDP\-11 DEC VAX-11 AT&T 3B ! 310: (ASCII) (ASCII) (ASCII) ! 311: .sp ! 312: _ ! 313: char 8 bits 8 bits 8bits ! 314: int 16 32 32 ! 315: short 16 16 16 ! 316: long 32 32 32 ! 317: float 32 32 32 ! 318: double 64 64 64 ! 319: float range \(+-10 \(+-38 \(+-10 \(+-38 \(+-10 \(+-38 ! 320: \^ \^ \^ \^ ! 321: double range \(+-10 \(+-38 \(+-10 \(+-38 \(+-10 \(+-308 ! 322: \^ \^ \^ \^ ! 323: .TE ! 324: .FG 4 4 1 "DEC PDP-11 HARDWARE CHARACTERISTICS" ! 325: .DE ! 326: .PP ! 327: .NH 1 ! 328: Syntax Notation ! 329: .PP ! 330: Syntactic categories are indicated by ! 331: .I ! 332: italic ! 333: .R ! 334: type ! 335: and literal words and characters ! 336: in ! 337: \fBbold\fR ! 338: type. ! 339: Alternative categories are listed on separate lines. ! 340: An optional terminal or nonterminal symbol is ! 341: indicated by the subscript ``opt,'' so that ! 342: .DS ! 343: { \fIexpression\v'0.5'\s-2opt\s0\v'-0.5'\fR } ! 344: .DE ! 345: .LP ! 346: indicates an optional expression enclosed in braces. ! 347: The syntax is summarized in ``SYNTAX SUMMARY''. ! 348: .NH 1 ! 349: Names ! 350: .PP ! 351: The C language bases the interpretation of an ! 352: identifier upon two attributes of the identifier \(mi its ! 353: .I ! 354: storage class ! 355: .R ! 356: and its ! 357: .I ! 358: type\fR. ! 359: The storage class determines the location and lifetime ! 360: of the storage associated with an identifier; ! 361: the type determines ! 362: the meaning of the values ! 363: found in the identifier's storage. ! 364: .NH 2 ! 365: Storage Class ! 366: .PP ! 367: There are four declarable storage classes: ! 368: .BL 6 1 ! 369: .LI ! 370: Automatic ! 371: .LI ! 372: Static ! 373: .LI ! 374: External ! 375: .LI ! 376: Register. ! 377: .LE ! 378: .PP ! 379: Automatic variables are local to each invocation of ! 380: a block (see ``Compound Statement or Block'' in ! 381: ``STATEMENTS'') and are discarded upon exit from the block. ! 382: Static variables are local to a block but retain ! 383: their values upon reentry to a block even after control ! 384: has left the block. ! 385: External variables exist and retain their values throughout ! 386: the execution of the entire program and ! 387: may be used for communication between ! 388: functions, even separately compiled functions. ! 389: Register variables are (if possible) stored in the fast registers ! 390: of the machine; like automatic ! 391: variables, they are local to each block and disappear on exit from the block. ! 392: .NH 2 ! 393: Type ! 394: .PP ! 395: The C language supports several ! 396: fundamental ! 397: types of objects. ! 398: Objects declared as characters ! 399: (\fBchar\fR) ! 400: are large enough to store any member of the implementation's ! 401: character set. ! 402: If a genuine character from that character set is ! 403: stored in a \fBchar\fR variable, ! 404: its value is equivalent to the integer code for that character. ! 405: Other quantities may be stored into character variables, but ! 406: the implementation is machine dependent. ! 407: In particular, \fBchar\fR may be signed or unsigned by default. ! 408: .PP ! 409: Up to three sizes of integer, declared ! 410: .B ! 411: short ! 412: .R ! 413: \fBint\fR, ! 414: \fBint\fR, ! 415: and ! 416: .B ! 417: long ! 418: .R ! 419: \fBint\fR, ! 420: are available. ! 421: Longer integers provide no less storage than shorter ones, ! 422: but the implementation may make either short integers or long integers, ! 423: or both, equivalent to plain integers. ! 424: ``Plain'' integers have the natural size suggested ! 425: by the host machine architecture. ! 426: The other sizes are provided to meet special needs. ! 427: .PP ! 428: The properties of \fBenum\fR types (see ``Structure, Union, and Enumeration Declarations'' ! 429: under ``DECLARATIONS'') ! 430: are identical to those of ! 431: some integer types. ! 432: The implementation may use the range of values to ! 433: determine how to allocate storage. ! 434: .PP ! 435: Unsigned ! 436: integers, declared ! 437: .B ! 438: unsigned, ! 439: .R ! 440: obey the laws of arithmetic modulo ! 441: 2\v'-0.5'\fIn\fR\v'0.5' ! 442: where \fIn\fR is the number of bits in the representation. ! 443: (On the ! 444: PDP-11, ! 445: unsigned long quantities are not supported.) ! 446: .PP ! 447: Single-precision floating point ! 448: (\fBfloat\fR) ! 449: and double precision floating point ! 450: (\fBdouble\fR) ! 451: may be synonymous in some implementations. ! 452: .PP ! 453: Because objects of the foregoing types can usefully be interpreted ! 454: as numbers, they will be referred to as ! 455: .I ! 456: arithmetic ! 457: .R ! 458: types. ! 459: \fBChar\fR, ! 460: .B ! 461: int ! 462: .R ! 463: of all sizes whether \fBunsigned\fR or not, and ! 464: .B ! 465: enum ! 466: .R ! 467: will collectively be called ! 468: .I ! 469: integral ! 470: .R ! 471: types. ! 472: The ! 473: .B ! 474: float ! 475: .R ! 476: and ! 477: .B ! 478: double ! 479: .R ! 480: types will collectively be called ! 481: .I ! 482: floating ! 483: .R ! 484: types. ! 485: .PP ! 486: The ! 487: .B ! 488: void ! 489: .R ! 490: type ! 491: specifies an empty set of values. ! 492: It is used as the type returned by functions that ! 493: generate no value. ! 494: .PP ! 495: Besides the fundamental arithmetic types, there is a ! 496: conceptually infinite class of derived types constructed ! 497: from the fundamental types in the following ways: ! 498: .BL 6 1 ! 499: .LI ! 500: \fIArrays\fR ! 501: of objects of most types ! 502: .LI ! 503: \fIFunctions\fR ! 504: which return objects of a given type ! 505: .LI ! 506: \fIPointers\fR ! 507: to objects of a given type ! 508: .LI ! 509: \fIStructures\fR ! 510: containing a sequence of objects of various types ! 511: .LI ! 512: \fIUnions\fR ! 513: capable of containing any one of several objects of various types. ! 514: .LE ! 515: .PP ! 516: In general these methods ! 517: of constructing objects can ! 518: be applied recursively. ! 519: .NH 1 ! 520: Objects and Lvalues ! 521: .PP ! 522: An ! 523: .I ! 524: object ! 525: .R ! 526: is a manipulatable region of storage. ! 527: An ! 528: .I ! 529: lvalue ! 530: .R ! 531: is an expression referring to an object. ! 532: An obvious example of an lvalue ! 533: expression is an identifier. ! 534: There are operators which yield lvalues: ! 535: for example, ! 536: if ! 537: .B ! 538: E ! 539: .R ! 540: is an expression of pointer type, then ! 541: .B ! 542: \(**E ! 543: .R ! 544: is an lvalue ! 545: expression referring to the object to which ! 546: .B ! 547: E ! 548: .R ! 549: points. ! 550: The name ``lvalue'' comes from the assignment expression ! 551: .B ! 552: E1\ =\ E2 ! 553: .R ! 554: in which the left operand ! 555: .B ! 556: E1 ! 557: .R ! 558: must be ! 559: an lvalue expression. ! 560: The discussion of each operator ! 561: below indicates whether it expects lvalue operands and whether it ! 562: yields an lvalue. ! 563: .NH 1 ! 564: Conversions ! 565: .PP ! 566: A number of operators may, depending on their operands, ! 567: cause conversion of the value of an operand from one type to another. ! 568: This part explains the result to be expected from such ! 569: conversions. ! 570: The conversions demanded by most ordinary operators are summarized under ! 571: ``Arithmetic Conversions.'' ! 572: The summary will be supplemented ! 573: as required by the discussion ! 574: of each operator. ! 575: .NH 2 ! 576: Characters and Integers ! 577: .PP ! 578: A character or a short integer may be used wherever an ! 579: integer may be used. ! 580: In all cases ! 581: the value is converted to an integer. ! 582: Conversion of a shorter integer ! 583: to a longer preserves sign. ! 584: Whether or not sign-extension occurs for characters is machine ! 585: dependent, but it is guaranteed that a member of the ! 586: standard character set is non-negative. ! 587: Of the machines treated here, ! 588: only the ! 589: PDP-11 ! 590: and ! 591: VAX-11 ! 592: sign-extend. ! 593: On these machines, ! 594: .B ! 595: char ! 596: .R ! 597: variables range in value from ! 598: \(mi128 to 127. ! 599: The more explicit type ! 600: .B ! 601: unsigned ! 602: .R ! 603: .B ! 604: char ! 605: .R ! 606: forces the values to range from 0 to 255. ! 607: .PP ! 608: On machines that treat characters as signed, ! 609: the characters of the ! 610: ASCII ! 611: set are all non-negative. ! 612: However, a character constant specified ! 613: with an octal escape suffers sign extension ! 614: and may appear negative; ! 615: for example, ! 616: \fB\'\e377\'\fR ! 617: \fRhas the value ! 618: .B ! 619: \(mi1\fR. ! 620: .PP ! 621: When a longer integer is converted to a shorter ! 622: integer ! 623: or to a ! 624: .B ! 625: char, ! 626: .R ! 627: it is truncated on the left. ! 628: Excess bits are simply discarded. ! 629: .NH 2 ! 630: Float and Double ! 631: .PP ! 632: All floating arithmetic in C is carried out in double precision. ! 633: Whenever a ! 634: .B ! 635: float ! 636: .R ! 637: appears in an expression it is lengthened to ! 638: .B ! 639: double ! 640: .R ! 641: by zero padding its fraction. ! 642: When a ! 643: .B ! 644: double ! 645: .R ! 646: must be ! 647: converted to ! 648: \fBfloat\fR, ! 649: for example by an assignment, ! 650: the ! 651: .B ! 652: double ! 653: .R ! 654: is rounded before ! 655: truncation to ! 656: .B ! 657: float ! 658: .R ! 659: length. ! 660: This result is undefined if it cannot be represented as a float. ! 661: On the VAX, the compiler can be directed to use single percision for expressions ! 662: containing only float and interger operands. ! 663: .NH 2 ! 664: Floating and Integral ! 665: .PP ! 666: Conversions of floating values to integral type ! 667: are rather machine dependent. ! 668: In particular, the direction of truncation of negative numbers ! 669: varies. ! 670: The result is undefined if ! 671: it will not fit in the space provided. ! 672: .PP ! 673: Conversions of integral values to floating type ! 674: are well behaved. ! 675: Some loss of accuracy occurs ! 676: if the destination lacks sufficient bits. ! 677: .NH 2 ! 678: Pointers and Integers ! 679: .PP ! 680: An expression of integral type may be added to or subtracted from ! 681: a pointer; in such a case, ! 682: the first is converted as ! 683: specified in the discussion of the addition operator. ! 684: Two pointers to objects of the same type may be subtracted; ! 685: in this case, the result is converted to an integer ! 686: as specified in the discussion of the subtraction ! 687: operator. ! 688: .NH 2 ! 689: Unsigned ! 690: .PP ! 691: Whenever an unsigned integer and a plain integer ! 692: are combined, the plain integer is converted to unsigned ! 693: and the result is unsigned. ! 694: The value ! 695: is the least unsigned integer congruent to the signed ! 696: integer (modulo 2\v'-0.3'\s-2wordsize\s+2\v'0.3'). ! 697: In a 2's complement representation, ! 698: this conversion is conceptual; and there is no actual change in the ! 699: bit pattern. ! 700: .PP ! 701: When an unsigned \fBshort\fR integer is converted to ! 702: \fBlong\fR, ! 703: the value of the result is the same numerically as that of the ! 704: unsigned integer. ! 705: Thus the conversion amounts to padding with zeros on the left. ! 706: .NH 2 ! 707: Arithmetic Conversions ! 708: .PP ! 709: A great many operators cause conversions ! 710: and yield result types in a similar way. ! 711: This pattern will be called the ``usual arithmetic conversions.'' ! 712: .AL 1 6 ! 713: .LI ! 714: First, any operands of type ! 715: .B ! 716: char ! 717: .R ! 718: or ! 719: .B ! 720: short ! 721: .R ! 722: are converted to ! 723: \fBint\fR, ! 724: and any operands of type \fBunsigned char\fR ! 725: or \fBunsigned short\fR are converted ! 726: to \fBunsigned int\fR. ! 727: .LI ! 728: Then, if either operand is ! 729: .B ! 730: double, ! 731: .R ! 732: the other is converted to ! 733: .B ! 734: double ! 735: .R ! 736: and that is the type of the result. ! 737: .LI ! 738: Otherwise, if either operand is \fBunsigned long\fR, ! 739: the other is converted to \fBunsigned long\fR and that ! 740: is the type of the result. ! 741: .LI ! 742: Otherwise, if either operand is ! 743: \fBlong\fR, ! 744: the other is converted to ! 745: .B ! 746: long ! 747: .R ! 748: and that is the type of the result. ! 749: .LI ! 750: Otherwise, if one operand is \fBlong\fR, and ! 751: the other is \fBunsigned int\fR, they are both ! 752: converted to \fBunsigned long\fR and that is ! 753: the type of the result. ! 754: .LI ! 755: Otherwise, if either operand is ! 756: .B ! 757: unsigned, ! 758: .R ! 759: the other is converted to ! 760: .B ! 761: unsigned ! 762: .R ! 763: and that is the type of the result. ! 764: .LI ! 765: Otherwise, both operands must be ! 766: \fBint\fR, ! 767: and that is the type of the result. ! 768: .LE ! 769: .NH 2 ! 770: Void ! 771: .PP ! 772: The (nonexistent) value of a ! 773: .B ! 774: void ! 775: .R ! 776: object may not be used in any way, ! 777: and neither explicit nor implicit conversion may be applied. ! 778: Because a void expression denotes a nonexistent value, ! 779: such an expression may be used only ! 780: as an expression statement ! 781: (see ``Expression Statement'' under ``STATEMENTS'') ! 782: or as the left operand ! 783: of a comma expression (see ``Comma Operator'' under ``EXPRESSIONS''). ! 784: .PP ! 785: An expression may be converted to ! 786: type ! 787: .B ! 788: void ! 789: .R ! 790: by use of a cast. ! 791: For example, this makes explicit the discarding of the value ! 792: of a function call used as an expression statement. ! 793: .NH 1 ! 794: Expressions ! 795: .PP ! 796: The precedence of expression operators is the same ! 797: as the order of the major ! 798: subsections of this section, highest precedence first. ! 799: Thus, for example, the expressions referred to as the operands of ! 800: .B ! 801: \(pl ! 802: .R ! 803: (see ``Additive Operators'') ! 804: are those expressions defined under ``Primary Expressions'', ! 805: ``Unary Operators'', and ``Multiplicative Operators''. ! 806: Within each subpart, the operators have the same ! 807: precedence. ! 808: Left- or right-associativity is specified ! 809: in each subsection for the operators ! 810: discussed therein. ! 811: The precedence and associativity of all the expression ! 812: operators are summarized in the ! 813: grammar of ``SYNTAX SUMMARY''. ! 814: .PP ! 815: Otherwise, the order of evaluation of expressions ! 816: is undefined. In particular, the compiler ! 817: considers itself free to ! 818: compute subexpressions in the order it believes ! 819: most efficient ! 820: even if the subexpressions ! 821: involve side effects. ! 822: The order in which subexpression evaluation takes place is unspecified. ! 823: Expressions involving a commutative and associative ! 824: operator ! 825: (\fB\(**,\fR ! 826: \fB\(pl\fR, ! 827: \fB&\fR, ! 828: \fB|\fR, ! 829: \fB^\fR) ! 830: may be rearranged arbitrarily even in the presence ! 831: of parentheses; ! 832: to force a particular order of evaluation, ! 833: an explicit temporary must be used. ! 834: .PP ! 835: The handling of overflow and divide check ! 836: in expression evaluation ! 837: is undefined. ! 838: Most existing implementations of C ignore integer overflows; ! 839: treatment of ! 840: division by 0 and all floating-point exceptions ! 841: varies between machines and is usually ! 842: adjustable by a library function. ! 843: .NH 2 ! 844: Primary Expressions ! 845: .PP ! 846: Primary expressions ! 847: involving \fB\.\fR, ! 848: \fB\(mi>\fR, ! 849: subscripting, and function calls ! 850: group left to right. ! 851: .DS ! 852: \fIprimary-expression: ! 853: identifier ! 854: constant ! 855: string ! 856: ( expression ) ! 857: primary-expression [ expression ] ! 858: primary-expression ( expression-list\v'0.5'\s-2opt\s0\v'-0.5' ) ! 859: primary-expression . identifier ! 860: primary-expression \(mi> identifier\fR ! 861: .DE ! 862: .DS ! 863: \fIexpression-list: ! 864: expression ! 865: expression-list , expression\fR ! 866: .DE ! 867: .PP ! 868: An identifier is a primary expression provided it has been ! 869: suitably declared as discussed below. ! 870: Its type is specified by its declaration. ! 871: If the type of the identifier is ``array of .\|.\|.'', ! 872: then the value of the identifier expression ! 873: is a pointer ! 874: to the first object in the array; and the ! 875: type of the expression is ! 876: ``pointer to .\|.\|.''. ! 877: Moreover, an array identifier is not an lvalue ! 878: expression. ! 879: Likewise, an identifier which is declared ! 880: ``function returning .\|.\|.'', ! 881: when used except in the function-name position ! 882: of a call, is converted to ``pointer to function returning .\|.\|.''. ! 883: .PP ! 884: A ! 885: constant is a primary expression. ! 886: Its type may be ! 887: \fBint\fR, ! 888: \fBlong\fR, ! 889: or ! 890: .B ! 891: double ! 892: .R ! 893: depending on its form. ! 894: Character constants have type ! 895: .B ! 896: int ! 897: .R ! 898: and floating constants have type ! 899: .B ! 900: double\fR. ! 901: .R ! 902: .PP ! 903: A string is a primary expression. ! 904: Its type is originally ``array of ! 905: \fBchar\fR'', ! 906: but following ! 907: the same rule given above for identifiers, ! 908: this is modified to ``pointer to ! 909: \fBchar\fR'' and ! 910: the ! 911: result is a pointer to the first character ! 912: in the string. ! 913: (There is an exception in certain initializers; ! 914: see ``Initialization'' under ``DECLARATIONS.'') ! 915: .PP ! 916: A parenthesized expression is a primary expression ! 917: whose type and value are identical ! 918: to those of the unadorned expression. ! 919: The presence of parentheses does ! 920: not affect whether the expression is an ! 921: lvalue. ! 922: .PP ! 923: A primary expression followed by an expression in square ! 924: brackets is a primary expression. ! 925: The intuitive meaning is that of a subscript. ! 926: Usually, the primary expression has type ``pointer to .\|.\|.'', ! 927: the subscript expression is ! 928: \fBint\fR, ! 929: and the type of the result is ``\|.\|.\|.\|''. ! 930: The expression ! 931: .B ! 932: E1[E2] ! 933: .R ! 934: is ! 935: identical (by definition) to ! 936: .B ! 937: \(**((E1)\(plE2))\fR. ! 938: All the clues ! 939: needed to understand ! 940: this notation are contained in this subpart together ! 941: with the discussions ! 942: in ``Unary Operators'' and ``Additive Operators'' on identifiers, ! 943: .B ! 944: \(** ! 945: .R ! 946: and ! 947: .B ! 948: \(pl ! 949: .R ! 950: respectively. ! 951: The implications are summarized under ``Arrays, Pointers, and Subscripting'' ! 952: under ``TYPES REVISITED.'' ! 953: .PP ! 954: A function call is a primary expression followed by parentheses ! 955: containing a possibly ! 956: empty, comma-separated list of expressions ! 957: which constitute the actual arguments to the ! 958: function. ! 959: The primary expression must be of type ``function returning .\|.\|.,'' ! 960: and the result of the function call is of type ``\|.\|.\|.\|''. ! 961: As indicated ! 962: below, a hitherto unseen identifier followed ! 963: immediately by a left parenthesis ! 964: is contextually declared ! 965: to represent a function returning ! 966: an integer; ! 967: thus in the most common case, integer-valued functions ! 968: need not be declared. ! 969: .PP ! 970: Any actual arguments of type ! 971: .B ! 972: float ! 973: .R ! 974: are ! 975: converted to ! 976: .B ! 977: double ! 978: .R ! 979: before the call. ! 980: Any of type ! 981: .B ! 982: char ! 983: .R ! 984: or ! 985: .B ! 986: short ! 987: .R ! 988: are converted to ! 989: .B ! 990: int\fR. ! 991: .R ! 992: Array names are converted to pointers. ! 993: No other conversions are performed automatically; ! 994: in particular, the compiler does not compare ! 995: the types of actual arguments with those of formal ! 996: arguments. ! 997: If conversion is needed, use a cast; ! 998: see ``Unary Operators'' and ``Type Names'' under ! 999: ``DECLARATIONS.'' ! 1000: .PP ! 1001: In preparing for the call to a function, ! 1002: a copy is made of each actual parameter. ! 1003: Thus, all argument passing in C is strictly by value. ! 1004: A function may ! 1005: change the values of its formal parameters, but ! 1006: these changes cannot affect the values ! 1007: of the actual parameters. ! 1008: It is possible ! 1009: to pass a pointer on the understanding ! 1010: that the function may change the value ! 1011: of the object to which the pointer points. ! 1012: An array name is a pointer expression. ! 1013: The order of evaluation of arguments is undefined by the language; ! 1014: take note that the various compilers differ. ! 1015: Recursive calls to any ! 1016: function are permitted. ! 1017: .PP ! 1018: A primary expression followed by a dot followed by an identifier ! 1019: is an expression. ! 1020: The first expression must be a structure or a union, and the identifier ! 1021: must name a member of the structure or union. ! 1022: The value is the named member of the structure or union, and it is ! 1023: an lvalue if the first expression is an lvalue. ! 1024: .PP ! 1025: A primary expression followed by an arrow (built from ! 1026: .B ! 1027: \(mi ! 1028: .R ! 1029: and ! 1030: .B ! 1031: > ! 1032: .R ! 1033: ) ! 1034: followed by an identifier ! 1035: is an expression. ! 1036: The first expression must be a pointer to a structure or a union ! 1037: and the identifier must name a member of that structure or union. ! 1038: The result is an lvalue referring to the named member ! 1039: of the structure or union ! 1040: to which the pointer expression points. ! 1041: Thus the expression ! 1042: .B ! 1043: E1\(mi>MOS ! 1044: .R ! 1045: is the same as ! 1046: .B ! 1047: (\(**E1).MOS\fR. ! 1048: .R ! 1049: Structures and unions are discussed in ! 1050: ``Structure, Union, and Enumeration Declarations'' under ! 1051: ``DECLARATIONS.'' ! 1052: .NH 2 ! 1053: Unary Operators ! 1054: .PP ! 1055: Expressions with unary operators ! 1056: group right to left. ! 1057: .tr ~~ ! 1058: .DS ! 1059: \fIunary-expression: ! 1060: \(** expression ! 1061: & lvalue ! 1062: \(mi expression ! 1063: ! expression ! 1064: \s+2~\s0 expression ! 1065: \(pl\(pl lvalue ! 1066: \(mi\(milvalue ! 1067: lvalue \(pl\(pl ! 1068: lvalue \(mi\(mi ! 1069: ( type-name ) expression\fR ! 1070: sizeof\fI expression\fR ! 1071: sizeof\fI ( type-name )\fR ! 1072: .DE ! 1073: .PP ! 1074: The unary ! 1075: .B ! 1076: \(** ! 1077: .R ! 1078: operator ! 1079: means ! 1080: .I ! 1081: indirection ! 1082: .R ! 1083: ; ! 1084: the expression must be a pointer, and the result ! 1085: is an lvalue referring to the object to ! 1086: which the expression points. ! 1087: If the type of the expression is ``pointer to .\|.\|.,'' ! 1088: the type of the result is ``\|.\|.\|.\|''. ! 1089: .PP ! 1090: The result of the unary ! 1091: .B ! 1092: & ! 1093: .R ! 1094: operator is a pointer ! 1095: to the object referred to by the ! 1096: lvalue. ! 1097: If the type of the lvalue is ``\|.\|.\|.\|'', ! 1098: the type of the result is ``pointer to .\|.\|.''. ! 1099: .PP ! 1100: The result ! 1101: of the unary ! 1102: .B ! 1103: \(mi ! 1104: .R ! 1105: operator ! 1106: is the negative of its operand. ! 1107: The usual arithmetic conversions are performed. ! 1108: The negative of an unsigned quantity is computed by ! 1109: subtracting its value from ! 1110: 2\v'-0.5'\fIn\fR\^\v'0.5' where \fIn\fR\^ is the number of bits in ! 1111: the corresponding signed type. ! 1112: .sp ! 1113: .tr ~~ ! 1114: There is no unary ! 1115: .B ! 1116: \(pl ! 1117: .R ! 1118: operator. ! 1119: .PP ! 1120: The result of the logical negation operator ! 1121: .B ! 1122: ! ! 1123: .R ! 1124: is one if the value of its operand is zero, zero if the value of its ! 1125: operand is nonzero. ! 1126: The type of the result is ! 1127: .B ! 1128: int\fR. ! 1129: .R ! 1130: It is applicable to any arithmetic type ! 1131: or to pointers. ! 1132: .PP ! 1133: The ! 1134: .B ! 1135: \s+2~\s0 ! 1136: .R ! 1137: operator yields the one's complement of its operand. ! 1138: The usual arithmetic conversions are performed. ! 1139: The type of the operand must be integral. ! 1140: .PP ! 1141: The object referred to by the lvalue operand of prefix ! 1142: .B ! 1143: \(pl\(pl ! 1144: .R ! 1145: is incremented. ! 1146: The value is the new value of the operand ! 1147: but is not an lvalue. ! 1148: The expression ! 1149: .B ! 1150: \(pl\(plx ! 1151: .R ! 1152: is equivalent to ! 1153: \fBx=x\(pl1\fR. ! 1154: See the discussions ``Additive Operators'' and ``Assignment ! 1155: Operators'' for information on conversions. ! 1156: .PP ! 1157: The lvalue operand of prefix ! 1158: .B ! 1159: \(mi\(mi ! 1160: .R ! 1161: is decremented ! 1162: analogously to the ! 1163: prefix ! 1164: .B ! 1165: \(pl\(pl ! 1166: .R ! 1167: operator. ! 1168: .PP ! 1169: When postfix ! 1170: .B ! 1171: \(pl\(pl ! 1172: .R ! 1173: is applied to an lvalue, ! 1174: the result is the value of the object referred to by the lvalue. ! 1175: After the result is noted, the object ! 1176: is incremented in the same ! 1177: manner as for the prefix ! 1178: .B ! 1179: \(pl\(pl ! 1180: .R ! 1181: operator. ! 1182: The type of the result is the same as the type of the lvalue expression. ! 1183: .PP ! 1184: When postfix ! 1185: .B ! 1186: \(mi\(mi ! 1187: .R ! 1188: is applied to an lvalue, ! 1189: the result is the value of the object referred to by the lvalue. ! 1190: After the result is noted, the object ! 1191: is decremented in the manner as for the prefix ! 1192: .B ! 1193: \(mi\(mi ! 1194: .R ! 1195: operator. ! 1196: The type of the result is the same as the type of the lvalue ! 1197: expression. ! 1198: .PP ! 1199: An expression preceded by the parenthesized name of a data type ! 1200: causes conversion of the value of the expression to the named type. ! 1201: This construction is called a ! 1202: .I ! 1203: cast\fR. ! 1204: .R ! 1205: Type names are described in ``Type Names'' under ``Declarations.'' ! 1206: .PP ! 1207: The ! 1208: .B ! 1209: sizeof ! 1210: .R ! 1211: operator yields the size ! 1212: in bytes of its operand. ! 1213: (A ! 1214: .I ! 1215: byte ! 1216: .R ! 1217: is undefined by the language ! 1218: except in terms of the value of ! 1219: .B ! 1220: sizeof\fR. ! 1221: .R ! 1222: However, in all existing implementations, ! 1223: a byte is the space required to hold a ! 1224: \fBchar.\fR) ! 1225: When applied to an array, the result is the total ! 1226: number of bytes in the array. ! 1227: The size is determined from ! 1228: the declarations of ! 1229: the objects in the expression. ! 1230: This expression is semantically an ! 1231: .B ! 1232: unsigned ! 1233: .R ! 1234: constant and may ! 1235: be used anywhere a constant is required. ! 1236: Its major use is in communication with routines ! 1237: like storage allocators and I/O systems. ! 1238: .PP ! 1239: The ! 1240: .B ! 1241: sizeof ! 1242: .R ! 1243: operator ! 1244: may also be applied to a parenthesized type name. ! 1245: In that case it yields the size in bytes of an object ! 1246: of the indicated type. ! 1247: .PP ! 1248: The construction ! 1249: \fBsizeof(\fItype\|\fR\^)\fR\^ ! 1250: is taken to be a unit, ! 1251: so the expression ! 1252: \fBsizeof(\fItype\|\fB)-2\fR ! 1253: is the same as ! 1254: \fB(sizeof(\fItype\|\fB))-2\fR. ! 1255: .NH 2 ! 1256: Multiplicative Operators ! 1257: .PP ! 1258: The multiplicative operators ! 1259: \fB\(**\fR, ! 1260: \fB/\fR, ! 1261: and ! 1262: .B ! 1263: % ! 1264: .R ! 1265: group left to right. ! 1266: The usual arithmetic conversions are performed. ! 1267: .DS ! 1268: \fImultiplicative expression: ! 1269: expression \(** expression ! 1270: expression / expression ! 1271: expression % expression\fR ! 1272: .DE ! 1273: .PP ! 1274: The binary ! 1275: .B ! 1276: \(** ! 1277: .R ! 1278: operator indicates multiplication. ! 1279: The ! 1280: .B ! 1281: \(** ! 1282: .R ! 1283: operator is associative, ! 1284: and expressions with several multiplications at the same ! 1285: level may be rearranged by the compiler. ! 1286: The binary ! 1287: .B ! 1288: / ! 1289: .R ! 1290: operator indicates division. ! 1291: .PP ! 1292: The binary ! 1293: .B ! 1294: % ! 1295: .R ! 1296: operator yields the remainder ! 1297: from the division of the first expression by the second. ! 1298: The operands must be integral. ! 1299: .PP ! 1300: When positive integers are divided, truncation is toward 0; ! 1301: but the form of truncation is machine-dependent ! 1302: if either operand is negative. ! 1303: On all machines covered by this manual, ! 1304: the remainder has the same sign as the dividend. ! 1305: It is always true that ! 1306: .B ! 1307: (a/b)\(**b\ \(pl a%b ! 1308: .R ! 1309: is equal to ! 1310: .B ! 1311: a ! 1312: .R ! 1313: (if ! 1314: .B ! 1315: b ! 1316: .R ! 1317: is not 0). ! 1318: .NH 2 ! 1319: Additive Operators ! 1320: .PP ! 1321: The additive operators ! 1322: .B ! 1323: \(pl ! 1324: .R ! 1325: and ! 1326: .B ! 1327: \(mi ! 1328: .R ! 1329: group left to right. ! 1330: The usual arithmetic conversions are performed. ! 1331: There are some additional type possibilities for each operator. ! 1332: .DS ! 1333: \fIadditive-expression: ! 1334: expression \(pl expression ! 1335: expression \(mi expression\fR ! 1336: .DE ! 1337: .PP ! 1338: The result of the ! 1339: .B ! 1340: \(pl ! 1341: .R ! 1342: operator is the sum of the operands. ! 1343: A pointer to an object in an array and ! 1344: a value of any integral type ! 1345: may be added. ! 1346: The latter is in all cases converted to ! 1347: an address offset ! 1348: by multiplying it ! 1349: by the length of the object to which the ! 1350: pointer points. ! 1351: The result is a pointer ! 1352: of the same type as the original pointer ! 1353: which points to another object in the same array, ! 1354: appropriately offset from the original object. ! 1355: Thus if ! 1356: .B ! 1357: P ! 1358: .R ! 1359: is a pointer ! 1360: to an object in an array, the expression ! 1361: .B ! 1362: P\(pl1 ! 1363: .R ! 1364: is a pointer ! 1365: to the next object in the array. ! 1366: No further type combinations are allowed for pointers. ! 1367: .PP ! 1368: The ! 1369: .B ! 1370: \(pl ! 1371: .R ! 1372: operator is associative, ! 1373: and expressions with several additions at the same level may ! 1374: be rearranged by the compiler. ! 1375: .PP ! 1376: The result of the ! 1377: .B ! 1378: \(mi ! 1379: .R ! 1380: operator is the difference of the operands. ! 1381: The usual arithmetic conversions are performed. ! 1382: Additionally, ! 1383: a value of any integral type ! 1384: may be subtracted from a pointer, ! 1385: and then the same conversions for addition apply. ! 1386: .PP ! 1387: If two pointers to objects of the same type are subtracted, ! 1388: the result is converted ! 1389: (by division by the length of the object) ! 1390: to an ! 1391: .B ! 1392: int ! 1393: .R ! 1394: representing the number of ! 1395: objects separating ! 1396: the pointed-to objects. ! 1397: This conversion will in general give unexpected ! 1398: results unless the pointers point ! 1399: to objects in the same array, since pointers, even ! 1400: to objects of the same type, do not necessarily differ ! 1401: by a multiple of the object length. ! 1402: .NH 2 ! 1403: Shift Operators ! 1404: .PP ! 1405: The shift operators ! 1406: .B ! 1407: << ! 1408: .R ! 1409: and ! 1410: .B ! 1411: >> ! 1412: .R ! 1413: group left to right. ! 1414: Both perform the usual arithmetic conversions on their operands, ! 1415: each of which must be integral. ! 1416: Then the right operand is converted to ! 1417: \fBint\fR; ! 1418: the type of the result is that of the left operand. ! 1419: The result is undefined if the right operand is negative ! 1420: or greater than or equal to the length of the object in bits. ! 1421: On the VAX a negative right operand is interpreted as reversing ! 1422: the direction of the shift. ! 1423: .DS ! 1424: \fIshift-expression: ! 1425: expression << expression ! 1426: expression >> expression\fR ! 1427: .DE ! 1428: .PP ! 1429: The value of ! 1430: .B ! 1431: E1<<E2 ! 1432: .R ! 1433: is ! 1434: .B ! 1435: E1 ! 1436: .R ! 1437: (interpreted as a bit ! 1438: pattern) left-shifted ! 1439: .B ! 1440: E2 ! 1441: .R ! 1442: bits. ! 1443: Vacated bits are 0 filled. ! 1444: The value of ! 1445: .B ! 1446: E1>>E2 ! 1447: .R ! 1448: is ! 1449: .B ! 1450: E1 ! 1451: .R ! 1452: right-shifted ! 1453: .B ! 1454: E2 ! 1455: .R ! 1456: bit positions. ! 1457: The right shift is guaranteed to be logical ! 1458: (0 fill) ! 1459: if ! 1460: .B ! 1461: E1 ! 1462: .R ! 1463: is ! 1464: \fBunsigned\fR; ! 1465: otherwise, it may be ! 1466: arithmetic. ! 1467: .NH 2 ! 1468: Relational Operators ! 1469: .PP ! 1470: The relational operators group left to right. ! 1471: .DS ! 1472: \fIrelational-expression: ! 1473: expression < expression ! 1474: expression > expression ! 1475: expression <= expression ! 1476: expression >= expression\fR ! 1477: .DE ! 1478: .PP ! 1479: The operators ! 1480: .B ! 1481: < ! 1482: .R ! 1483: (less than), ! 1484: .B ! 1485: > ! 1486: .R ! 1487: (greater than), \fB<=\fR ! 1488: (less than ! 1489: or equal to), and ! 1490: .B ! 1491: >= ! 1492: .R ! 1493: (greater than or equal to) ! 1494: all yield 0 if the specified relation is false ! 1495: and 1 if it is true. ! 1496: The type of the result is ! 1497: .B ! 1498: int\fR. ! 1499: The usual arithmetic conversions are performed. ! 1500: Two pointers may be compared; ! 1501: the result depends on the relative locations in the address space ! 1502: of the pointed-to objects. ! 1503: Pointer comparison is portable only when the pointers point to objects ! 1504: in the same array. ! 1505: .NH 2 ! 1506: Equality Operators ! 1507: .PP ! 1508: .DS ! 1509: \fIequality-expression: ! 1510: expression == expression ! 1511: expression != expression\fR ! 1512: .DE ! 1513: .PP ! 1514: The ! 1515: .B ! 1516: == ! 1517: .R ! 1518: (equal to) and the ! 1519: .B ! 1520: != ! 1521: .R ! 1522: (not equal to) operators ! 1523: are exactly analogous to the relational ! 1524: operators except for their lower ! 1525: precedence. ! 1526: (Thus ! 1527: .B ! 1528: a<b\ ==\ c<d ! 1529: .R ! 1530: is 1 whenever ! 1531: .B ! 1532: a<b ! 1533: .R ! 1534: and ! 1535: .B ! 1536: c<d ! 1537: .R ! 1538: have the same truth value). ! 1539: .PP ! 1540: A pointer may be compared to an integer ! 1541: only if the ! 1542: integer is the constant 0. ! 1543: A pointer to which 0 has been assigned is guaranteed ! 1544: not to point to any object ! 1545: and will appear to be equal to 0. ! 1546: In conventional usage, such a pointer is considered to be null. ! 1547: .NH 2 ! 1548: Bitwise \s-1AND\s0 Operator ! 1549: .PP ! 1550: .DS ! 1551: \fIand-expression: ! 1552: expression & expression\fR ! 1553: .DE ! 1554: .PP ! 1555: The ! 1556: .B ! 1557: & ! 1558: .R ! 1559: operator is associative, ! 1560: and expressions involving ! 1561: .B ! 1562: & ! 1563: .R ! 1564: may be rearranged. ! 1565: The usual arithmetic conversions are performed. ! 1566: The result is the bitwise ! 1567: AND ! 1568: function of the operands. ! 1569: The operator applies only to integral ! 1570: operands. ! 1571: .NH 2 ! 1572: Bitwise Exclusive \s-1OR\s0 Operator ! 1573: .DS ! 1574: \fIexclusive-or-expression: ! 1575: expression ^ expression\fR ! 1576: .DE ! 1577: .PP ! 1578: The ! 1579: .B ! 1580: ^ ! 1581: .R ! 1582: operator is associative, ! 1583: and expressions involving ! 1584: .B ! 1585: ^ ! 1586: .R ! 1587: may be rearranged. ! 1588: The usual arithmetic conversions are performed; ! 1589: the result is ! 1590: the bitwise exclusive ! 1591: OR ! 1592: function of ! 1593: the operands. ! 1594: The operator applies only to integral ! 1595: operands. ! 1596: .NH 2 ! 1597: Bitwise Inclusive \s-1OR\s0 Operator ! 1598: .DS ! 1599: \fIinclusive-or-expression: ! 1600: expression | expression\fR ! 1601: .DE ! 1602: .PP ! 1603: The ! 1604: .B ! 1605: | ! 1606: .R ! 1607: operator is associative, ! 1608: and expressions involving ! 1609: .B ! 1610: | ! 1611: .R ! 1612: may be rearranged. ! 1613: The usual arithmetic conversions are performed; ! 1614: the result is the bitwise inclusive ! 1615: OR ! 1616: function of its operands. ! 1617: The operator applies only to integral ! 1618: operands. ! 1619: .NH 2 ! 1620: Logical \s-1AND\s0 Operator ! 1621: .DS ! 1622: \fIlogical-and-expression: ! 1623: expression && expression\fR ! 1624: .DE ! 1625: .PP ! 1626: The ! 1627: .B ! 1628: && ! 1629: .R ! 1630: operator groups left to right. ! 1631: It returns 1 if both its operands ! 1632: evaluate to nonzero, 0 otherwise. ! 1633: Unlike ! 1634: \fB&\fR, ! 1635: .B ! 1636: && ! 1637: .R ! 1638: guarantees left to right ! 1639: evaluation; moreover, the second operand is not evaluated ! 1640: if the first operand is 0. ! 1641: .PP ! 1642: The operands need not have the same type, but each ! 1643: must have one of the fundamental ! 1644: types or be a pointer. ! 1645: The result is always ! 1646: .B ! 1647: int\fR. ! 1648: .R ! 1649: .NH 2 ! 1650: Logical \s-1OR\s0 Operator ! 1651: .DS ! 1652: \fIlogical-or-expression: ! 1653: expression || expression\fR ! 1654: .DE ! 1655: .PP ! 1656: The ! 1657: .B ! 1658: || ! 1659: .R ! 1660: operator groups left to right. ! 1661: It returns 1 if either of its operands ! 1662: evaluates to nonzero, 0 otherwise. ! 1663: Unlike ! 1664: \fB|\fR, ! 1665: .B ! 1666: || ! 1667: .R ! 1668: guarantees left to right evaluation; moreover, ! 1669: the second operand is not evaluated ! 1670: if the value of the first operand is nonzero. ! 1671: .PP ! 1672: The operands need not have the same type, but each ! 1673: must ! 1674: have one of the fundamental types ! 1675: or be a pointer. ! 1676: The result is always ! 1677: .B ! 1678: int\fR. ! 1679: .R ! 1680: .NH 2 ! 1681: Conditional Operator ! 1682: .DS ! 1683: \fIconditional-expression: ! 1684: expression ? expression : expression\fR ! 1685: .DE ! 1686: .PP ! 1687: Conditional expressions group right to left. ! 1688: The first expression is evaluated; ! 1689: and if it is nonzero, the result is the value of the ! 1690: second expression, otherwise that of third expression. ! 1691: If possible, the usual arithmetic conversions are performed ! 1692: to bring the second and third expressions to a common type. ! 1693: If both are structures or unions of the same type, ! 1694: the result has the type of the structure or union. ! 1695: If both pointers are of the same type, ! 1696: the result has the common type. ! 1697: Otherwise, one must be a pointer and the other the constant 0, ! 1698: and the result has the type of the pointer. ! 1699: Only one of the second and third ! 1700: expressions is evaluated. ! 1701: .NH 2 ! 1702: Assignment Operators ! 1703: .PP ! 1704: There are a number of assignment operators, ! 1705: all of which group right to left. ! 1706: All require an lvalue as their left operand, ! 1707: and the type of an assignment expression is that ! 1708: of its left operand. ! 1709: The value is the value stored in the ! 1710: left operand after the assignment has taken place. ! 1711: The two parts of a compound assignment operator are separate ! 1712: tokens. ! 1713: .DS ! 1714: \fIassignment-expression: ! 1715: lvalue = expression ! 1716: lvalue \(pl= expression ! 1717: lvalue \(mi= expression ! 1718: lvalue \(**= expression ! 1719: lvalue /= expression ! 1720: lvalue %= expression ! 1721: lvalue >>= expression ! 1722: lvalue <<= expression ! 1723: lvalue &= expression ! 1724: lvalue ^= expression ! 1725: lvalue |= expression\fR ! 1726: .DE ! 1727: .PP ! 1728: In the simple assignment with ! 1729: \fB=\fR, ! 1730: the value of the expression replaces that of the object ! 1731: referred ! 1732: to by the lvalue. ! 1733: If both operands have arithmetic type, ! 1734: the right operand is converted to the type of the left ! 1735: preparatory to the assignment. ! 1736: Second, both operands may be structures or unions of the same type. ! 1737: Finally, if the left operand is a pointer, the right operand must in general be a pointer ! 1738: of the same type. ! 1739: However, the constant 0 may be assigned to a pointer; ! 1740: it is guaranteed that this value will produce a null ! 1741: pointer distinguishable from a pointer to any object. ! 1742: .PP ! 1743: The behavior of an expression ! 1744: of the form ! 1745: \fBE1\fR\^ \fIop\fR\^ = \fBE2\fR\^ ! 1746: may be inferred by ! 1747: taking it as equivalent to ! 1748: \fBE1 = E1 \fIop\fR\^ (\fBE2\fR\^); ! 1749: however, ! 1750: .B ! 1751: E1 ! 1752: .R ! 1753: is evaluated only once. ! 1754: In ! 1755: .B ! 1756: \(pl= ! 1757: .R ! 1758: and ! 1759: \fB\(mi=\fR, ! 1760: the left operand may be a pointer; in which case, the (integral) right ! 1761: operand is converted as explained ! 1762: in ``Additive Operators.'' ! 1763: All right operands and all nonpointer left operands must ! 1764: have arithmetic type. ! 1765: .NH 2 ! 1766: Comma Operator ! 1767: .DS ! 1768: \fIcomma-expression: ! 1769: expression , expression\fR ! 1770: .DE ! 1771: .PP ! 1772: A pair of expressions separated by a comma is evaluated ! 1773: left to right, and the value of the left expression is ! 1774: discarded. ! 1775: The type and value of the result are the ! 1776: type and value of the right operand. ! 1777: This operator groups left to right. ! 1778: In contexts where comma is given a special meaning, ! 1779: e.g., in lists of actual arguments ! 1780: to functions (see ``Primary Expressions'') and lists ! 1781: of initializers (see ``Initialization'' under ``DECLARATIONS''), ! 1782: the comma operator as described in this subpart ! 1783: can only appear in parentheses. For example, ! 1784: .DS ! 1785: \fBf(a, (t=3, t\(pl2), c)\fR ! 1786: .DE ! 1787: .LP ! 1788: has three arguments, the second of which has the value 5. ! 1789: .NH 1 ! 1790: Declarations ! 1791: .PP ! 1792: Declarations are used to specify the interpretation ! 1793: which C gives to each identifier; they do not necessarily ! 1794: reserve storage associated with the identifier. ! 1795: Declarations have the form ! 1796: .DS ! 1797: \fIdeclaration: ! 1798: decl-specifiers declarator-list\v'0.5'\s-2opt\s0\v'-0.5' ;\fR ! 1799: .DE ! 1800: .PP ! 1801: The declarators in the declarator-list ! 1802: contain the identifiers being declared. ! 1803: The decl-specifiers ! 1804: consist of a sequence of type and storage class specifiers. ! 1805: .DS ! 1806: \fIdecl-specifiers: ! 1807: type-specifier decl-specifiers\v'0.5'\s-2opt\s0\v'-0.5' ! 1808: sc-specifier decl-specifiers\v'0.5'\s-2opt\s0\v'-0.5'\fR ! 1809: .DE ! 1810: .PP ! 1811: The list must be self-consistent in a way described below. ! 1812: .NH 2 ! 1813: Storage Class Specifiers ! 1814: .PP ! 1815: The sc-specifiers are: ! 1816: .DS ! 1817: \fIsc-specifier:\fB ! 1818: auto ! 1819: static ! 1820: extern ! 1821: register ! 1822: typedef\fR ! 1823: .DE ! 1824: .PP ! 1825: The ! 1826: .B ! 1827: typedef ! 1828: .R ! 1829: specifier does not reserve storage ! 1830: and is called a ``storage class specifier'' only for syntactic convenience. ! 1831: See ``Typedef'' for more information. ! 1832: The meanings of the various storage classes were discussed in ``Names.'' ! 1833: .PP ! 1834: The ! 1835: \fBauto\fR, ! 1836: \fBstatic\fR, ! 1837: and ! 1838: .B ! 1839: register ! 1840: .R ! 1841: declarations also serve as definitions ! 1842: in that they cause an appropriate amount of storage to be reserved. ! 1843: In the ! 1844: .B ! 1845: extern ! 1846: .R ! 1847: case, ! 1848: there must be an external definition (see ``External Definitions'') ! 1849: for the given identifiers ! 1850: somewhere outside the function in which they are declared. ! 1851: .PP ! 1852: A ! 1853: .B ! 1854: register ! 1855: .R ! 1856: declaration is best thought of as an ! 1857: .B ! 1858: auto ! 1859: .R ! 1860: declaration, together with a hint to the compiler ! 1861: that the variables declared will be heavily used. ! 1862: Only the first few ! 1863: such declarations in each function are effective. ! 1864: Moreover, only variables of certain types will be stored in registers; ! 1865: on the ! 1866: PDP-11, ! 1867: they are ! 1868: .B ! 1869: int ! 1870: .R ! 1871: or pointer. ! 1872: One other restriction applies to register variables: ! 1873: the address-of operator ! 1874: .B ! 1875: & ! 1876: .R ! 1877: cannot be applied to them. ! 1878: Smaller, faster programs can be expected if register declarations ! 1879: are used appropriately, ! 1880: but future improvements in code generation ! 1881: may render them unnecessary. ! 1882: .PP ! 1883: At most, one sc-specifier may be given in a declaration. ! 1884: If the sc-specifier is missing from a declaration, it ! 1885: is taken to be ! 1886: .B ! 1887: auto ! 1888: .R ! 1889: inside a function, ! 1890: .B ! 1891: extern ! 1892: .R ! 1893: outside. ! 1894: Exception: ! 1895: functions are never ! 1896: automatic. ! 1897: .NH 2 ! 1898: Type Specifiers ! 1899: .PP ! 1900: The type-specifiers are ! 1901: .DS ! 1902: \fItype-specifier: ! 1903: struct-or-union-specifier ! 1904: typedef-name ! 1905: enum-specifier ! 1906: basic-type-specifier: ! 1907: basic-type ! 1908: basic-type basic-type-specifiers ! 1909: basic-type:\fB ! 1910: char ! 1911: short ! 1912: int ! 1913: long ! 1914: unsigned ! 1915: float ! 1916: double ! 1917: void\fR ! 1918: .DE ! 1919: .PP ! 1920: At most one of the words \fBlong\fR or \fBshort\fR ! 1921: may be specified in conjunction with \fBint\fR; ! 1922: the meaning is the same as if \fBint\fR were not mentioned. ! 1923: The word \fBlong\fR may be specified in conjunction with ! 1924: \fBfloat\fR; ! 1925: the meaning is the same as \fBdouble\fR. ! 1926: The word \fBunsigned\fR may be specified alone, or ! 1927: in conjunction with \fBint\fR or any of its short ! 1928: or long varieties, or with \fBchar\fR. ! 1929: .PP ! 1930: Otherwise, at most on type-specifier may be ! 1931: given in a declaration. ! 1932: In particular, adjectival use of \fBlong\fR, ! 1933: \fBshort\fR, or \fBunsigned\fR is not permitted ! 1934: with \fBtypedef\fR names. ! 1935: If the type-specifier is missing from a declaration, ! 1936: it is taken to be \fBint\fR. ! 1937: .PP ! 1938: Specifiers for structures, unions, and enumerations are discussed in ! 1939: ``Structure, Union, and Enumeration Declarations.'' ! 1940: Declarations with ! 1941: .B ! 1942: typedef ! 1943: .R ! 1944: names are discussed in ``Typedef.'' ! 1945: .NH 2 ! 1946: Declarators ! 1947: .PP ! 1948: The declarator-list appearing in a declaration ! 1949: is a comma-separated sequence of declarators, ! 1950: each of which may have an initializer. ! 1951: .DS ! 1952: \fIdeclarator-list: ! 1953: init-declarator ! 1954: init-declarator , declarator-list ! 1955: .DE ! 1956: .DS ! 1957: \fIinit-declarator: ! 1958: declarator initializer\v'0.5'\s-2opt\s0\v'-0.5'\fR ! 1959: .DE ! 1960: .PP ! 1961: Initializers are discussed in ``Initialization''. ! 1962: The specifiers in the declaration ! 1963: indicate the type and storage class of the objects to which the ! 1964: declarators refer. ! 1965: Declarators have the syntax: ! 1966: .DS ! 1967: \fIdeclarator: ! 1968: identifier ! 1969: ( declarator ) ! 1970: \(** declarator ! 1971: declarator () ! 1972: declarator [ constant-expression\v'0.5'\s-2opt\s0\v'-0.5' ]\fR ! 1973: .DE ! 1974: .PP ! 1975: The grouping is ! 1976: the same as in expressions. ! 1977: .NH 2 ! 1978: Meaning of Declarators ! 1979: .PP ! 1980: Each declarator is taken to be ! 1981: an assertion that when a construction of ! 1982: the same form as the declarator appears in an expression, ! 1983: it yields an object of the indicated ! 1984: type and storage class. ! 1985: .PP ! 1986: Each declarator contains exactly one identifier; it is this identifier that ! 1987: is declared. ! 1988: If an unadorned identifier appears ! 1989: as a declarator, then it has the type ! 1990: indicated by the specifier heading the declaration. ! 1991: .PP ! 1992: A declarator in parentheses is identical to the unadorned declarator, ! 1993: but the binding of complex declarators may be altered by parentheses. ! 1994: See the examples below. ! 1995: .PP ! 1996: Now imagine a declaration ! 1997: .DS ! 1998: \fBT D1\fR ! 1999: .DE ! 2000: .LP ! 2001: where ! 2002: .B ! 2003: T ! 2004: .R ! 2005: is a type-specifier (like ! 2006: \fBint\fR, ! 2007: etc.) ! 2008: and ! 2009: .B ! 2010: D1 ! 2011: .R ! 2012: is a declarator. ! 2013: Suppose this declaration makes the identifier have type ! 2014: ``\|.\|.\|.\| ! 2015: .B ! 2016: T ! 2017: .R ! 2018: ,'' ! 2019: where the ``\|.\|.\|.\|'' is empty if ! 2020: .B ! 2021: D1 ! 2022: .R ! 2023: is just a plain identifier ! 2024: (so that the type of ! 2025: .B ! 2026: x ! 2027: .R ! 2028: in ! 2029: \fB`int x''\fR ! 2030: is just ! 2031: \fBint\fR). ! 2032: Then if ! 2033: .B ! 2034: D1 ! 2035: .R ! 2036: has the form ! 2037: .DS ! 2038: \fB\(**D\fR ! 2039: .DE ! 2040: .LP ! 2041: the type of the contained identifier is ! 2042: ``\|.\|.\|.\| pointer to ! 2043: .B ! 2044: T ! 2045: .R ! 2046: \&.'' ! 2047: .PP ! 2048: If ! 2049: .B ! 2050: D1 ! 2051: .R ! 2052: has the form ! 2053: .DS ! 2054: \fBD\|(\|\|)\|\fR ! 2055: .DE ! 2056: .LP ! 2057: then the contained identifier has the type ! 2058: ``\|.\|.\|. function returning ! 2059: \fBT\fR.'' ! 2060: .LP ! 2061: If ! 2062: .B ! 2063: D1 ! 2064: .R ! 2065: has the form ! 2066: .DS ! 2067: \fBD\|[\|\fIconstant-expression\fB\|]\fR ! 2068: .DE ! 2069: .LP ! 2070: or ! 2071: .DS ! 2072: \fBD\|[\|]\|\fR ! 2073: .DE ! 2074: .LP ! 2075: then the contained identifier has type ! 2076: ``\|.\|.\|.\| array of ! 2077: \fBT\fR.'' ! 2078: In the first case, the constant ! 2079: expression ! 2080: is an expression ! 2081: whose value is determinable at compile time ! 2082: , whose type is ! 2083: .B ! 2084: int\fR, ! 2085: and whose value is positive. ! 2086: (Constant expressions are defined precisely in ``Constant Expressions.'') ! 2087: When several ``array of'' specifications are adjacent, a multidimensional ! 2088: array is created; ! 2089: the constant expressions which specify the bounds ! 2090: of the arrays may be missing only for the first member of the sequence. ! 2091: This elision is useful when the array is external ! 2092: and the actual definition, which allocates storage, ! 2093: is given elsewhere. ! 2094: The first constant expression may also be omitted ! 2095: when the declarator is followed by initialization. ! 2096: In this case the size is calculated from the number ! 2097: of initial elements supplied. ! 2098: .PP ! 2099: An array may be constructed from one of the basic types, from a pointer, ! 2100: from a structure or union, ! 2101: or from another array (to generate a multidimensional array). ! 2102: .PP ! 2103: Not all the possibilities ! 2104: allowed by the syntax above are actually ! 2105: permitted. ! 2106: The restrictions are as follows: ! 2107: functions may not return ! 2108: arrays or functions ! 2109: although they may return pointers; ! 2110: there are no arrays of functions although ! 2111: there may be arrays of pointers to functions. ! 2112: Likewise, a structure or union may not contain a function; ! 2113: but it may contain a pointer to a function. ! 2114: .PP ! 2115: As an example, the declaration ! 2116: .DS ! 2117: \fBint i, \(**ip, f(), \(**fip(), (\(**pfi)();\fR ! 2118: .DE ! 2119: .LP ! 2120: declares an integer ! 2121: \fBi\fR, ! 2122: a pointer ! 2123: .B ! 2124: ip ! 2125: .R ! 2126: to an integer, ! 2127: a function ! 2128: .B ! 2129: f ! 2130: .R ! 2131: returning an integer, ! 2132: a function ! 2133: .B ! 2134: fip ! 2135: .R ! 2136: returning a pointer to an integer, ! 2137: and a pointer ! 2138: .B ! 2139: pfi ! 2140: .R ! 2141: to a function which ! 2142: returns an integer. ! 2143: It is especially useful to compare the last two. ! 2144: The binding of ! 2145: .B ! 2146: \(**fip() ! 2147: .R ! 2148: is ! 2149: .B ! 2150: \(**(fip())\fR. ! 2151: .R ! 2152: The declaration suggests, ! 2153: and the same construction in an expression ! 2154: requires, the calling of a function ! 2155: .B ! 2156: fip\fR. ! 2157: .R ! 2158: Using indirection through the (pointer) result ! 2159: to yield an integer. ! 2160: In the declarator ! 2161: \fB(\(**pfi)()\fR, ! 2162: the extra parentheses are necessary, as they are also ! 2163: in an expression, to indicate that indirection through ! 2164: a pointer to a function yields a function, which is then called; ! 2165: it returns an integer. ! 2166: .PP ! 2167: As another example, ! 2168: .DS ! 2169: \fBfloat fa[17], \(**afp[17];\fR ! 2170: .DE ! 2171: .LP ! 2172: declares an array of ! 2173: .B ! 2174: float ! 2175: .R ! 2176: numbers and an array of ! 2177: pointers to ! 2178: .B ! 2179: float ! 2180: .R ! 2181: numbers. ! 2182: Finally, ! 2183: .DS ! 2184: \fBstatic int x3d[3][5][7];\fR ! 2185: .DE ! 2186: .LP ! 2187: declares a static 3-dimensional array of integers, ! 2188: with rank 3\(mu5\(mu7. ! 2189: In complete detail, ! 2190: .B ! 2191: x3d ! 2192: .R ! 2193: is an array of three items; ! 2194: each item is an array of five arrays; ! 2195: each of the latter arrays is an array of seven ! 2196: integers. ! 2197: Any of the expressions ! 2198: \fBx3d\fR, ! 2199: \fBx3d[i]\fR, ! 2200: \fBx3d[i][j]\fR, ! 2201: .B ! 2202: x3d[i][j][k] ! 2203: .R ! 2204: may reasonably appear in an expression. ! 2205: The first three have type ``array'' ! 2206: and the last has type ! 2207: .B ! 2208: int\fR. ! 2209: .R ! 2210: .NH 2 ! 2211: Structure and Union Declarations ! 2212: .PP ! 2213: A structure ! 2214: is an object consisting of a sequence of named members. ! 2215: Each member may have any type. ! 2216: A union is an object which may, at a given time, contain any one ! 2217: of several members. ! 2218: Structure and union specifiers have the same form. ! 2219: .DS ! 2220: \fIstruct-or-union-specifier: ! 2221: struct-or-union { struct-decl-list } ! 2222: struct-or-union identifier { struct-decl-list } ! 2223: struct-or-union identifier ! 2224: .DE ! 2225: .DS ! 2226: \fIstruct-or-union:\fB ! 2227: struct ! 2228: union\fR ! 2229: .DE ! 2230: .PP ! 2231: The ! 2232: struct-decl-list ! 2233: .ne 4 ! 2234: is a sequence of declarations for the members of the structure or union: ! 2235: .DS ! 2236: \fIstruct-decl-list: ! 2237: struct-declaration ! 2238: struct-declaration struct-decl-list ! 2239: .DE ! 2240: .DS ! 2241: \fIstruct-declaration: ! 2242: type-specifier struct-declarator-list ; ! 2243: .DE ! 2244: .DS ! 2245: \fIstruct-declarator-list: ! 2246: struct-declarator ! 2247: struct-declarator , struct-declarator-list\fR ! 2248: .DE ! 2249: .PP ! 2250: In the usual case, a struct-declarator is just a declarator ! 2251: for a member of a structure or union. ! 2252: A structure member may also consist of a specified number of bits. ! 2253: Such a member is also called a ! 2254: .I ! 2255: field ; ! 2256: .R ! 2257: its length, ! 2258: a non-negative constant expression, ! 2259: is set off from the field name by a colon. ! 2260: .DS ! 2261: \fIstruct-declarator: ! 2262: declarator ! 2263: declarator : constant-expression ! 2264: : constant-expression\fR ! 2265: .DE ! 2266: .PP ! 2267: Within a structure, the objects declared ! 2268: have addresses which increase as the declarations ! 2269: are read left to right. ! 2270: Each nonfield member of a structure ! 2271: begins on an addressing boundary appropriate ! 2272: to its type; ! 2273: therefore, there may ! 2274: be unnamed holes in a structure. ! 2275: Field members are packed into machine integers; ! 2276: they do not straddle words. ! 2277: A field which does not fit into the space remaining in a word ! 2278: is put into the next word. ! 2279: No field may be wider than a word. ! 2280: .PP ! 2281: Fields are assigned right to left ! 2282: on the ! 2283: PDP-11 ! 2284: and ! 2285: VAX-11, ! 2286: left to right on the 3B 20. ! 2287: .PP ! 2288: A struct-declarator with no declarator, only a colon and a width, ! 2289: indicates an unnamed field useful for padding to conform ! 2290: to externally-imposed layouts. ! 2291: As a special case, a field with a width of 0 ! 2292: specifies alignment of the next field at an implementation dependant boundary. ! 2293: .PP ! 2294: The language does not restrict the types of things that ! 2295: are declared as fields, ! 2296: but implementations are not required to support any but ! 2297: integer fields. ! 2298: Moreover, ! 2299: even ! 2300: .B ! 2301: int ! 2302: .R ! 2303: fields may be considered to be unsigned. ! 2304: On the ! 2305: PDP-11, ! 2306: fields are not signed and have only integer values; ! 2307: on the ! 2308: VAX-11, ! 2309: fields declared with ! 2310: .B ! 2311: int ! 2312: .R ! 2313: are treated as containing a sign. ! 2314: For these reasons, ! 2315: it is strongly recommended that fields be declared as ! 2316: .B ! 2317: unsigned\fR. ! 2318: .R ! 2319: In all implementations, ! 2320: there are no arrays of fields, ! 2321: and the address-of operator ! 2322: .B ! 2323: & ! 2324: .R ! 2325: may not be applied to them, so that there are no pointers to ! 2326: fields. ! 2327: .PP ! 2328: A union may be thought of as a structure all of whose members ! 2329: begin at offset 0 and whose size is sufficient to contain ! 2330: any of its members. ! 2331: At most, one of the members can be stored in a union ! 2332: at any time. ! 2333: .PP ! 2334: A structure or union specifier of the second form, that is, one of ! 2335: .DS ! 2336: \fBstruct \fIidentifier { struct-decl-list \fR} ! 2337: \fBunion \fIidentifier { struct-decl-list \fR} ! 2338: .DE ! 2339: .LP ! 2340: declares the identifier to be the ! 2341: .I ! 2342: structure tag ! 2343: .R ! 2344: (or union tag) ! 2345: of the structure specified by the list. ! 2346: A subsequent declaration may then use ! 2347: the third form of specifier, one of ! 2348: .DS ! 2349: \fBstruct \fIidentifier\fR ! 2350: \fBunion \fIidentifier\fR ! 2351: .DE ! 2352: .PP ! 2353: Structure tags allow definition of self-referential ! 2354: structures. Structure tags also ! 2355: permit the long part of the declaration to be ! 2356: given once and used several times. ! 2357: It is illegal to declare a structure or union ! 2358: which contains an instance of ! 2359: itself, but a structure or union may contain a pointer to an instance of itself. ! 2360: .PP ! 2361: The third form of a structure or union specifier may be ! 2362: used prior to a declaration which gives the complete specification ! 2363: of the structure or union in situations in which the size ! 2364: of the structure or union is unnecessary. ! 2365: The size is unnecessary in two situations: when a ! 2366: pointer to a structure or union is being declared and ! 2367: when a \fBtypedef\fR name is declared to be a synonym ! 2368: for a structure or union. ! 2369: This, for example, allows the declaration of a pair ! 2370: of structures which contain pointers to each other. ! 2371: .PP ! 2372: The names of members and tags do not conflict ! 2373: with each other or with ordinary variables. ! 2374: A particular name may not be used twice ! 2375: in the same structure, ! 2376: but the same name may be used in several different structures in the same scope. ! 2377: .PP ! 2378: A simple but important example of a structure declaration is ! 2379: the following binary tree structure: ! 2380: .DS ! 2381: \fBstruct tnode ! 2382: { ! 2383: char tword[20]; ! 2384: int count; ! 2385: struct tnode \(**left; ! 2386: struct tnode \(**right; ! 2387: };\fR ! 2388: .DE ! 2389: .LP ! 2390: which contains an array of 20 characters, an integer, and two pointers ! 2391: to similar structures. ! 2392: Once this declaration has been given, the ! 2393: declaration ! 2394: .DS ! 2395: \fBstruct tnode s, \(**sp;\fR ! 2396: .DE ! 2397: .LP ! 2398: declares ! 2399: .B ! 2400: s ! 2401: .R ! 2402: to be a structure of the given sort ! 2403: and ! 2404: .B ! 2405: sp ! 2406: .R ! 2407: to be a pointer to a structure ! 2408: of the given sort. ! 2409: With these declarations, the expression ! 2410: .DS ! 2411: \fBsp->count\fR ! 2412: .DE ! 2413: .LP ! 2414: refers to the ! 2415: .B ! 2416: count ! 2417: .R ! 2418: field of the structure to which ! 2419: .B ! 2420: sp ! 2421: .R ! 2422: points; ! 2423: .DS ! 2424: \fBs.left\fR ! 2425: .DE ! 2426: .LP ! 2427: refers to the left subtree pointer ! 2428: of the structure ! 2429: \fBs\fR; ! 2430: and ! 2431: .DS ! 2432: \fBs.right->tword[0]\fR ! 2433: .DE ! 2434: .LP ! 2435: refers to the first character of the ! 2436: .B ! 2437: tword ! 2438: .R ! 2439: member of the right subtree of ! 2440: .B ! 2441: s\fR. ! 2442: .R ! 2443: .PP ! 2444: .NH 2 ! 2445: Enumeration Declarations ! 2446: .PP ! 2447: Enumeration variables and constants have integral type. ! 2448: .DS ! 2449: \fIenum-specifier:\fB ! 2450: enum\fI { enum-list \fR}\fB ! 2451: enum \fIidentifier { enum-list \fR}\fB ! 2452: enum \fIidentifier ! 2453: .sp ! 2454: enum-list: ! 2455: enumerator ! 2456: enum-list , enumerator ! 2457: .sp ! 2458: enumerator: ! 2459: identifier ! 2460: identifier = constant-expression\fR ! 2461: .DE ! 2462: .PP ! 2463: The identifiers in an enum-list are declared as constants ! 2464: and may appear wherever constants are required. ! 2465: If no enumerators with ! 2466: .B ! 2467: = ! 2468: .R ! 2469: appear, then the values of the ! 2470: corresponding constants begin at 0 and increase by 1 as the declaration is ! 2471: read from left to right. ! 2472: An enumerator with ! 2473: .B ! 2474: = ! 2475: .R ! 2476: gives the associated identifier the value ! 2477: indicated; subsequent identifiers continue the progression from the assigned value. ! 2478: .PP ! 2479: The names of enumerators in the same scope must all be distinct ! 2480: from each other and from those of ordinary variables. ! 2481: .PP ! 2482: The role of the identifier in the enum-specifier ! 2483: is entirely analogous to that of the structure tag ! 2484: in a struct-specifier; it names a particular enumeration. ! 2485: For example, ! 2486: .DS L ! 2487: \fBenum color { chartreuse, burgundy, claret=20, winedark }; ! 2488: \&... ! 2489: enum color \(\(**\(**cp, col; ! 2490: \&... ! 2491: col = claret; ! 2492: cp = &col; ! 2493: \&... ! 2494: if (\(\(**\(**cp == burgundy) ...\fR ! 2495: .DE ! 2496: .LP ! 2497: makes ! 2498: .B ! 2499: color ! 2500: .R ! 2501: the enumeration-tag of a type describing various colors, ! 2502: and then declares ! 2503: .B ! 2504: cp ! 2505: .R ! 2506: as a pointer to an object of that type, ! 2507: and ! 2508: .B ! 2509: col ! 2510: .R ! 2511: as an object of that type. ! 2512: The possible values are drawn from the set {0,1,20,21}. ! 2513: .NH 2 ! 2514: Initialization ! 2515: .PP ! 2516: A declarator may specify an initial value for the ! 2517: identifier being declared. ! 2518: The initializer is preceded by ! 2519: .B ! 2520: = ! 2521: .R ! 2522: and ! 2523: consists of an expression or a list of values nested in braces. ! 2524: .DS ! 2525: \fIinitializer: ! 2526: = expression ! 2527: = { initializer-list } ! 2528: = { initializer-list , } ! 2529: .DE ! 2530: .DS ! 2531: \fIinitializer-list: ! 2532: expression ! 2533: initializer-list , initializer-list\fR ! 2534: { \fIinitializer-list \fR} ! 2535: { \fIinitializer-list\fR , } ! 2536: .DE ! 2537: .PP ! 2538: All the expressions in an initializer ! 2539: for a static or external variable must be constant ! 2540: expressions, which are described in ``CONSTANT EXPRESSIONS'', ! 2541: or expressions which reduce to the address of a previously ! 2542: declared variable, possibly offset by a constant expression. ! 2543: Automatic or register variables may be initialized by arbitrary ! 2544: expressions involving constants and previously declared variables and functions. ! 2545: .PP ! 2546: Static and external variables that are not initialized are ! 2547: guaranteed to start off as zero. ! 2548: Automatic and register variables that are not initialized ! 2549: are guaranteed to start off as garbage. ! 2550: .PP ! 2551: When an initializer applies to a ! 2552: .I ! 2553: scalar ! 2554: .R ! 2555: (a pointer or an object of arithmetic type), ! 2556: it consists of a single expression, perhaps in braces. ! 2557: The initial value of the object is taken from ! 2558: the expression; the same conversions as for assignment are performed. ! 2559: .PP ! 2560: When the declared variable is an ! 2561: .I ! 2562: aggregate ! 2563: .R ! 2564: (a structure or array), ! 2565: the initializer consists of a brace-enclosed, comma-separated list of ! 2566: initializers for the members of the aggregate ! 2567: written in increasing subscript or member order. ! 2568: If the aggregate contains subaggregates, this rule ! 2569: applies recursively to the members of the aggregate. ! 2570: If there are fewer initializers in the list than there are members of the aggregate, ! 2571: then the aggregate is padded with zeros. ! 2572: It is not permitted to initialize unions or automatic aggregates. ! 2573: .PP ! 2574: Braces may in some cases be omitted. ! 2575: If the initializer begins with a left brace, then ! 2576: the succeeding comma-separated list of initializers initializes ! 2577: the members of the aggregate; ! 2578: it is erroneous for there to be more initializers than members. ! 2579: If, however, the initializer does not begin with a left brace, ! 2580: then only enough elements from the list are taken to account ! 2581: for the members of the aggregate; any remaining members ! 2582: are left to initialize the next member of the aggregate of which ! 2583: the current aggregate is a part. ! 2584: .PP ! 2585: A final abbreviation allows a ! 2586: .B ! 2587: char ! 2588: .R ! 2589: array to be initialized by a string. ! 2590: In this case successive characters of the string ! 2591: initialize the members of the array. ! 2592: .PP ! 2593: For example, ! 2594: .DS ! 2595: \fBint x[] = { 1, 3, 5 };\fR ! 2596: .DE ! 2597: .LP ! 2598: declares and initializes ! 2599: .B ! 2600: x ! 2601: .R ! 2602: as a one-dimensional array which has three members, since no size was specified ! 2603: and there are three initializers. ! 2604: .DS ! 2605: \fBfloat y[4][3] = ! 2606: { ! 2607: { 1, 3, 5 }, ! 2608: { 2, 4, 6 }, ! 2609: { 3, 5, 7 }, ! 2610: };\fR ! 2611: .DE ! 2612: .LP ! 2613: is a completely-bracketed initialization: ! 2614: 1, 3, and 5 initialize the first row of ! 2615: the array ! 2616: \fBy[0]\fR, ! 2617: namely ! 2618: \fBy[0][0]\fR, ! 2619: \fBy[0][1]\fR, ! 2620: and ! 2621: .B ! 2622: y[0][2]\fR. ! 2623: .R ! 2624: Likewise, the next two lines initialize ! 2625: .B ! 2626: y[1] ! 2627: .R ! 2628: and ! 2629: .B ! 2630: y[2]\fR. ! 2631: .R ! 2632: The initializer ends early and therefore ! 2633: .B ! 2634: y[3] ! 2635: .R ! 2636: is initialized with 0. ! 2637: Precisely, the same effect could have been achieved by ! 2638: .DS ! 2639: \fBfloat y[4][3] = ! 2640: { ! 2641: 1, 3, 5, 2, 4, 6, 3, 5, 7 ! 2642: };\fR ! 2643: .DE ! 2644: .PP ! 2645: The initializer for ! 2646: .B ! 2647: y ! 2648: .R ! 2649: begins with a left brace but that for ! 2650: .B ! 2651: y[0] ! 2652: .R ! 2653: does not; ! 2654: therefore, three elements from the list are used. ! 2655: Likewise, the next three are taken successively for ! 2656: .B ! 2657: y[1] ! 2658: .R ! 2659: and ! 2660: .B ! 2661: y[2]\fR. ! 2662: .R ! 2663: Also, ! 2664: .DS ! 2665: \fBfloat y[4][3] = ! 2666: { ! 2667: { 1 }, { 2 }, { 3 }, { 4 } ! 2668: };\fR ! 2669: .DE ! 2670: .LP ! 2671: initializes the first column of ! 2672: .B ! 2673: y ! 2674: .R ! 2675: (regarded as a two-dimensional array) ! 2676: and leaves the rest 0. ! 2677: .PP ! 2678: Finally, ! 2679: .DS ! 2680: \fBchar msg[] = "Syntax error on line %s\en";\fR ! 2681: .DE ! 2682: .LP ! 2683: shows a character array whose members are initialized ! 2684: with a string. ! 2685: .NH 2 ! 2686: Type Names ! 2687: .PP ! 2688: In two contexts (to specify type conversions explicitly ! 2689: by means of a cast ! 2690: and as an argument of ! 2691: \fBsizeof\fR), ! 2692: it is desired to supply the name of a data type. ! 2693: This is accomplished using a ``type name'', which in essence ! 2694: is a declaration for an object of that type which omits the name of ! 2695: the object. ! 2696: .DS ! 2697: \fItype-name: ! 2698: type-specifier abstract-declarator ! 2699: .DE ! 2700: .DS ! 2701: \fIabstract-declarator: ! 2702: empty ! 2703: ( abstract-declarator ) ! 2704: \(** abstract-declarator ! 2705: abstract-declarator () ! 2706: abstract-declarator\fR\^ [ \fIconstant-expression\v'0.5'\s-2opt\s0\v'-0.5' \fR\^] ! 2707: .DE ! 2708: .PP ! 2709: To avoid ambiguity, ! 2710: in the construction ! 2711: .DS ! 2712: \fI( abstract-declarator \fR) ! 2713: .DE ! 2714: .LP ! 2715: the ! 2716: abstract-declarator ! 2717: is required to be nonempty. ! 2718: Under this restriction, ! 2719: it is possible to identify uniquely the location in the abstract-declarator ! 2720: where the identifier would appear if the construction were a declarator ! 2721: in a declaration. ! 2722: The named type is then the same as the type of the ! 2723: hypothetical identifier. ! 2724: For example, ! 2725: .DS ! 2726: \fBint ! 2727: int \(** ! 2728: int \(**[3] ! 2729: int (\(**)[3] ! 2730: int \(**() ! 2731: int (\(**)() ! 2732: int (\(**[3])()\fR ! 2733: .DE ! 2734: .LP ! 2735: name respectively the types ``integer,'' ``pointer to integer,'' ! 2736: ``array of three pointers to integers,'' ! 2737: ``pointer to an array of three integers,'' ! 2738: ``function returning pointer to integer,'' ! 2739: ``pointer to function returning an integer,'' ! 2740: and ``array of three pointers to functions returning an integer.'' ! 2741: .NH 2 ! 2742: Typedef ! 2743: .PP ! 2744: Declarations whose ``storage class'' is ! 2745: .B ! 2746: typedef ! 2747: .R ! 2748: do not define storage but instead ! 2749: define identifiers which can be used later ! 2750: as if they were type keywords naming fundamental ! 2751: or derived types. ! 2752: .DS ! 2753: \fItypedef-name:\fR ! 2754: \fIidentifier\fR ! 2755: .DE ! 2756: .PP ! 2757: Within the scope of a declaration involving ! 2758: \fBtypedef\fR, ! 2759: each identifier appearing as part of ! 2760: any declarator therein becomes syntactically ! 2761: equivalent to the type keyword ! 2762: naming the type ! 2763: associated with the identifier ! 2764: in the way described in ``Meaning of Declarators.'' ! 2765: For example, ! 2766: after ! 2767: .DS ! 2768: \fBtypedef int MILES, \(**KLICKSP; ! 2769: typedef struct { double re, im; } complex;\fR ! 2770: .DE ! 2771: .LP ! 2772: the constructions ! 2773: .DS ! 2774: \fBMILES distance; ! 2775: extern KLICKSP metricp; ! 2776: complex z, \(**zp;\fR ! 2777: .DE ! 2778: .LP ! 2779: are all legal declarations; the type of ! 2780: .B ! 2781: distance ! 2782: .R ! 2783: is ! 2784: \fBint\fR, ! 2785: that of ! 2786: .B ! 2787: metricp ! 2788: .R ! 2789: is ``pointer to \fBint\fR, '' ! 2790: and that of ! 2791: .B ! 2792: z ! 2793: .R ! 2794: is the specified structure. ! 2795: The ! 2796: .B ! 2797: zp ! 2798: .R ! 2799: is a pointer to such a structure. ! 2800: .PP ! 2801: The ! 2802: .B ! 2803: typedef ! 2804: .R ! 2805: does not introduce brand-new types, only synonyms for ! 2806: types which could be specified in another way. ! 2807: Thus ! 2808: in the example above ! 2809: .B ! 2810: distance ! 2811: .R ! 2812: is considered to have exactly the same type as ! 2813: any other ! 2814: .B ! 2815: int ! 2816: .R ! 2817: object. ! 2818: .NH 1 ! 2819: Statements ! 2820: .PP ! 2821: Except as indicated, statements are executed in sequence. ! 2822: .NH 2 ! 2823: Expression Statement ! 2824: .PP ! 2825: Most statements are expression statements, which have ! 2826: the form ! 2827: .DS ! 2828: \fIexpression \fR; ! 2829: .DE ! 2830: .PP ! 2831: Usually expression statements are assignments or function ! 2832: calls. ! 2833: .NH 2 ! 2834: Compound Statement or Block ! 2835: .PP ! 2836: So that several statements can be used where one is expected, ! 2837: the compound statement (also, and equivalently, called ``block'') is provided: ! 2838: .DS ! 2839: \fIcompound-statement: ! 2840: { declaration-list\v'0.5'\s-2opt\s0\v'-0.5' statement-list\v'0.5'\s-2opt\s0\v'-0.5' } ! 2841: .DE ! 2842: .DS ! 2843: \fIdeclaration-list: ! 2844: declaration ! 2845: declaration declaration-list ! 2846: .DE ! 2847: .DS ! 2848: \fIstatement-list: ! 2849: statement ! 2850: statement statement-list\fR ! 2851: .DE ! 2852: .PP ! 2853: If any of the identifiers ! 2854: in the declaration-list were previously declared, ! 2855: the outer declaration is pushed down for the duration of the block, ! 2856: after which it resumes its force. ! 2857: .PP ! 2858: Any initializations of ! 2859: .B ! 2860: auto ! 2861: .R ! 2862: or ! 2863: .B ! 2864: register ! 2865: .R ! 2866: variables are performed each time the block is entered at the top. ! 2867: It is currently possible ! 2868: (but a bad practice) ! 2869: to transfer into a block; ! 2870: in that case the initializations are not performed. ! 2871: Initializations of ! 2872: .B ! 2873: static ! 2874: .R ! 2875: variables are performed only once when the program ! 2876: begins execution. ! 2877: Inside a block, ! 2878: .B ! 2879: extern ! 2880: .R ! 2881: declarations do not reserve storage ! 2882: so initialization is not permitted. ! 2883: .NH 2 ! 2884: Conditional Statement ! 2885: .PP ! 2886: The two forms of the conditional statement are ! 2887: .DS ! 2888: \fBif\fR\^ ( \fIexpression\fR\^ ) \fIstatement\fR\^ ! 2889: \fBif\fR\^ ( \fIexpression\fR\^ ) \fIstatement \fBelse \fIstatement\fR\^ ! 2890: .DE ! 2891: .PP ! 2892: In both cases, the expression is evaluated; ! 2893: and if it is nonzero, the first substatement ! 2894: is executed. ! 2895: In the second case, the second substatement is executed ! 2896: if the expression is 0. ! 2897: The ``else'' ambiguity is resolved by connecting ! 2898: an ! 2899: .B ! 2900: else ! 2901: .R ! 2902: with the last encountered ! 2903: \fBelse\fR-less ! 2904: .B ! 2905: if\fR. ! 2906: .R ! 2907: .NH 2 ! 2908: While Statement ! 2909: .PP ! 2910: The ! 2911: .B ! 2912: while ! 2913: .R ! 2914: statement has the form ! 2915: .DS ! 2916: \fBwhile\fR\^ ( \fIexpression\fR\^ ) \fIstatement\fR\^ ! 2917: .DE ! 2918: .PP ! 2919: The substatement is executed repeatedly ! 2920: so long as the value of the ! 2921: expression remains nonzero. ! 2922: The test takes place before each execution of the ! 2923: statement. ! 2924: .NH 2 ! 2925: Do Statement ! 2926: .PP ! 2927: The ! 2928: .B ! 2929: do ! 2930: .R ! 2931: statement has the form ! 2932: .DS ! 2933: \fBdo \fIstatement \fBwhile\fR\^ ( \fIexpression \fR\^) ; ! 2934: .DE ! 2935: .PP ! 2936: The substatement is executed repeatedly until ! 2937: the value of the expression becomes 0. ! 2938: The test takes place after each execution of the ! 2939: statement. ! 2940: .NH 2 ! 2941: For Statement ! 2942: .PP ! 2943: The ! 2944: .B ! 2945: for ! 2946: .R ! 2947: statement has the form: ! 2948: .DS ! 2949: \fBfor\fI ( exp-1\v'0.5'\s-2opt\s0\v'-0.5' ; exp-2\v'0.5'\s-2opt\s0\v'-0.5' ; exp-3\v'0.5'\s-2opt\s0\v'-0.5' ) statement\fR ! 2950: .DE ! 2951: .PP ! 2952: .sp ! 2953: Except for the behavior of \fBcontinue\fR, ! 2954: this statement is equivalent to ! 2955: .DS ! 2956: \fIexp-1 \fR; ! 2957: \fBwhile\fR\^ ( \fIexp-2\ ) \fR\^ ! 2958: { ! 2959: \fIstatement ! 2960: exp-3 ;\fR ! 2961: } ! 2962: .DE ! 2963: .PP ! 2964: Thus the first expression specifies initialization ! 2965: for the loop; the second specifies ! 2966: a test, made before each iteration, such ! 2967: that the loop is exited when the expression becomes ! 2968: 0. ! 2969: The third expression often specifies an incrementing ! 2970: that is performed after each iteration. ! 2971: .PP ! 2972: Any or all of the expressions may be dropped. ! 2973: A missing ! 2974: .I ! 2975: exp-2 ! 2976: .R ! 2977: makes the ! 2978: implied ! 2979: .B ! 2980: while ! 2981: .R ! 2982: clause equivalent to ! 2983: \fBwhile(1)\fR; ! 2984: other missing expressions are simply ! 2985: dropped from the expansion above. ! 2986: .NH 2 ! 2987: Switch Statement ! 2988: .PP ! 2989: The ! 2990: .B ! 2991: switch ! 2992: .R ! 2993: statement causes control to be transferred ! 2994: to one of several statements depending on ! 2995: the value of an expression. ! 2996: It has the form ! 2997: .DS ! 2998: \fBswitch\fR\^ ( \fIexpression\fR\^ ) \fIstatement\fR\^ ! 2999: .DE ! 3000: .PP ! 3001: The usual arithmetic conversion is performed on the ! 3002: expression, but the result must be ! 3003: .B ! 3004: int\fR. ! 3005: .R ! 3006: The statement is typically compound. ! 3007: Any statement within the statement ! 3008: may be labeled with one or more case prefixes ! 3009: as follows: ! 3010: .DS ! 3011: \fBcase \fIconstant-expression \fR: ! 3012: .DE ! 3013: .LP ! 3014: where the constant ! 3015: expression ! 3016: must be ! 3017: .B ! 3018: int\fR. ! 3019: .R ! 3020: No two of the case constants in the same switch ! 3021: may have the same value. ! 3022: Constant expressions are precisely defined in ``CONSTANT EXPRESSIONS.'' ! 3023: .PP ! 3024: There may also be at most one statement prefix of the ! 3025: form ! 3026: .DS ! 3027: \fBdefault :\fR ! 3028: .DE ! 3029: .PP ! 3030: When the ! 3031: .B ! 3032: switch ! 3033: .R ! 3034: statement is executed, its expression ! 3035: is evaluated and compared with each case constant. ! 3036: If one of the case constants is ! 3037: equal to the value of the expression, ! 3038: control is passed to the statement ! 3039: following the matched case prefix. ! 3040: If no case constant matches the expression ! 3041: and if there is a ! 3042: \fBdefault\fR, ! 3043: prefix, control ! 3044: passes to the prefixed ! 3045: statement. ! 3046: If no case matches and if there is no ! 3047: \fBdefault\fR, ! 3048: then ! 3049: none of the statements in the ! 3050: switch is executed. ! 3051: .PP ! 3052: The prefixes ! 3053: .B ! 3054: case ! 3055: .R ! 3056: and ! 3057: .B ! 3058: default ! 3059: .R ! 3060: do not alter the flow of control, ! 3061: which continues unimpeded across such prefixes. ! 3062: To exit from a switch, see ! 3063: ``Break Statement.'' ! 3064: .PP ! 3065: Usually, the statement that is the subject of a switch is compound. ! 3066: Declarations may appear at the head of this ! 3067: statement, ! 3068: but ! 3069: initializations of automatic or register variables ! 3070: are ineffective. ! 3071: .NH 2 ! 3072: Break Statement ! 3073: .PP ! 3074: The statement ! 3075: .DS ! 3076: \fBbreak ;\fR ! 3077: .DE ! 3078: .LP ! 3079: causes termination of the smallest enclosing ! 3080: \fBwhile\fR, ! 3081: \fBdo\fR, ! 3082: \fBfor\fR, ! 3083: or ! 3084: \fBswitch\fR ! 3085: statement; ! 3086: control passes to the ! 3087: statement following the terminated statement. ! 3088: .NH 2 ! 3089: Continue Statement ! 3090: .PP ! 3091: The statement ! 3092: .DS ! 3093: \fBcontinue ;\fR ! 3094: .DE ! 3095: .LP ! 3096: causes control to pass to the loop-continuation portion of the ! 3097: smallest enclosing ! 3098: \fBwhile\fR, ! 3099: \fBdo\fR, ! 3100: or ! 3101: \fBfor\fR ! 3102: statement; that is to the end of the loop. ! 3103: More precisely, in each of the statements ! 3104: .DS ! 3105: .TS ! 3106: lw(2i) lw(2i) lw(2i). ! 3107: \fBwhile (\|.\|.\|.\|) { do { for (\|.\|.\|.\|) {\fR ! 3108: \fIstatement ; statement ; statement ;\fR ! 3109: \fBcontin: ; contin: ; contin: ; ! 3110: } } while (...); }\fR ! 3111: .TE ! 3112: .DE ! 3113: .LP ! 3114: a ! 3115: .B ! 3116: continue ! 3117: .R ! 3118: is equivalent to ! 3119: .B ! 3120: goto\ contin\fR. ! 3121: .R ! 3122: (Following the ! 3123: .B ! 3124: contin: ! 3125: .R ! 3126: is a null statement, see ``Null Statement''.) ! 3127: .NH 2 ! 3128: Return Statement ! 3129: .PP ! 3130: A function returns to its caller by means of ! 3131: the ! 3132: .B ! 3133: return ! 3134: .R ! 3135: statement which has one of the ! 3136: forms ! 3137: .DS ! 3138: \fBreturn ; ! 3139: return \fIexpression \fR; ! 3140: .DE ! 3141: .PP ! 3142: In the first case, the returned value is undefined. ! 3143: In the second case, the value of the expression ! 3144: is returned to the caller ! 3145: of the function. ! 3146: If required, the expression is converted, ! 3147: as if by assignment, to the type of ! 3148: function in which it appears. ! 3149: Flowing off the end of a function is ! 3150: equivalent to a return with no returned value. ! 3151: The expression may be parenthesized. ! 3152: .NH 2 ! 3153: Goto Statement ! 3154: .PP ! 3155: Control may be transferred unconditionally by means of ! 3156: the statement ! 3157: .DS ! 3158: \fBgoto \fIidentifier \fR; ! 3159: .DE ! 3160: .PP ! 3161: The identifier must be a label ! 3162: (see ``Labeled Statement'') ! 3163: located in the current function. ! 3164: .NH 2 ! 3165: Labeled Statement ! 3166: .PP ! 3167: Any statement may be preceded by ! 3168: label prefixes of the form ! 3169: .DS ! 3170: \fIidentifier \fR: ! 3171: .DE ! 3172: .LP ! 3173: which serve to declare the identifier ! 3174: as a label. ! 3175: The only use of a label is as a target of a ! 3176: .B ! 3177: goto\fR. ! 3178: .R ! 3179: The scope of a label is the current function, ! 3180: excluding any subblocks in which the same identifier has been redeclared. ! 3181: See ``SCOPE RULES.'' ! 3182: .NH 2 ! 3183: Null Statement ! 3184: .PP ! 3185: The null statement has the form ! 3186: .DS ! 3187: \fB;\fR ! 3188: .DE ! 3189: .PP ! 3190: A null statement is useful to carry a label just before the ! 3191: .B ! 3192: } ! 3193: .R ! 3194: of a compound statement or to supply a null ! 3195: body to a looping statement such as ! 3196: .B ! 3197: while\fR. ! 3198: .R ! 3199: .NH 1 ! 3200: External Definitions ! 3201: .PP ! 3202: A C program consists of a sequence of external definitions. ! 3203: An external definition declares an identifier to ! 3204: have storage class ! 3205: .B ! 3206: extern ! 3207: .R ! 3208: (by default) ! 3209: or perhaps ! 3210: \fBstatic\fR, ! 3211: and ! 3212: a specified type. ! 3213: The type-specifier (see ``Type Specifiers'' in ! 3214: ``DECLARATIONS'') may also be empty, in which ! 3215: case the type is taken to be ! 3216: .B ! 3217: int\fR. ! 3218: .R ! 3219: The scope of external definitions persists to the end ! 3220: of the file in which they are declared just as the effect ! 3221: of declarations persists to the end of a block. ! 3222: The syntax of external definitions is the same ! 3223: as that of all declarations except that ! 3224: only at this level may the code for functions be given. ! 3225: .NH 2 ! 3226: External Function Definitions ! 3227: .PP ! 3228: Function definitions have the form ! 3229: .DS ! 3230: \fIfunction-definition: ! 3231: decl-specifiers\v'0.5'\s-2opt\s0\v'-0.5' function-declarator function-body\fR ! 3232: .DE ! 3233: .PP ! 3234: The only sc-specifiers ! 3235: allowed ! 3236: among the decl-specifiers ! 3237: are ! 3238: .B ! 3239: extern ! 3240: .R ! 3241: or ! 3242: \fBstatic\fR; ! 3243: see ``Scope of Externals'' in ! 3244: ``SCOPE RULES'' for the distinction between them. ! 3245: A function declarator is similar to a declarator ! 3246: for a ``function returning .\|.\|.\|'' except that ! 3247: it lists the formal parameters of ! 3248: the function being defined. ! 3249: .DS ! 3250: \fIfunction-declarator: ! 3251: declarator ( parameter-list\v'0.5'\s-2opt\s0\v'-0.5' ) ! 3252: .DE ! 3253: .DS ! 3254: \fIparameter-list: ! 3255: identifier ! 3256: identifier , parameter-list\fR ! 3257: .DE ! 3258: .PP ! 3259: The function-body ! 3260: has the form ! 3261: .DS ! 3262: \fIfunction-body: ! 3263: declaration-list\v'0.5'\s-2opt\s0\v'-0.5' compound-statement\fR ! 3264: .DE ! 3265: .PP ! 3266: The identifiers in the parameter list, and only those identifiers, ! 3267: may be declared in the declaration list. ! 3268: Any identifiers whose type is not given are taken to be ! 3269: .B ! 3270: int\fR. ! 3271: .R ! 3272: The only storage class which may be specified is ! 3273: \fBregister\fR; ! 3274: if it is specified, the corresponding actual parameter ! 3275: will be copied, if possible, into a register ! 3276: at the outset of the function. ! 3277: .PP ! 3278: A simple example of a complete function definition is ! 3279: .DS ! 3280: \fBint max(a, b, c) ! 3281: int a, b, c; ! 3282: { ! 3283: int m; ! 3284: .sp ! 3285: m = (a > b) ? a : b; ! 3286: return((m > c) ? m : c); ! 3287: }\fR ! 3288: .DE ! 3289: .PP ! 3290: Here ! 3291: .B ! 3292: int ! 3293: .R ! 3294: is the type-specifier; ! 3295: .B ! 3296: max(a,\ b,\ c) ! 3297: .R ! 3298: is the function-declarator; ! 3299: .B ! 3300: int\ a,\ b,\ c; ! 3301: .R ! 3302: is the declaration-list for ! 3303: the formal ! 3304: parameters; ! 3305: \fB{\ ...\ }\fR ! 3306: is the ! 3307: block giving the code for the statement. ! 3308: .PP ! 3309: The C program converts all ! 3310: .B ! 3311: float ! 3312: .R ! 3313: actual parameters ! 3314: to ! 3315: \fBdouble\fR, ! 3316: so formal parameters declared ! 3317: .B ! 3318: float ! 3319: .R ! 3320: have their declaration adjusted to read ! 3321: .B ! 3322: double\fR. ! 3323: .R ! 3324: All \fBchar\fR and \fBshort\fR formal parameter ! 3325: declarations are similarly adjusted ! 3326: to read \fBint\fR. ! 3327: Also, since a reference to an array in any context ! 3328: (in particular as an actual parameter) ! 3329: is taken to mean ! 3330: a pointer to the first element of the array, ! 3331: declarations of formal parameters declared ``array of .\|.\|.\|'' ! 3332: are adjusted to read ``pointer to .\|.\|.\|.'' ! 3333: .NH 2 ! 3334: External Data Definitions ! 3335: .PP ! 3336: An external data definition has the form ! 3337: .DS ! 3338: \fIdata-definition: ! 3339: declaration\fR ! 3340: .DE ! 3341: .PP ! 3342: The storage class of such data may be ! 3343: .B ! 3344: extern ! 3345: .R ! 3346: (which is the default) ! 3347: or ! 3348: .B ! 3349: static ! 3350: .R ! 3351: but not ! 3352: .B ! 3353: auto ! 3354: .R ! 3355: or ! 3356: \fBregister\fR. ! 3357: .NH 1 ! 3358: Scope Rules ! 3359: .PP ! 3360: A C program need not all ! 3361: be compiled at the same time. The source text of the ! 3362: program ! 3363: may be kept in several files, and precompiled ! 3364: routines may be loaded from ! 3365: libraries. ! 3366: Communication among the functions of a program ! 3367: may be carried out both through explicit calls ! 3368: and through manipulation of external data. ! 3369: .PP ! 3370: Therefore, there are two kinds of scopes to consider: ! 3371: first, what may be called the ! 3372: .UL lexical ! 3373: .UL scope ! 3374: of an identifier, which is essentially the ! 3375: region of a program during which it may ! 3376: be used without drawing ``undefined identifier'' ! 3377: diagnostics; ! 3378: and second, the scope ! 3379: associated with external identifiers, ! 3380: which is characterized by the rule ! 3381: that references to the same external ! 3382: identifier are references to the same object. ! 3383: .NH 2 ! 3384: Lexical Scope ! 3385: .PP ! 3386: The lexical scope of identifiers declared in external definitions ! 3387: persists from the definition through ! 3388: the end of the source file ! 3389: in which they appear. ! 3390: The lexical scope of identifiers which are formal parameters ! 3391: persists through the function with which they are ! 3392: associated. ! 3393: The lexical scope of identifiers declared at the head of a block ! 3394: persists until the end of the block. ! 3395: The lexical scope of labels is the whole of the ! 3396: function in which they appear. ! 3397: .PP ! 3398: In all cases, however, ! 3399: if an identifier is explicitly declared at the head of a block, ! 3400: including the block constituting a function, ! 3401: any declaration of that identifier outside the block ! 3402: is suspended until the end of the block. ! 3403: .PP ! 3404: Remember also (see ``Structure, Union, and Enumeration Declarations'' in ! 3405: ``DECLARATIONS'') that tags, identifiers associated with ! 3406: ordinary variables, ! 3407: and identities associated with structure and union members ! 3408: form three disjoint classes ! 3409: which do not conflict. ! 3410: Members and tags follow the same scope rules ! 3411: as other identifiers. ! 3412: The \fBenum\fR constants are in the same ! 3413: class as ordinary variables and follow the same scope rules. ! 3414: The ! 3415: .B ! 3416: typedef ! 3417: .R ! 3418: names are in the same class as ordinary identifiers. ! 3419: They may be redeclared in inner blocks, but an explicit ! 3420: type must be given in the inner declaration: ! 3421: .DS ! 3422: \fBtypedef float distance; ! 3423: \&... ! 3424: { ! 3425: auto int distance; ! 3426: ...\fR ! 3427: } ! 3428: .DE ! 3429: .PP ! 3430: The ! 3431: .B ! 3432: int ! 3433: .R ! 3434: must be present in the second declaration, ! 3435: or it would be taken to be ! 3436: a declaration with no declarators and type ! 3437: .B ! 3438: distance\fR. ! 3439: .R ! 3440: .NH 2 ! 3441: Scope of Externals ! 3442: .PP ! 3443: If a function refers to an identifier declared to be ! 3444: \fBextern\fR, ! 3445: then somewhere among the files or libraries ! 3446: constituting the complete program ! 3447: there must be at least one external definition ! 3448: for the identifier. ! 3449: All functions in a given program which refer to the same ! 3450: external identifier refer to the same object, ! 3451: so care must be taken that the type and size ! 3452: specified in the definition ! 3453: are compatible with those specified ! 3454: by each function which references the data. ! 3455: .PP ! 3456: It is illegal to explicitly initialize any external ! 3457: identifier more than once in the set of files and libraries ! 3458: comprising a multi-file program. ! 3459: It is legal to have more than one data definition ! 3460: for any external non-function identifier; ! 3461: explicit use of \fBextern\fR does not ! 3462: change the meaning of an external declaration. ! 3463: .PP ! 3464: In restricted environments, the use of the \fBextern\fR ! 3465: storage class takes on an additional meaning. ! 3466: In these environments, the explicit appearance of the ! 3467: \fBextern\fR keyword in external data declarations of ! 3468: identities without initialization indicates that ! 3469: the storage for the identifiers is allocated elsewhere, ! 3470: either in this file or another file. ! 3471: It is required that there be exactly one definition of ! 3472: each external identifier (without \fBextern\fR) ! 3473: in the set of files and libraries ! 3474: comprising a mult-file program. ! 3475: .PP ! 3476: Identifiers declared ! 3477: .B ! 3478: static ! 3479: .R ! 3480: at the top level in external definitions ! 3481: are not visible in other files. ! 3482: Functions may be declared ! 3483: .B ! 3484: static\fR. ! 3485: .R ! 3486: .nr Hu 1 ! 3487: .NH 1 ! 3488: Compiler Control Lines ! 3489: .PP ! 3490: The C compiler contains a preprocessor capable ! 3491: of macro substitution, conditional compilation, ! 3492: and inclusion of named files. ! 3493: Lines beginning with ! 3494: .B ! 3495: # ! 3496: .R ! 3497: communicate ! 3498: with this preprocessor. ! 3499: There may be any number of blanks and horizontal tabs ! 3500: between the \fB#\fR and the directive. ! 3501: These lines have syntax independent of the rest of the language; ! 3502: they may appear anywhere and have effect which lasts (independent of ! 3503: scope) until the end of the source program file. ! 3504: .nr Hu 1 ! 3505: .NH 2 ! 3506: Token Replacement ! 3507: .PP ! 3508: A compiler-control line of the form ! 3509: .DS ! 3510: \fB#define \fIidentifier token-string\v'0.5'\s-2opt\s0\v'-0.5'\fR ! 3511: .DE ! 3512: .LP ! 3513: causes the preprocessor to replace subsequent instances ! 3514: of the identifier with the given string of tokens. ! 3515: Semicolons in or at the end of the token-string are part of that string. ! 3516: A line of the form ! 3517: .DS ! 3518: \fB#define \fIidentifier(identifier, ... )token-string\v'0.5'\s-2opt\s0\v'-0.5'\fR ! 3519: .DE ! 3520: .LP ! 3521: where there is no space between the first identifier ! 3522: and the ! 3523: \fB(\fR, ! 3524: is a macro definition with arguments. ! 3525: There may be zero or more formal parameters. ! 3526: Subsequent instances of the first identifier followed ! 3527: by a ! 3528: \fB(\fR, ! 3529: a sequence of tokens delimited by commas, and a ! 3530: \fB)\fR ! 3531: are replaced ! 3532: by the token string in the definition. ! 3533: Each occurrence of an identifier mentioned in the formal parameter list ! 3534: of the definition is replaced by the corresponding token string from the call. ! 3535: The actual arguments in the call are token strings separated by commas; ! 3536: however, commas in quoted strings or protected by ! 3537: parentheses do not separate arguments. ! 3538: The number of formal and actual parameters must be the same. ! 3539: Strings and character constants in the token-string are scanned ! 3540: for formal parameters, but ! 3541: strings and character constants in the rest of the program are ! 3542: not scanned for defined identifiers ! 3543: to replacement. ! 3544: .PP ! 3545: In both forms the replacement string is rescanned for more ! 3546: defined identifiers. ! 3547: In both forms ! 3548: a long definition may be continued on another line ! 3549: by writing ! 3550: .B ! 3551: \e ! 3552: .R ! 3553: at the end of the line to be continued. ! 3554: .PP ! 3555: This facility is most valuable for definition of ``manifest constants,'' ! 3556: as in ! 3557: .DS ! 3558: \fB#define TABSIZE 100 ! 3559: .sp ! 3560: int table\|[\|TABSIZE\|]\|;\fR ! 3561: .DE ! 3562: .PP ! 3563: A control line of the form ! 3564: .DS ! 3565: \fB#undef \fIidentifier\fR ! 3566: .DE ! 3567: .LP ! 3568: causes the ! 3569: identifier's preprocessor definition (if any) to be forgotten. ! 3570: .PP ! 3571: If a \fB#define\fRd identifier is the subject of a subsequent ! 3572: \fB#define\fR with no intervening \fB#undef\fR, then ! 3573: the two token-strings are compared textually. ! 3574: If the two token-strings are not identical ! 3575: (all white space is considered as equivalent), then ! 3576: the identifier is considered to be redefined. ! 3577: .nr Hu 1 ! 3578: .NH 2 ! 3579: File Inclusion ! 3580: .PP ! 3581: A compiler control line of ! 3582: the form ! 3583: .DS ! 3584: \fB#include\fI "filename\|\fR" ! 3585: .DE ! 3586: .LP ! 3587: causes the replacement of that ! 3588: line by the entire contents of the file ! 3589: .I ! 3590: filename\fR. ! 3591: .R ! 3592: The named file is searched for first in the directory ! 3593: of the file containing the \fB#include\fR, ! 3594: and then in a sequence of specified or standard places. ! 3595: Alternatively, a control line of the form ! 3596: .DS ! 3597: \fB#include\fI <filename\|\fR> ! 3598: .DE ! 3599: .LP ! 3600: searches only the specified or standard places ! 3601: and not the directory of the \fB#include\fR. ! 3602: (How the places are specified is not part of the language.) ! 3603: .PP ! 3604: \fB#include\fRs ! 3605: may be nested. ! 3606: .nr Hu 1 ! 3607: .NH 2 ! 3608: Conditional Compilation ! 3609: .PP ! 3610: A compiler control line of the form ! 3611: .DS ! 3612: \fB#if \fIrestricted-constant-expression\fR ! 3613: .DE ! 3614: .LP ! 3615: checks whether the restricted-constant expression evaluates to nonzero. ! 3616: (Constant expressions are discussed in ``CONSTANT EXPRESSIONS''; ! 3617: the following additional restrictions apply here: ! 3618: the constant expression may not contain ! 3619: .B ! 3620: sizeof ! 3621: .R ! 3622: casts, or an enumeration constant.) ! 3623: .PP ! 3624: A restricted constant expression may also contain the ! 3625: additional unary expression ! 3626: .PP ! 3627: \fBdefined \fIidentifier\fR ! 3628: .LP ! 3629: or ! 3630: .PP ! 3631: \fBdefined( \fIidentifier )\fR ! 3632: .LP ! 3633: which evaluates to one if the identifier is currently ! 3634: defined in the preprocessor and zero if it is not. ! 3635: .PP ! 3636: All currently defined identifiers in restricted-constant-expressions ! 3637: are replaced by their token-strings (except those identifiers ! 3638: modified by \fBdefined\fR) just as in normal text. ! 3639: The restricted constant expression will be evaluated only ! 3640: after all expressions have finished. ! 3641: During this evaluation, all undefined (to the procedure) ! 3642: identifiers evaluate to zero. ! 3643: .PP ! 3644: A control line of the form ! 3645: .DS ! 3646: \fB#ifdef \fIidentifier\fR ! 3647: .DE ! 3648: .LP ! 3649: checks whether the identifier is currently defined ! 3650: in the preprocessor; i.e., whether it has been the ! 3651: subject of a ! 3652: .B ! 3653: #define ! 3654: .R ! 3655: control line. ! 3656: It is equivalent to \fB#ifdef(\fIidentifier\fB)\fR. ! 3657: A control line of the form ! 3658: .DS ! 3659: \fB#ifndef \fIidentifier\fR ! 3660: .DE ! 3661: .LP ! 3662: checks whether the identifier is currently undefined ! 3663: in the preprocessor. ! 3664: It is equivalent to ! 3665: .DS ! 3666: \fB#if !\|defined(\fIidentifier\fB)\fR. ! 3667: .DE ! 3668: .PP ! 3669: All three forms are followed by an arbitrary number of lines, ! 3670: possibly containing a control line ! 3671: .DS ! 3672: \fB#else\fR ! 3673: .DE ! 3674: .LP ! 3675: and then by a control line ! 3676: .DS ! 3677: \fB#endif\fR ! 3678: .DE ! 3679: .PP ! 3680: If the checked condition is true, ! 3681: then any lines ! 3682: between ! 3683: .B ! 3684: #else ! 3685: .R ! 3686: and ! 3687: .B ! 3688: #endif ! 3689: .R ! 3690: are ignored. ! 3691: If the checked condition is false, then any lines between ! 3692: the test and a ! 3693: .B ! 3694: #else ! 3695: .R ! 3696: or, lacking a ! 3697: \fB#else\fR, ! 3698: the ! 3699: .B ! 3700: #endif ! 3701: .R ! 3702: are ignored. ! 3703: .PP ! 3704: These constructions may be nested. ! 3705: .nr Hu 1 ! 3706: .NH 2 ! 3707: Line Control ! 3708: .PP ! 3709: For the benefit of other preprocessors which generate C programs, ! 3710: a line of the form ! 3711: .DS ! 3712: \fB#line \fIconstant "filename\fR" ! 3713: .DE ! 3714: .LP ! 3715: causes the compiler to believe, for purposes of error ! 3716: diagnostics, ! 3717: that the line number of the next source line is given by the constant and the current input ! 3718: file is named by "\fIfilename\fR". ! 3719: If "\fIfilename\fR" is absent, the remembered file name does not change. ! 3720: .nr Hu 1 ! 3721: .NH 1 ! 3722: Implicit Declarations ! 3723: .PP ! 3724: It is not always necessary to specify ! 3725: both the storage class and the type ! 3726: of identifiers in a declaration. ! 3727: The storage class is supplied by ! 3728: the context in external definitions ! 3729: and in declarations of formal parameters ! 3730: and structure members. ! 3731: In a declaration inside a function, ! 3732: if a storage class but no type ! 3733: is given, the identifier is assumed ! 3734: to be ! 3735: \fBint\fR; ! 3736: if a type but no storage class is indicated, ! 3737: the identifier is assumed to ! 3738: be ! 3739: .B ! 3740: auto\fR. ! 3741: .R ! 3742: An exception to the latter rule is made for ! 3743: functions because ! 3744: .B ! 3745: auto ! 3746: .R ! 3747: functions do not exist. ! 3748: If the type of an identifier is ``function returning .\|.\|.\|,'' ! 3749: it is implicitly declared to be ! 3750: .B ! 3751: extern\fR. ! 3752: .R ! 3753: .PP ! 3754: In an expression, an identifier ! 3755: followed by ! 3756: .B ! 3757: ( ! 3758: .R ! 3759: and not already declared ! 3760: is contextually ! 3761: declared to be ``function returning ! 3762: .B ! 3763: int\fR.'' ! 3764: .nr Hu 1 ! 3765: .NH 1 ! 3766: Types Revisited ! 3767: .PP ! 3768: This part summarizes the operations ! 3769: which can be performed on objects of certain types. ! 3770: .nr Hu 1 ! 3771: .NH 2 ! 3772: Structures and Unions ! 3773: .PP ! 3774: Structures and unions may be assigned, passed as arguments to functions, ! 3775: and returned by functions. ! 3776: Other plausible operators, such as equality comparison ! 3777: and structure casts, ! 3778: are not implemented. ! 3779: .PP ! 3780: In a reference ! 3781: to a structure or union member, the ! 3782: name on the right ! 3783: of the \fB->\fR or the \fB.\fR ! 3784: must specify a member of the aggregate ! 3785: named or pointed to by the expression ! 3786: on the left. ! 3787: In general, a member of a union may not be inspected ! 3788: unless the value of the union has been assigned using that same member. ! 3789: However, one special guarantee is made by the language in order ! 3790: to simplify the use of unions: ! 3791: if a union contains several structures that share a common initial sequence ! 3792: and if the union currently contains one of these structures, ! 3793: it is permitted to inspect the common initial part of any of ! 3794: the contained structures. ! 3795: For example, the following is a legal fragment: ! 3796: .DS ! 3797: \fBunion ! 3798: { ! 3799: struct ! 3800: { ! 3801: int type; ! 3802: } n; ! 3803: struct ! 3804: { ! 3805: int type; ! 3806: int intnode; ! 3807: } ni; ! 3808: struct ! 3809: { ! 3810: int type; ! 3811: float floatnode; ! 3812: } nf; ! 3813: } u; ! 3814: \&... ! 3815: u.nf.type = FLOAT; ! 3816: u.nf.floatnode = 3.14; ! 3817: \&... ! 3818: if (u.n.type == FLOAT) ! 3819: ... sin(u.nf.floatnode) ...\fR ! 3820: .DE ! 3821: .PP ! 3822: .nr Hu 1 ! 3823: .NH 2 ! 3824: Functions ! 3825: .PP ! 3826: There are only two things that ! 3827: can be done with a function \fBm\fR, ! 3828: call it or take its address. ! 3829: If the name of a function appears in an ! 3830: expression not in the function-name position of a call, ! 3831: a pointer to the function is generated. ! 3832: Thus, to pass one function to another, one ! 3833: might say ! 3834: .DS ! 3835: \fBint f(); ! 3836: \&... ! 3837: g(f);\fR ! 3838: .DE ! 3839: .PP ! 3840: .ne 8 ! 3841: Then the definition of ! 3842: .B ! 3843: g ! 3844: .R ! 3845: might read ! 3846: .DS ! 3847: \fBg(funcp) ! 3848: int (\(**funcp)(); ! 3849: { ! 3850: ... ! 3851: (\(**funcp)(); ! 3852: ... ! 3853: }\fR ! 3854: .DE ! 3855: .PP ! 3856: Notice that ! 3857: .B ! 3858: f ! 3859: .R ! 3860: must be declared ! 3861: explicitly in the calling routine since its appearance ! 3862: in ! 3863: .B ! 3864: g(f) ! 3865: .R ! 3866: was not followed by ! 3867: .B ! 3868: (. ! 3869: .R ! 3870: .nr Hu 1 ! 3871: .NH 2 ! 3872: Arrays, Pointers, and Subscripting ! 3873: .PP ! 3874: Every time an identifier of array type appears ! 3875: in an expression, it is converted into a pointer ! 3876: to the first member of the array. ! 3877: Because of this conversion, arrays are not ! 3878: lvalues. ! 3879: By definition, the subscript operator ! 3880: .B ! 3881: [] ! 3882: .R ! 3883: is interpreted ! 3884: in such a way that ! 3885: .B ! 3886: E1[E2] ! 3887: .R ! 3888: is identical to ! 3889: .B ! 3890: \(**((E1)\(plE2))\fR. ! 3891: .R ! 3892: Because of the conversion rules ! 3893: which apply to ! 3894: \fB\(pl\fR, ! 3895: if ! 3896: .B ! 3897: E1 ! 3898: .R ! 3899: is an array and ! 3900: .B ! 3901: E2 ! 3902: .R ! 3903: an integer, ! 3904: then ! 3905: .B ! 3906: E1[E2] ! 3907: .R ! 3908: refers to the ! 3909: .B ! 3910: E2-th ! 3911: .R ! 3912: member of ! 3913: .B ! 3914: E1\fR. ! 3915: .R ! 3916: Therefore, ! 3917: despite its asymmetric ! 3918: appearance, subscripting is a commutative operation. ! 3919: .PP ! 3920: A consistent rule is followed in the case of ! 3921: multidimensional arrays. ! 3922: If ! 3923: .B ! 3924: E ! 3925: .R ! 3926: is an ! 3927: \fIn\fR-dimensional ! 3928: array ! 3929: of rank ! 3930: i\(muj\(mu...\(muk, ! 3931: then ! 3932: .B ! 3933: E ! 3934: .R ! 3935: appearing in an expression is converted to ! 3936: a pointer to an (n-1)-dimensional ! 3937: array with rank ! 3938: j\(mu...\(muk. ! 3939: If the ! 3940: .B ! 3941: \(** ! 3942: .R ! 3943: operator, either explicitly ! 3944: or implicitly as a result of subscripting, ! 3945: is applied to this pointer, ! 3946: the result is the pointed-to (n-1)-dimensional array, ! 3947: which itself is immediately converted into a pointer. ! 3948: .PP ! 3949: For example, consider ! 3950: .DS ! 3951: \fBint x[3][5];\fR ! 3952: .DE ! 3953: .PP ! 3954: Here ! 3955: .B ! 3956: x ! 3957: .R ! 3958: is a 3\(mu5 array of integers. ! 3959: When ! 3960: .B ! 3961: x ! 3962: .R ! 3963: appears in an expression, it is converted ! 3964: to a pointer to (the first of three) 5-membered arrays of integers. ! 3965: In the expression ! 3966: \fBx[i]\fR, ! 3967: which is equivalent to ! 3968: \fB\(**(x\(pli)\fR, ! 3969: .B ! 3970: x ! 3971: .R ! 3972: is first converted to a pointer as described; ! 3973: then ! 3974: .B ! 3975: i ! 3976: .R ! 3977: is converted to the type of ! 3978: \fBx\fR, ! 3979: which involves multiplying ! 3980: .B ! 3981: i ! 3982: .R ! 3983: by the ! 3984: length the object to which the pointer points, ! 3985: namely 5-integer objects. ! 3986: The results are added and indirection applied to ! 3987: yield an array (of five integers) which in turn is converted to ! 3988: a pointer to the first of the integers. ! 3989: If there is another subscript, the same argument applies ! 3990: again; this time the result is an integer. ! 3991: .PP ! 3992: Arrays in C are stored ! 3993: row-wise (last subscript varies fastest) ! 3994: and the first subscript in the declaration helps determine ! 3995: the amount of storage consumed by an array. ! 3996: Arrays play no other part in subscript calculations. ! 3997: .nr Hu 1 ! 3998: .NH 2 ! 3999: Explicit Pointer Conversions ! 4000: .PP ! 4001: Certain conversions involving pointers are permitted ! 4002: but have implementation-dependent aspects. ! 4003: They are all specified by means of an explicit type-conversion ! 4004: operator, see ``Unary Operators'' under``EXPRESSIONS'' and ! 4005: ``Type Names''under ``DECLARATIONS.'' ! 4006: .PP ! 4007: A pointer may be converted to any of the integral types large ! 4008: enough to hold it. ! 4009: Whether an ! 4010: .B ! 4011: int ! 4012: .R ! 4013: or ! 4014: .B ! 4015: long ! 4016: .R ! 4017: is required is machine dependent. ! 4018: The mapping function is also machine dependent but is intended ! 4019: to be unsurprising to those who know the addressing structure ! 4020: of the machine. ! 4021: Details for some particular machines are given below. ! 4022: .PP ! 4023: An object of integral type may be explicitly converted to a pointer. ! 4024: The mapping always carries an integer converted from a pointer back to the same pointer ! 4025: but is otherwise machine dependent. ! 4026: .PP ! 4027: A pointer to one type may be converted to a pointer to another type. ! 4028: The resulting pointer may cause addressing exceptions ! 4029: upon use if ! 4030: the subject pointer does not refer to an object suitably aligned in storage. ! 4031: It is guaranteed that ! 4032: a pointer to an object of a given size may be converted to a pointer to an object ! 4033: of a smaller size ! 4034: and back again without change. ! 4035: .PP ! 4036: For example, ! 4037: a storage-allocation routine ! 4038: might accept a size (in bytes) ! 4039: of an object to allocate, and return a ! 4040: .B ! 4041: char ! 4042: .R ! 4043: pointer; ! 4044: it might be used in this way. ! 4045: .DS ! 4046: \fBextern char \(**malloc(); ! 4047: double \(**dp; ! 4048: .sp ! 4049: dp = (double \(**) malloc(sizeof(double)); ! 4050: \(**dp = 22.0 / 7.0;\fR ! 4051: .DE ! 4052: .PP ! 4053: The ! 4054: .B ! 4055: alloc ! 4056: .R ! 4057: must ensure (in a machine-dependent way) ! 4058: that its return value is suitable for conversion to a pointer to ! 4059: \fBdouble\fR; ! 4060: then the ! 4061: .I ! 4062: use ! 4063: .R ! 4064: of the function is portable. ! 4065: .PP ! 4066: The pointer ! 4067: representation on the ! 4068: PDP-11 ! 4069: corresponds to a 16-bit integer and ! 4070: measures bytes. ! 4071: The ! 4072: .B ! 4073: char\fR's ! 4074: have no alignment requirements; everything else must have an even address. ! 4075: .PP ! 4076: On the ! 4077: VAX-11, ! 4078: pointers are 32 bits long and measure bytes. ! 4079: Elementary objects are aligned on a boundary equal to their ! 4080: length, except that ! 4081: .B ! 4082: double ! 4083: .R ! 4084: quantities need be aligned only on even 4-byte boundaries. ! 4085: Aggregates are aligned on the strictest boundary required by ! 4086: any of their constituents. ! 4087: .PP ! 4088: The 3B 20 computer has 24-bit pointers placed into 32-bit quantities. ! 4089: Most objects are ! 4090: aligned on 4-byte boundaries. \fBShort\fRs are aligned in all cases on ! 4091: 2-byte boundaries. Arrays of characters, all structures, ! 4092: \fBint\fR\^s, \fBlong\fR\^s, \fBfloat\fR\^s, and \fBdouble\fR\^s are aligned on 4-byte ! 4093: boundries; but structure members may be packed tighter. ! 4094: .nr Hu 1 ! 4095: .NH 2 ! 4096: CONSTANT EXPRESSIONS ! 4097: .PP ! 4098: In several places C requires expressions that evaluate to ! 4099: a constant: ! 4100: after ! 4101: \fBcase\fR, ! 4102: as array bounds, and in initializers. ! 4103: In the first two cases, the expression can ! 4104: involve only integer constants, character constants, ! 4105: casts to integral types, ! 4106: enumeration constants, ! 4107: and ! 4108: .B ! 4109: sizeof ! 4110: .R ! 4111: expressions, possibly ! 4112: connected by the binary operators ! 4113: .ne 10 ! 4114: .DS ! 4115: \(pl \(mi \(** / % & | ^ << >> == != < > <= >= && || ! 4116: .DE ! 4117: .LP ! 4118: or by the unary operators ! 4119: .DS ! 4120: \(mi \s+2~\s0 ! 4121: .DE ! 4122: .LP ! 4123: or by the ternary operator ! 4124: .DS ! 4125: ?: ! 4126: .DE ! 4127: .PP ! 4128: Parentheses can be used for grouping ! 4129: but not for function calls. ! 4130: .PP ! 4131: More latitude is permitted for initializers; ! 4132: besides constant expressions as discussed above, ! 4133: one can also use floating constants ! 4134: and arbitrary casts and ! 4135: can also apply the unary ! 4136: .B ! 4137: & ! 4138: .R ! 4139: operator to external or static objects ! 4140: and to external or static arrays subscripted ! 4141: with a constant expression. ! 4142: The unary ! 4143: .B ! 4144: & ! 4145: .R ! 4146: can also ! 4147: be applied implicitly ! 4148: by appearance of unsubscripted arrays and functions. ! 4149: The basic rule is that initializers must ! 4150: evaluate either to a constant or to the address ! 4151: of a previously declared external or static object plus or minus a constant. ! 4152: .nr Hu 1 ! 4153: .NH 1 ! 4154: Portability Considerations ! 4155: .PP ! 4156: Certain parts of C are inherently machine dependent. ! 4157: The following list of potential trouble spots ! 4158: is not meant to be all-inclusive ! 4159: but to point out the main ones. ! 4160: .PP ! 4161: Purely hardware issues like ! 4162: word size and the properties of floating point arithmetic and integer division ! 4163: have proven in practice to be not much of a problem. ! 4164: Other facets of the hardware are reflected ! 4165: in differing implementations. ! 4166: Some of these, ! 4167: particularly sign extension ! 4168: (converting a negative character into a negative integer) ! 4169: and the order in which bytes are placed in a word, ! 4170: are nuisances that must be carefully watched. ! 4171: Most of the others are only minor problems. ! 4172: .PP ! 4173: The number of ! 4174: .B ! 4175: register ! 4176: .R ! 4177: variables that can actually be placed in registers ! 4178: varies from machine to machine ! 4179: as does the set of valid types. ! 4180: Nonetheless, the compilers all do things properly for their own machine; ! 4181: excess or invalid ! 4182: .B ! 4183: register ! 4184: .R ! 4185: declarations are ignored. ! 4186: .PP ! 4187: Some difficulties arise only when ! 4188: dubious coding practices are used. ! 4189: It is exceedingly unwise to write programs ! 4190: that depend ! 4191: on any of these properties. ! 4192: .PP ! 4193: The order of evaluation of function arguments ! 4194: is not specified by the language. ! 4195: The order in which side effects take place ! 4196: is also unspecified. ! 4197: .PP ! 4198: Since character constants are really objects of type ! 4199: \fBint\fR, ! 4200: multicharacter character constants may be permitted. ! 4201: The specific implementation ! 4202: is very machine dependent ! 4203: because the order in which characters ! 4204: are assigned to a word ! 4205: varies from one machine to another. ! 4206: .PP ! 4207: Fields are assigned to words and characters to integers right to left ! 4208: on some machines ! 4209: and left to right on other machines. ! 4210: These differences are invisible to isolated programs ! 4211: that do not indulge in type punning (e.g., ! 4212: by converting an ! 4213: .B ! 4214: int ! 4215: .R ! 4216: pointer to a ! 4217: .B ! 4218: char ! 4219: .R ! 4220: pointer and inspecting the pointed-to storage) ! 4221: but must be accounted for when conforming to externally-imposed ! 4222: storage layouts. ! 4223: .nr Hu 1 ! 4224: .NH 1 ! 4225: Syntax Summary ! 4226: .PP ! 4227: This summary of C syntax is intended more for aiding comprehension ! 4228: than as an exact statement of the language. ! 4229: .nr Hu 1 ! 4230: .ne 18 ! 4231: .NH 2 ! 4232: Expressions ! 4233: .PP ! 4234: The basic expressions are: ! 4235: .tr ~~ ! 4236: .DS ! 4237: \fIexpression: ! 4238: primary ! 4239: \(** expression\fR ! 4240: &\fIlvalue ! 4241: \(mi expression ! 4242: ! expression ! 4243: \s+2~\s0 expression ! 4244: \(pl\(pl lvalue ! 4245: \(mi\(milvalue ! 4246: lvalue \(pl\(pl ! 4247: lvalue \(mi\(mi ! 4248: \fBsizeof\fI expression ! 4249: \fBsizeof (\fItype-name\fB)\fI ! 4250: ( type-name ) expression ! 4251: expression binop expression ! 4252: expression ? expression : expression ! 4253: lvalue asgnop expression ! 4254: expression , expression ! 4255: .DE ! 4256: .DS ! 4257: \fIprimary: ! 4258: identifier ! 4259: constant ! 4260: string ! 4261: ( expression ) ! 4262: primary ( expression-list\v'0.5'\s-2opt\s0\v'-0.5' ) ! 4263: primary [ expression ] ! 4264: primary . identifier ! 4265: primary \(mi identifier ! 4266: .DE ! 4267: .DS ! 4268: \fIlvalue: ! 4269: identifier ! 4270: primary [ expression ] ! 4271: lvalue . identifier ! 4272: primary \(mi identifier ! 4273: \(** expression ! 4274: ( lvalue )\fR ! 4275: .DE ! 4276: .PP ! 4277: .PP ! 4278: The primary-expression operators ! 4279: .DS ! 4280: () [] . \(mi ! 4281: .tr ~~ ! 4282: .DE ! 4283: .LP ! 4284: have highest priority and group left to right. ! 4285: The unary operators ! 4286: .DS ! 4287: \(** & \(mi ! \s+2~\s0 \(pl\(pl \(mi\(mi \fBsizeof\fI ( type-name \fR) ! 4288: .DE ! 4289: .LP ! 4290: have priority below the primary operators ! 4291: but higher than any binary operator ! 4292: and group right to left. ! 4293: Binary operators ! 4294: group left to right; they have priority ! 4295: decreasing ! 4296: as indicated below. ! 4297: .DS ! 4298: \fIbinop:\fR ! 4299: \(** / % ! 4300: \(pl \(mi ! 4301: >> << ! 4302: < > <= >= ! 4303: == != ! 4304: & ! 4305: ^ ! 4306: | ! 4307: && ! 4308: || ! 4309: .DE ! 4310: The conditional operator groups right to left. ! 4311: .PP ! 4312: Assignment operators all have the same ! 4313: priority and all group right to left. ! 4314: .DS ! 4315: \fIasgnop:\fR ! 4316: = \(pl= \(mi= \(**= /= %= >>= <<= &= ^= |= ! 4317: .DE ! 4318: .PP ! 4319: The comma operator has the lowest priority and groups left to right. ! 4320: .nr Hu 1 ! 4321: .NH 2 ! 4322: Declarations ! 4323: .PP ! 4324: .DS ! 4325: \fIdeclaration: ! 4326: decl-specifiers init-declarator-list\v'0.5'\s-2opt\s0\v'-0.5' ; ! 4327: .DE ! 4328: .DS ! 4329: \fIdecl-specifiers: ! 4330: type-specifier decl-specifiers\v'0.5'\s-2opt\s0\v'-0.5' ! 4331: sc-specifier decl-specifiers\v'0.5'\s-2opt\s0\v'-0.5' ! 4332: .DE ! 4333: .DS ! 4334: \fIsc-specifier:\fB ! 4335: auto ! 4336: static ! 4337: extern ! 4338: register ! 4339: typedef ! 4340: .DE ! 4341: .DS ! 4342: \fItype-specifier: ! 4343: struct-or-union-specifier ! 4344: typedef-name ! 4345: enum-specifier ! 4346: basic-type-specifier: ! 4347: basic-type ! 4348: basic-type basic-type-specifiers ! 4349: basic-type:\fB ! 4350: char ! 4351: short ! 4352: int ! 4353: long ! 4354: unsigned ! 4355: float ! 4356: double ! 4357: void\fR ! 4358: .DE ! 4359: .DS ! 4360: \fIenum-specifier:\fB ! 4361: enum\fI { enum-list }\fB ! 4362: enum \fIidentifier { enum-list }\fB ! 4363: enum \fIidentifier ! 4364: .DE ! 4365: .DS ! 4366: \fIenum-list: ! 4367: enumerator ! 4368: enum-list , enumerator ! 4369: .DE ! 4370: .DS ! 4371: \fIenumerator: ! 4372: identifier ! 4373: identifier = constant-expression ! 4374: .DE ! 4375: .DS ! 4376: \fIinit-declarator-list: ! 4377: init-declarator ! 4378: init-declarator , init-declarator-list ! 4379: .DE ! 4380: .DS ! 4381: \fIinit-declarator: ! 4382: declarator initializer\v'0.5'\s-2opt\s0\v'-0.5' ! 4383: .DE ! 4384: .DS ! 4385: \fIdeclarator: ! 4386: identifier ! 4387: ( declarator ) ! 4388: \(** declarator ! 4389: declarator () ! 4390: declarator [ constant-expression\v'0.5'\s-2opt\s0\v'-0.5' ] ! 4391: .DE ! 4392: .DS ! 4393: \fIstruct-or-union-specifier:\fB ! 4394: struct\fI { struct-decl-list }\fB ! 4395: struct \fIidentifier { struct-decl-list }\fB ! 4396: struct \fIidentifier\fB ! 4397: union { \fIstruct-decl-list }\fB ! 4398: union \fIidentifier { struct-decl-list }\fB ! 4399: union \fIidentifier ! 4400: .DE ! 4401: .DS ! 4402: \fIstruct-decl-list: ! 4403: struct-declaration ! 4404: struct-declaration struct-decl-list ! 4405: .DE ! 4406: .DS ! 4407: \fIstruct-declaration: ! 4408: type-specifier struct-declarator-list ; ! 4409: .DE ! 4410: .DS ! 4411: \fIstruct-declarator-list: ! 4412: struct-declarator ! 4413: struct-declarator , struct-declarator-list ! 4414: .DE ! 4415: .DS ! 4416: \fIstruct-declarator: ! 4417: declarator ! 4418: declarator : constant-expression ! 4419: : constant-expression ! 4420: .DE ! 4421: .DS ! 4422: \fIinitializer: ! 4423: = expression ! 4424: = { initializer-list } ! 4425: = { initializer-list , } ! 4426: .DE ! 4427: .DS ! 4428: \fIinitializer-list: ! 4429: expression ! 4430: initializer-list , initializer-list ! 4431: { initializer-list } ! 4432: { initializer-list , } ! 4433: .DE ! 4434: .DS ! 4435: \fItype-name: ! 4436: type-specifier abstract-declarator ! 4437: .DE ! 4438: .DS ! 4439: \fIabstract-declarator: ! 4440: empty ! 4441: ( abstract-declarator ) ! 4442: \(** abstract-declarator ! 4443: abstract-declarator () ! 4444: abstract-declarator [ constant-expression\v'0.5'\s-2opt\s0\v'-0.5' ] ! 4445: .DE ! 4446: .DS ! 4447: \fItypedef-name: ! 4448: identifier ! 4449: .nr Hu 1 ! 4450: .DE ! 4451: .NH 2 ! 4452: Statements ! 4453: .PP ! 4454: .DS ! 4455: \fIcompound-statement: ! 4456: { declaration-list\v'0.5'\s-2opt\s0\v'-0.5' statement-list\v'0.5'\s-2opt\s0\v'-0.5' } ! 4457: .DE ! 4458: .DS ! 4459: \fIdeclaration-list: ! 4460: declaration ! 4461: declaration declaration-list ! 4462: .DE ! 4463: .DS ! 4464: \fIstatement-list: ! 4465: statement ! 4466: statement statement-list ! 4467: .DE ! 4468: .DS ! 4469: \fIstatement: ! 4470: compound-statement ! 4471: expression ; ! 4472: \fBif\fI ( expression ) statement ! 4473: \fBif\fI ( expression ) statement \fBelse\fI statement ! 4474: \fBwhile\fI ( expression ) statement ! 4475: \fBdo\fI statement \fBwhile\fI ( expression ) ; ! 4476: \fBfor\fI (exp\v'0.3'\s-2opt\s0\v'-0.3'\fB;\fIexp\v'0.3'\s-2opt\s0\v'-0.3'\fB;\fIexp\v'0.3'\s-2opt\s0\v'-0.3'\fI) statement ! 4477: \fBswitch\fI ( expression ) statement ! 4478: \fBcase\fI constant-expression : statement ! 4479: \fBdefault\fI : statement ! 4480: \fBbreak ; ! 4481: continue ; ! 4482: return ; ! 4483: return\fI expression ; ! 4484: \fBgoto\fI identifier ; ! 4485: identifier : statement ! 4486: ;\fR ! 4487: .nr Hu 1 ! 4488: .DE ! 4489: .NH 2 ! 4490: External definitions ! 4491: .PP ! 4492: .DS ! 4493: \fIprogram: ! 4494: external-definition ! 4495: external-definition program ! 4496: .DE ! 4497: .DS ! 4498: \fIexternal-definition: ! 4499: function-definition ! 4500: data-definition ! 4501: .DE ! 4502: .DS ! 4503: \fIfunction-definition: ! 4504: decl-specifier\v'0.5'\s-2opt\s0\v'-0.5' function-declarator function-body ! 4505: .DE ! 4506: .DS ! 4507: \fIfunction-declarator: ! 4508: declarator ( parameter-list\v'0.5'\s-2opt\s0\v'-0.5' ) ! 4509: .DE ! 4510: .DS ! 4511: \fIparameter-list: ! 4512: identifier ! 4513: identifier , parameter-list ! 4514: .DE ! 4515: .DS ! 4516: \fIfunction-body: ! 4517: declaration-list\v'0.5'\s-2opt\s0\v'-0.5' compound-statement ! 4518: .DE ! 4519: .DS ! 4520: \fIdata-definition: ! 4521: \fBextern\fI declaration\fB ; ! 4522: \fBstatic\fI declaration\fB ; ! 4523: .DE ! 4524: .NH ! 4525: Preprocessor ! 4526: .DS ! 4527: \fB#define\fI identifier token-string\v'0.3'\s-2opt\s0\v'-0.3'\fB ! 4528: \fB#define\fI identifier\fB(\fIidentifier\fB,...)\fItoken-string\v'0.5'\s-2opt\s0\v'-0.5'\fB ! 4529: \fB#undef\fI identifier\fB ! 4530: \fB#include "\fIfilename\|\fB" ! 4531: #include <\fIfilename\|\fB> ! 4532: \fB#if\fI restricted-constant-expression\fB ! 4533: \fB#ifdef\fI identifier\fB ! 4534: \fB#ifndef\fI identifier\fB ! 4535: \fB#else ! 4536: \fB#endif ! 4537: \fB#line\fI constant \fB"\fIfilename\|\fB" ! 4538: .sp 5 ! 4539: .DE ! 4540: .TC 2 1 3 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.