                        C P P - T E S T . T X T
/*
 * Document of
 * "Validation Suite for Standard C Conformance of Preprocessing"
 */
                    桡    kmatsui@t3.rim.or.jp

V.1.0   1998/08     First released.
                                                                kmatsui
V.1.1   1998/09     Updated according to C99 1998/08 draft.
                                                                kmatsui
V.1.2   1998/11     Updated according to C++98 Standard.
                                                                kmatsui
V.1.3 pre-release 1     2002/08     Updated according to C99 Standard.
                                                                kmatsui
V.1.3 pre-release 2     2002/12     Slightly modified.
                                                                kmatsui
V.1.3 release   2003/02     Finally released.
                    Added porting to GNU C / testsuite.
                                                                kmatsui
V.1.3 patch 1   2003/03     Made the testsuite edition applicable to
                        GNU C as old as 2.9x.
                                                                kmatsui
V.1.4 prerelease    2003/11     Added Visual C++ evaluation.
                                                                kmatsui
V.1.4 release   2004/02     Added tests of various multi-byte character
                        encodings.
                                                                kmatsui
V.1.4.1     2004/03     Revised the section 2.4.26 (on recursive macro)
                                                                kmatsui


ӣ   ֣ ӣ

ӣ  ץץħ
    [1.1]       K&R 1st.  Standard C Υץץ
    [1.2]       Translation phases
        [1.2.1]     ³ tokenization 
    [1.3]       Preprocessing token
        [1.3.1]     Keyword ʤ
        [1.3.2]     Preprocessing-number
        [1.3.3]     Token-base ư token Ϣ
    [1.4]       #if ɾη
    [1.5]       Portable ʥץץå
    [1.6]       ؿͥޥŸˡ
        [1.6.1]     ؿƤӽФƱ
        [1.6.2]     ֤Ÿ
            [1.6.2.1]       #, ## 黻Ҥ operand Ÿʤ
        [1.6.3]     Ȥ
        [1.6.4]     ƱޥκƵŪŸɻ
    [1.7]       
        [1.7.1]     <stdio.h> η header name
        [1.7.2]     Character-base ΤʤĤ # 黻Ҥε
        [1.7.3]     ޥ white spaces ΰ
        [1.7.4]     ؿͥޥΥѥ᡼̾
        [1.7.5]     ɾΤ狼ʤ #if ʸ
        [1.7.6]     ޥδؿͤǤʤ
        [1.7.7]     C90 Corrigendum 1, Amendment 1 Ǥɲ
        [1.7.8]     Ĺʵ
    [1.8]       C99 Υץץ
    [1.9]       ʥץץ

֣ ӣ 
    [2.1]       Validation Suite for Conformance of Preprocessing
    [2.2]       ƥˡ
        [2.2.1]     ưƥ
        [2.2.2]     cpp_test ˤ뼫ưƥ
        [2.2.3]     GNU C / testsuite ˤ뼫ưƥ
            [2.2.3.1]   TestSuite Ȥ
            [2.2.3.2]   TestSuite ؤΥ󥹥ȡȥƥ
            [2.2.3.3]   MCPP μưƥ
            [2.2.3.4]   TestSuite ȸڥå
    [2.3]       Violation of syntax rule or constraint ȿǥå
    [2.4]       ܺ
        [2.4.1]     Trigraphs
        [2.4.2]     <backslash><newline> ˤ³
        [2.4.3]     
        [2.4.4]     üʥȡ (digraphs) ʸ (UCN)
        [2.4.5]     Preprocessing directive line  space, tab
        [2.4.6]     #include
        [2.4.7]     #line
        [2.4.8]     #error
        [2.4.9]     #pragma, _Pragma() operator
        [2.4.10]    #if, #elif, #else, #endif
        [2.4.11]    #if defined
        [2.4.12]    #if η
        [2.4.13]    #if α黻
        [2.4.14]    #if Υ顼
        [2.4.15]    #ifdef, #ifndef
        [2.4.16]    #else, #endif Υ顼
        [2.4.17]    #if, #elif, #else, #endif бطΥ顼
        [2.4.18]    #define
        [2.4.19]    ޥκ
        [2.4.20]    Keyword Ʊ̾Υޥ
        [2.4.21]    Pp-token ʬΥפޥŸ
        [2.4.22]    Pp-number Υޥ sequence
        [2.4.23]    ## 黻ҤȤäޥ
        [2.4.24]    # 黻ҤȤäޥ
        [2.4.25]    ޥΥޥŸ
        [2.4.26]    ޥƱ̾ޥ
        [2.4.27]    ޥκ
        [2.4.28]    ޥ
        [2.4.29]    #undef
        [2.4.30]    ޥƤӽФ
        [2.4.31]    ޥƤӽФΥ顼
        [2.4.32]    #if ʸ
        [2.4.33]    #if Υ磻ʸ
        [2.4.34]    #if  multi-byte ʸ
        [2.4.35]    #if  multi-character ʸ
        [2.4.36]    Multi-byte character  0x5c Υ
        [2.4.37]    Translation limits
    [2.5]       ʬΥɥ

ꤵƤʤ¦̤ɾ
    [3.1]       Undefined behavior
    [3.2]       Unspecified behavior
    [3.3]       ˥󥰤˾ޤ¾Υ
    [3.4]       ¾γƼʼ
    [3.5]       C++ Υץץ

åץץμ
    [4.1]       ɸإåե
        [4.1.1]     Ū
        [4.1.2]     <assert.h>
        [4.1.3]     <limits.h>
        [4.1.4]     <iso646.h>

ƼץץåΥƥȷ
    [5.1]       ƥȤץץå
    [5.2]       ɽ
    [5.3]       ƥץץåħ
    [5.4]       ɾ
    [5.5]       ƥȤո


   ӣ   ֣ ӣ塡

   Martin Minow  DECUS cpp Ū˽ľ MCPP V.2 ȾΤ
 portable ʣåץץåޤΥץץåϥ
󶡤Τǡѥ뤹˥إåեΤĤΥޥ
ؤ뤳ȤǳƼνѤ˰ܿǤ褦ˤʤäƤꡢޤ¾Υޥ
ؤ뤳Ȥ Standard C (ISO/ANSI/JIS C) ȤƼư
ͤμ¹ԥץब褦ˤʤäƤޤλͤΤ
Standard C ⡼ɤϡʸ̤θ̩ Standard C ץץ¸
ĤǤ*1
  ΥץץåʤϡΥƥȤΤ "Validation
Suite for Standard C Conformance of Preprocessing" ʥץץɸ
Ŭ򸡾ڤ륽եȥ켰ˤȾΤΤޤΥɥ
ȤϤθڥå (Validation Suite) βǤθڥåȤϤ
ΥɥȤȤȤ free software ȤƸޤ

  θڥåȤ 1998/08  NIFTY SERVE / FC / LIB 2 Ǹ졢http:
//www.vector.co.jp/pack ˤžܤޤˤ version number 
ޤǤ version 1.0 ǤäȤˤޤ
  V.1.1 ϡC99 1997/08 draft б V.1.0  update ΤǤ
1998/09 ˡϤ NIFTY SERVE / FC / LIB 2  vector / software
pack Ǹޤ
  V.1.2 ˷ꤷ C++ Standard бơV.1.1 ˤ
updates äΤǤ1998/11 ˡϤ NIFTY SERVE / FC / LIB 2 
 vector / software pack Ǹޤ
  V.1.3 ˷ꤷ C99 бơV.1.2  updates äΤ
ޤưƥȤΥץϡGNU C / testsuite ѤǤ褦˽
ľ edition ɲäޤ
  V.1.3 ϳȯǡMCPP V.2.3 ȤȤˡȶ (IPA)
ʿǯ١̤Ƨեȥ¤ȡפ˿ ͵ץȥޥ͡
ˤäƺ򤵤졢2002/07 - 2003/02 δ֤ IPA λȿУ
νΤȤ˳ȯʤޤѸǥɥȤ⤳Υץ
ǡͭ²ҡϥ˻䤬ȥƥ
äƤǤäΤǤ2003/02 ˤ MCPP V.2.3 ȸڥå V.1.3
 m17n.org Ǹޤ
   MCPP ȸڥåȤʿǯ١̤Ƨեȥ¤ȡפˤ
 PM ˤäƷ³ƺ򤵤졢줾 V.2.4, V.1.4 ؤ
update Ȥʤޤ*2

  øεʤȤƤϽ ISO/IEC 9899:1990 (JIS X 3010-1993) Ȥ
Ƥޤ1999 ǯˤ ISO/IEC 9899:1999 򤵤ޤǤ
Ԥ C90Ԥ C99 ȸƤӤޤԤ ANSI X3.159-1989 ܹԤ
ʤΤǡ̤ˤ ANSI C ޤ C89 ȸƤФ뤳Ȥ⤢ޤޤISO/
IEC 9899:1990 + Amendment 1995  C95 ȸƤ֤Ȥޤ
  βǻȤֵʽפϼΤΤǤ

  C90:
    ANSI X3.159-1989        (ANSI, New York, 1989)
    ISO/IEC 9899:1990(E)    (ISO/IEC, Switzerland, 1990)
        ibid.   Technical Corrigendum 1     (ibid., 1994)
        ibid.   Amendment 1: C Integrity    (ibid., 1995)
        ibid.   Technical Corrigendum 2     (ibid., 1996)
    JIS X 3010-1993
             ܵʶJIS ϥɥ֥å 59-1994ס1994
  C99:
    ISO/IEC 9899:1999(E)
        ibid.   Technical Corrigendum 1
  C++:
    ISO/IEC 14882:1998(E)

  ANSI X3.159 ˤ "Rationale"ͳˤ°Ƥޤ ISO
C90 ˤϤʤѤޤǤISO C99 Ǥ褷ޤ
"Rationale" ޤ˿ƻȤޤ
  C99, C++ εʽ PDF ǥեޥåȤ줿饤ǤΤȤ
ǤޤǤϳ $18draft  corrigendum ̵ˡ

    C99, C++98
        http://webstore.ansi.org/ansidocstore/default.asp
    C99 Corrigendum 1
        http://ftp2.ansi.org/download/
            free_download.asp?document=ISO%2FIEC+9899%2FCor1%3A2001
    C99 Rationale 1999/10 final draft
        http://anubis.dkuug.dk/JTC1/SC22/WG14/www/docs/n897.pdf

  *1   cpp  V.2.2 ޤǤñ cpp ȸƤǤ̤ cpp ʶ
    路Τǡ V.2.3  MCPP ȸƤ֤ȤˤMatsui CPP ΰ̣
    롣ΥɥȤǤ V.2.2 ޤǤΥС MCPP ȸƤ֡
    ΥɥȤ̾ V.1.2 ޤǤ cpp_test.doc ȤƤ
    V.1.3  cpp-test.txt ѹ伫Ȥ̾⡢V.1.2 ޤǤ
    Psycho ȤƤV.1.3  kmatsui ѹ
  *2  ̤Ƨեȥ¤ȡ(Exploratory Software Project) γ
    ϼΤȤΤ뤳ȤǤ롣

        http://www.ipa.go.jp/jinzai/esp/

    ʤȶ (IPA)  2004/01 Ωˡ͡
    ʵ (IPA) ˲Ȥ줿

    MCPP V.2.3 ʹߤΥӥɥȤȸڥå V.1.3 ʹߤϳ
    ȯ revision ޤơ CVS repository ֤Ƥ롣
    tar-ball  download Ǥ롣

        http://cvs.m17n.org/cgi-bin/viewcvs/?cvsroot=matsui-cpp

    ΤȤ anonymous ftp Ǥ롣

        ftp://ftp.m17n.org/pub/mcpp/

    ޤΤȤˤϰ web page 롣

        http://www.m17n.org/mcpp/

    cpp V.2.2 Ӹڥå V.1.2 ϥ٥ҤΥȤμΤȤ
    롣PACK for WIN GOLDפȤ CD-ROM ˤϿƤdos/
    prog/c Ȥǥ쥯ȥƤ뤬MS-DOS ѤǤϤʤ
     UNIX, WIN32/MS-DOS, OS-9 бƤ롣

        http://download.vector.co.jp/pack/dos/prog/c/cpp22src.lzh
        http://download.vector.co.jp/pack/dos/prog/c/cpp22bin.lzh
        http://download.vector.co.jp/pack/dos/prog/c/cpp12tst.lzh

    http://download.vector.co.jp/  ftp://ftp.vector.co.jp/ ǤƱ
    Ǥ롣

    ǤϼΤȤˤ⤢ʤϲ closed ʥեǤˡ

        @nifty / FC / lib 2

    Υ֥եΥƥȥեϡVector ΤΤ
    DOS/Windows Ϥ˹碌Ʋԥɤ [CR]+[LF] shift-JIS 
    encode Ƥ롣m17n.org ΤΤ UNIX Ϥ˹碌Ʋԥɤ [LF]
     EUC-JP Ǥ롣¾ΣϣӤǻȤѴɬפǤ롣
    ۺ convf ȤġȤȡե礷Ѵԡ
    ΤǴñǤʥХʥեϼưŪȽ̵̤Ѵǥԡ
    롣Time-stamp  mode ¸ˡMCPP Υѥå
     multi-byte character encoding ƥȤ뤿Υե
    ޤޤƤΤǡ encoding ѴƤϤʤޤե
    ԥɤѴư祳ԡ doc ǥ쥯ȥ
    ԥɤȴ encoding Ѵƾ񤭥ԡΤɤ
    Convf ΤΤ MCPP ܿΤƱϤбƤ롣
    ե DOS/Windows Ϥ¾ΣϣӤ˻äƤϡMS-DOS 
    Windows95 ǲहʸȾʸζ̤ʤʤäƤޤΤǡ
    ֥եΤޤްܤƤ顢षѴ뤳ȡConvf ϼ
    ΤȤˤ롣

        http://download.vector.co.jp/pack/dos/util/text/conv/code/
                                                        convf-1.8.lzh


           ӣ  ץץħ

  Validation Suite β򤹤ˡStandard C (ANSI/ISO/JIS C) Υץ
ץŪħƤޤ϶ʽŪǤϤʤ
K&R 1st. Ӥʤ Standard C Υץץιͤ
ˤ褦ȤΤǤ
  λȤƤϡK&R 1st.  C90 Ȥ濴Ȥ C90  C99,
C++ ȤդäȤȤޤߤϵʤȤƤ C99 
ͭʤΤǤ¤νϤˤ C99 ϤޤޤƤʤΤǡ
C90 濴ȤۤºŪȻפ뤫Ǥ
  ʤξϤǤϥץޤäƤޤ󤬡Validation Suite
ΤΤץʤΤǡ򻲾ȤƤ

    [1.1]       K&R 1st.  Standard C Υץץ

  Pre-Standard ΣøϤˤ麹̤ޤǤ
ץˤϤۤȤɴबʤȸäƤ褤餤ξǤʤ
ϡȤʤ٤ Kernighan & Ritchie "The C Programming Language",
1st. edition Υץץε꤬ޤˤñʤޤʤΤǤ
ȤˤޤˤطʤˤϡץץϸΤФ֤
ޤפΤ褦ʤΤȤͤäȻפޤK&R 1st. ʹߡ
ƽϤˤäƥץץˤ¿εǽդäƤޤ
ƤˤϸΤ䤦ΤΤȡۤʤϴ֤Ǥ portability
ݤ褦ȤΤȤޤɤˤƤϴ֤㤬¿
portable Ǥˤ󤤤Τ¾Ǥ
  Standard C ǤĹǯκθǤäΥץץΤʵ꤬Ϳ
ޤɲä줿ǽ⤤ĤꡢˤĤƤŪ
褯ΤƤޤäʤȤϡStandard C ץץ˴
¾ƤŪʵǤȤȤǤεˤϡ
ǤޤǤä֥ץץȤϲפȤŪʤȤˤĤƤι
˸ƤޤStandard C Υץץ K&R 1st. +  Ǥ
ʤΤǤ򤹤ˤϡֿǽפǤʤܤΤ
İ뤳ȤɬפȻפޤǰʤȤˤϵʽʸˤϤ
ΤȤޤȤƽҤ٤ƤϤ餺ʽǤ "Rationale" Ǥ
ȿƤǤ˻ǰʤȤˤϡΥץץ
ȤŶη̤ȻפӤʤʬĤƤޤǡʲ
 Standard C ץץδŪħޤȤƽҤ١ˤ
Ƥ뤳Ȥˤޤ
  Pre-Standard ΥץץȰۤʤ롢뤤ϽΤˤ줿
Standard C ץץħϡΣˤޤȤ뤳ȤǤޤ

  Τνϰ¸ʬʤ¹ԻĶ execution environ-
mentˤΩʸ̤ΥץץǤ롣Ϥˤäƥץץ
ճʷ̤ˤʤ붲Ϥƾʤޤˤäơץץ
åΤΤΥ portable ˽񤯤ȤǽˤʤäƱΣ
ӤǤСץץåμ¹ԥץϣĤǤ⤹ȸäɤ
Ǥ롣
  Translation phases εˤäơ token ʬ䤹ޤǤ
礬ΤƤ롣Token ץץޤǤ pre-
processing token ȤŪʷǰ롣Preprocessing token Ȥ
Τ token ̤˵ꤷȤ⡢ץץΤν
¸ʬڤΥȤΩäƤ롣
  ץץ preprocessing token ñ̤Ȥ롢§Ȥ
token-oriented ʤΤǤ롣Ф pre-Standard Υץץ
token-oriented ʷˤʤ顢Ūаޤ餯 character-
oriented ʽ򤹤ʬ򾯤ʤ餺ȾüʤΤǤä
  ؿͥޥŸϴؿƤӽФǥˤ뤳Ȥǡʸˡ
Ƥ롣ؿͥޥθƤӽФϴؿƤӽФλȤȤʤɤǤ
Ȥ롣˥ޥƤӽФν⡢ؿΰ˴ؿƤ
ФɾȥѥǤꡢΥޥŸƤ
ִꥹΥѥ᡼֤롣λΥޥƤӽ
ϤΰǴ뤷ƤʤФʤʤ

  θ§ʲ˽缡ƤƤޤ

    [1.2]       Translation phases

  ץץμ K&R 1st. ǤϤޤäܤƤʤäˡ
¿κθȤʤäƤޤStandard C Ǥ translation phases Ȥ
Τꤵơ줬Τˤޤ󤹤ȼΤ褦ʤΤǤ
*1

  եʸɬפʤ饽ʸåȤ map 롣Tri-
graph ִ򤹤롣*2
  <backslash><newline> 롣ˤäʪԤ³
Ԥˤ롣
  Preprocessing token  white spaces Ȥʬ򤹤롣Ȥ one
space character ִ롣ԥɤݻ롣
  Preprocessing directive ¹ԤޥƤӽФŸ롣#
include directive Сꤵ줿եˤĤ phase 1 
phase 4 ƵŪ˽롣
  ʸåȤ¹ԻʸåȤؤѴ򤹤롣Ʊͤˡʸ
ʸƥ escape sequence Ѵ롣
  ܤʸƥϢ뤷ܤ磻ʸƥϢ
롣
  Preprocessing token  token Ѵѥ뤹롣
  󥯤롣

  󡢤ϼºݤ̡ phase ˤʤäƤɬפϤʤƱ
̤ˤʤ褦˽ɤȤˤʤäƤޤ
  Τ phase 1  phase 4 ޤ 6 ޤǤץץϰϤ°
ޤץץåΩץˤʤäƤƥץץ̤
֥եȤƽϤϡԥ token separator ¸
ɬפ뤿ᡢphase 4 ޤǤôΤ̤Ǥphase 5  \n 
 escape sequence ѴƤޤȡ줬 token separator ȤƤβ
ԥȶ̤Ĥʤʤˡ Validation Suite ǥƥȤΤ
phase 4 ޤǤǤ*3

  *1  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
      C99 5.1.1.2 Translation phases
    C99 Ǥ phase 4  _Pragma() operator νդä줿
    ۤ㴳λ礬ɲäƤ뤬̣ѲϤʤ
  *2  C99 1997/11 draft Ǥϡtrigraphs Ѵˡbasic source
    character set ˴ޤޤʤ multi-byte character  \Uxxxxxxxx Ȥ
     Unicode Σ sequence ʤ universal character name 
    Ѵ롢ȤˤʤäƤơphase 6 Ǥ¹Իʸ
    åȤ˺ѴȤΤǤ롣C++ Standard ǤۤƱͤǤ롣
    ͤޤǤ뤦ˡϤˤȤäƤϤô礭
    Ǥ롣ʤȤ 1999/01 draft  phase 1 νϺ
    졢C99 ǤǤ⤽̤Ȥʤä
  *3  MCPP Ǥ CONCAT_STRINGS Ȥޥ TRUE ƥ
    ѥ뤷Ƥȡphase 6 ץץåǤ롣phase 5
    ȤФ escape sequence ޤʸƥ뤬Ϣ뤵줿˴ְ
    ä̤ˤʤ붲줬Τǡphase 5 ʸƥˤ
    äȤäƤ롣ºݤư misc.t / PART 7 ȡ
    ޤ MCPP ǤϡSJIS_IS_ESCAPE_FREE Ȥޥ FALSE 
    ѥ뤷Ƥȡshift-JIS ǧʤѥΤΤ
    ˡphase 4ʤޤ 6ˤäƤ顢ʸƥ뤪ʸ
     shift-JIS ΣХܤ 0x5c (\) ǤäϤˤ⤦
     0x5c 롣[2.4.36] ȡ
    Ϥ⡢phase 5, 6 νԽʬʥѥΤΤ
    ǽǤ롣ᤤ phase ǤäƤޤȴְ㤤
    phase 4 ޤǴ˽äƤǤϤʤ

        [1.2.1]     ³ tokenization 

  <backslash><newline> ˤ³ K&R 1st. Ǥϡ
  Ĺ #define ԤˤΡ
  ĹʸƥˤΡ
ΣĤܤƤǡ¾ξϤɤʤΤ餫ǤϤ
Ǥ
  Standard C Ǥϡphase 3  preprocessing token  token separator 
Ƥ white spaces ؤʬ䤬Ԥˡphase 2  <backslash>
<newline> κԤ뤳ȤΤˤ졢ɤʹԤǤ⡢ɤ token
ǤͭȤʤޤ
  ޤtrigraph ν phase 1 ǹԤΤǡ??/<newline> Ȥ
sequence Ʊͤ˺ޤ¾ǡʸåȤ ASCII  multi-
byte character  encoding  shift-JIS ǤϤǤϡ
Ĥ multi-byte character ǤΤǡХܤ 0x5c Υɤ
<backslash> ǤϤޤ
  Translation phase ΤˤʤäΤɤΤǤϤ token 
Ǥι³ʤɤȤΤǧɬפΤɤϡǤK&R
1st. Ǥϲ̣ԤˤޤʤĹʸƥ̤ˤޤ褦
񤯤ˤϤˡʤä櫓ǤStandard C Ǥܤʸ
ƥ뤬Ϣ뤵뤳ȤˤʤäΤǡ虜虜 token ǲԤɬ
ϤʤʤäƤޤ³ɬפʤΤĹȥԤ񤯻Ǥ
ǤСphase 2  3 ϵդΤۤɤäΤǤ
  ˤ⤫餺줬ߤεΤ褦˷ޤäΤϡK&R 1st. ʸ
ƥι³ˤϢȤͤȤƽ񤫤줿Ǥ
褦ˤȤbackward compatibilityʸߴˤΤȻפޤ
ˤĤƤϼѾϤۤȤɰ̣ΤʤǤñ
ʡκǤưפʤΤǤΤǡǤ礦

    [1.3]       Preprocessing token

  Preprocessing tokenʰʸ塢pp-token άˤȤǰ Standard C 
Ƴ줿ΤǤˤĤƤ֤ǤޤΤƤ
褦ʤΤǡƤ󤫤ϤʤФʤޤpp-token ȤƵ
ƤΤϼ̤Ǥ*

    header-name
    identifier
    preprocessing-number
    character-constant
    string-literal
    operator
    punctuator
    嵭ΤɤˤƤϤޤʤ non-white-space character

  ʤΤ褦ǸᤴƤޤǤ
token ȤϤʤäƤޤToken ϼΤ褦ʤΤǤ*

    keyword
    identifier
    constant (floating-constant, integer-constant, enumeration-constant,
        character-constant)
    string-literal
    operator
    punctuator

  Pp-token  token ȰäƤΤϼǤ

  Keyword ¸ߤʤkeyword Ʊ̾ identifier Ȥư
롣
  Constant Τ character-constant ƱǤ뤬floating-
constant, integer-constant, enumeration constant ¸ߤfloating-
constant, integer-constant  preprocessing-number ȤΤ
롣
  Header-name  pp-token ȤƤ¸ߤʤ
  Operator  punctuator ϤۤƱǤ뤬operator  #, ## 
punctuator  #  pp-token ȤƤ¸ߤʤʤ preprocessing
directive ԤǤͭˡ

  ȡƱʤΤ string-literal  character-constant ʤΤǤ
ǤפʤΤ keyword ¸ߤʤȤȡ token  pre-
processing-number ¸ߤǤΣˤĤơ˸Ƥޤ

  *  ANSI C 3.1 (C90 6.1) Lexical elements 
     C99 6.4 Lexical elements
    C99 Ǥ pp-token Ǥ token Ǥ operator  punctuator ˵ۼ
    Operator ȤѸ token μȤƤǤϤʤñˡֱ黻ҡ
    ȤǽɽѸȤʤäƱ punctuator token (punctuator pp-
    token) ʸ̮ˤä punctuator ʶڤҡˤȤƵǽꡢ
    operator ȤƵǽꤹ뤳Ȥˤʤ롣ޤpp-token α黻ҤȤ
     _Pragma ɲä줿

        [1.3.1]     Keyword ʤ

  Keyword  phase 7 ǽǧޤץץ phases Ǥ
keyword  identifier ȤưޤơץץˤȤäƤ
identifier ϥޥ̾Ǥ뤫ޥȤƤʤ identifier
Ǥ뤫Τɤ餫Ǥ (*1)ȤȤϡkeyword Ʊ̾Υޥ
ȤȤȤˤʤޤ
  εϡץץϰ¸ʬڤΥԲķΤ
Ȼפޤˤä㤨 #if ˥㥹Ȥ sizeof Ȥ
ػߤޤ*2

  *1  äΤ˸СޥΥѥ᡼̾ identifier Ǥ롣
    ޤpreprocessing directive ̾ü identifier Ǥꡢkeyword
    ȻʤäƤ롣줬 directive Ǥ뤫ɤϹ
    ʸȽǤΤǤꡢdirective ǤʤˤСޥŸ
    оݤȤʤꤦñʤ identifier Ǥ롣
  *2  [2.4.14.7], [2.4.14.8] ȡ

        [1.3.2]     Preprocessing-number

  Preprocessing-numberʰʸ塢pp-number άˤϼΤ褦˵ꤵƤ
ޤ*1, *2

    digit
    . digit
    pp-number digit
    pp-number nondigit
    pp-number e sign
    pp-number E sign
    pp-number .

  Non-digit ȤΤ letter  underscore Ǥ
  󤹤Ȥʤޤ
  Ƭ digit ޤ . digit Ǥ롣
  Ȥ letter (alphabet), underscore, digit, period  e+, e-,
E+, E-  sequence Ĥɤ¤ǤƤ⤫ޤʤ

  Pp-number  floating-constant, integer-constant Τ٤Ƥޤߤޤ
㤨 3E+xy ȤäͤǤϤʤΤޤǤޤPp-
number ϥץץñˤ뤿˺Ѥ줿Τạ̇̄Ω
Ĥμ sequence  tokenization ΩĤȤƤޤ*3
  Tokenization ñˤʤΤϳΤǤ pp-number ͭ
token ǤϤޤ󡣤äơϥץץνޤǤ˾
ƤʤФʤޤ pp-number ȤΤ虜虜
ǻȤɬפϤޤޤ󤬡ƻȤȤͣͤΤϡ##
黻ҤȤä줿ޥǿ pp-number Ȳ pp-token ȤϢ
뤵 pp-number Ȥʤꡢ # 黻ҤȤä줿ޥ
ˤäƤ줬ʸ󲽤ǤʸƥƤޤС
ɤ pp-token  valid  token ˤʤޤ pp-number
¸ߤǧʤȡϢˤä줿Τ valid  pp-token Ǥ
ʤʤäƤޤޤʤη̤ undefined Ȥʤˡ*4
  Ȥƻ϶ˤüʤΤǤܺ٤˸ƤɬפϤޤ󤬡
 pp-number  token-oriented ʥץץͤ뤦Ƕ̣
󶡤Ƥޤ

  *1  ANSI C 3.1.8 (C90 6.1.8) Preprocessing numbers 
      C99 6.4.8 Preprocessing numbers
  *2 C99 ǤưΣɽǽˤ뤿ˡpp-number p
    sign, pp-number P sign Ȥ sequence ɲäƤ롣
    ޤ嵭 nondigit  identifier-nondigit ֤줿
     identifier  UCN (universal character name) Ƚ
    multi-byte character λѤǧ줿ΤȼѹǤ[1.8] 
    ȡˡʤpp-number  UCN ȤȤǤmulti-byte
    character ȤǽǤ롣ͥȡ UCN  multi-byte
    character ޤޤ뤳ȤϤʤΤǤ뤬Ϥ ##, # 黻ҤȤ
    ʸ󲽤ΤȤͤơ줬ǧƤΤǤ롣
  *3  C89 Rationale 3.1.8 Preprocessing numbers
      C99 Rationale 6.4.8 Preprocessing numbers
  *4  misc.t  PART 5 Υץ򻲾ȡ

        [1.3.3]     Token-base ư token Ϣ

  Standard C Ǥϥޥ黻 ## ˤä pp-token Ϣ뤹
뤳ȤǤ褦ˤʤޤΤȤ Standard C ΡֿǽפȤ
褯ΤƤޤɲä줿ǽȤϡ΢
Ūˡؤ뤿Ƴ줿ΤǤܤΤϡ줬 token-
oriented ʥץץΤɬܤΤΤȤʤäƤ뤳ȤǤ
   token ϢˡȤƤϡ "Reiser"  cpp ǤΡ
Ȥ 0 Ĥ character ִȤͤѤΤΤƤޤ
ޤʳˤ character-oriented ư򤹤ץץåǤϡ
ޤʤˤޤ token Ϣ뤬ȯƤޤȤꡢѤ
΢ŪˡʤǤϤޤǤϤ⡢character-
oriented ʥץץη٤Ѥˡȸޤ
  Ф Standard C Ǥϡtoken-oriented ưˤäŪ
token Ϣ뤹뤳ȤǤ褦ˤʤäƤޤTranslation phase 3 ǥ
 pp-token  white spaces  sequence ʬ򤵤ޤθ
pp-token ȤΤϡ## 黻ҤˤϢ # 黻Ҥˤ
ʸ󲽡header-name ܤʸƥϢȥ磻
ʸƥϢ뤷ޤ pp-number ¸ߤ⤳ʸ̮
֤ƹͤȡΰΤˤʤޤʤStandard C
 tokenization ˤĤƤϡΤ褦ʸ§¸ߤƤȸǤ礦

  Pp-token ۤΤϢ뤵뤳ȤϤʤϢ ## 黻Ҥˤ
äʤФʤʤ
  äϢ뤵줿 pp-token ƤʬΥ뤳ȤϤʤ

  Pre-Standard  character-oriented ʥץץǤϡޥƤӽФ
Ÿȡη̤ token sequence  token ȰտޤʤϢ
Ȥޤ token-oriented 
Standard C ΥץץǤϵäƤϤʤʤȤȹͤޤ*

  *  [2.4.21] ȡ

    [1.4]       #if ɾη

  C90 Ǥ #if ɾ long ʤ unsigned long ΣΥǹ
뤳Ȥˤʤޤ (*1)⡢ץץñ㲽ȤȤˡ
ϰ¸ʬ򾯤ʤΤΩäƤޤint ΥϤˤ
礭ѤΤ٤ơlong / unsigned long ȾνϤӥ
ȡνϤӥåȤޤϣӥåȤǤ顢̤ #if 
ˤϤʤ portability ݤǤޤ*2, *3

  *1  ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ --
    Semantics ̣§
  *2  C99 6.10.1 Conditional inclusion
    C99 Ǥ #if ηϤνϤκȤ줿C99 Ǥ long
    long / unsigned long long ɬܤǤΤǡ long long /
    unsigned longlong ޤϤʾȤȤˤʤ롣ˤ
     #if  portability Ϥʤ㲼뤳Ȥˤʤä
  *3   long ӥåȤνϤƤ뤫⤷ʤ
    ɤȤȤ;̤Ǥ뤬ΥϼΤ褦
    ˷ۤɤȻפäƤ롣
    short ϣХȡlong ϣХȤȤ롣
    ץǣХȤ longlong ĤȤǤlong long 
    Ϥʤˡ
    int  CPU ˤȤäƤμʥȤ롣ʤ short,
    long, longlong Τɤ줫ĤȰפ롣
    short int, long int Ȥդ short, long  int ν˻Ȥ
    ȤϤ롣
    ʤӥåȤνϤνи衢sizeof (short) <= sizeof
    (int) <= sizeof (long) Ȥ󤬤뤿ˤ٤ƤԼˤʤꡢ
    ɤη portability ʤʤäƤƤΤǤ롣Ϥ
    ơХǷΤɤ

    [1.5]       Portable ʥץץå

  ʾΤ褦 Standard C ץץεϡץץåΤΤ
 portable ˽񤯤ȤǽˤƤޤץץåѥ
Τνϰ¸ʬˤĤΤʤФʤʤȤϡʤ
ºݤ Standard C νϤǥץץå portable ˽񤳤Ȥ
ȤʤΤϡΤ褦ʼŪʬǤ

  #include ΤΣϣӤΥѥꥹȵҷɸإåե
Τ꤫
  ե̾ȹֹξ򥳥ѥΤϤη
  ¹Իץ
  ʸåȡ
  ϤǤϡC90 Ǥ long / unsigned long ΡC99 ǤϺ
ΥåȽϤΤ򲼲äƤƤϤʤʤȡ

  Τȣϴ¸νϤ˼Ȥʤǡ⤤
ϥƱ #line 123 "filename" Ȥ줵ƤȴԤ
ޤ̵ƤʻȤϤȤ⤫ŪˤϡStandard C Υץ
ץϲǽǤ⥽νˤäƤϡ̤ implementation
ɬפȤʤǽ񤱤ʤϤޤʤʸåȤϥ
˥ơ֥񤯤ۤڤǤ뤬ˡϼºݤˤϡۥȽϤΤ
åȽϤΥȤȤϤۤȤɤʤ
Ǥ礦顢ȤϤʤʤǤ礦

  MCPP 󡢤 Standard C ץץλͤΤ
ΩƤ뤳ȤưȤƤޤʤMCPP  pre-Standard
νϤǥѥ뤹뤳Ȥ⡢pre-Standard νϤ˰ܿ뤳Ȥ⡢
ޤ pre-Standard  post-Standard γƼץץå뤳ȤŪ
ˤƤΤǡportability ݤΤ #if section ʤ¿ʤä
뤬ˡ

    [1.6]       ؿͥޥŸˡ

  դΥޥŸˡ Standard C ǤϴؿƤӽФǥˤ
ꤵ졢function-likeʴؿ͡˥ޥȸƤФ褦ˤʤޤ
˥ޥޤޤƤϡ§Ȥơϥѥ᡼Ȥִ
äŸޤ
  Pre-Standard ǤϤ餫ǤϤޤǤºݤˤϡ
ΥޥŸ˥ѥ᡼ִŸȤˡ
Τ¿äΤǤϤʤȻפޤŸˡطʤˤ
ϡХǥͤΥƥִη֤ȤȯۤǤäȿ¬
ޤʤޥŸϰ̤˥ǥͤΥƥִη֤Ǥ
ޤʤ櫓ǤդޥŸˤ⹭Τ¿Υ
ץåΥޥŸˡäΤǤϤʤǤ礦
  ˡϥǤδؿƤӽФͤγѤȤϤޤäۤʤä
̯ʥޥλȤͶȯͥȤ줿դޥθƤӽФκݤ
ϡɤ줬ɤΰʤΤ狼ʤʤ֤ȯޤ
äƽϰ¸ʬƤޤǸСäΥޥŸϹ
ʵǽô褦ˤʤäˡǥͤΥƥִη֤Ȥ
ȯۤǤϤϤ٤ŤʤꤹȸǤ礦

        [1.6.1]     ؿƤӽФƱ

  Ƨޤ Standard C ϡfunction-like ޥθƤӽФ
ؿƤӽФؤǤΤȤưդ뤳Ȥǡʸˡȹͤ
ޤRationale  Standard C Υޥ˴ؤ뵬꤬ɤȤ
§򤤤Ĥ󤲤Ƥǡ§򼨤Ƥޤ*

  ؿȤȤǤϤɤǤޥȤ褦ˤ뤳ȡ
  ޥƤӽФϤɤˤäƤ⡢ʤϤʸˤäƤ⡢ޥ
    ΰˤäƤ⡢ޥˤäƤ⡢Ʊ token sequence 
    褦˥ޥŸꤹ뤳ȡ

  ϴؿƤӽФʤΤȤǤդޥθƤӽФ
ǤǤϤʤäΤǤǥͥƥִη֤Ǥϡ
ʤȤ餫Ǥ

  *  C89 Rationale 3.8.3 Macro replacement
     C99 Rationale 6.10.3 Macro replacement

        [1.6.2]     ֤Ÿ

  ؿƤӽФȥѥʥޥŸȤ§¸뤿˴οʤΤϡ
ΥޥŸƤѥ᡼֤뤳ȤǤ
ơΤˤϰΥޥƤӽФϤΰǴ뤷Ƥʤ
ʤޤʴ뤷Ƥʤϥ顼ȤʤˡΥޥθ
ΥƥȤ򿩤äƤޤʤɤȤȤäƤϤʤޤ󡣤ˤäơ
ͥȤ줿ؿͥޥθƤӽФŪݤĤȤǤޤ
*

  *  [2.4.25] ȡ

            [1.6.2.1]       #, ## 黻Ҥ operand Ÿʤ

  # 黻Ҥ operand ϥޥŸʤȤˤʤäƤޤ
## 黻Ҥ operand ޥŸ줺Ϣˤä줿 pp-
token Ϻ˥ޥŸоݤȤʤޤεϤʤɬפʤΤǤ
礦
  ε꤬̣ĤΤϡޥޤǤǤ
ޤ token sequence 򤽤Τޤʸ󲽤Ϣ뤷ꤷˡ
ε꤬ΩĤȤˤʤޤդŸƤʸ󲽤Ϣ뤷
ϡ#, ## 黻ҤȤʤޥ⤦Ĥ֤뤳Ȥˤʤ
ΤɤǤץޤǤ褦ˤ뤿ˤϡ#, ## 黻
 operand ϥޥŸʤȤ꤬ɬפʤΤǤ*

  *  [2.4.25.4, 2.4.25.5], misc.t / PART 3, 5 ȡ# 黻Ҥ operand
    ޥŸʤȤ꤬ΩɽŪ assert() ޥ
    Ǥ롣[4.1.2] ȡ

        [1.6.3]     Ȥ

  ơޥŸϥޥƤӽФִꥹȤ֤졢function-
like ޥΰ§ȤŸƤִꥹΥѥ᡼
줿塢ִꥹΥޥƤӽФ򤵤ƺ
ȤˤʤäƤޤ
  κ K&R 1st. λͤǤơطʤˤϡ֥ǥ
Υƥִη֤פȤȯۤäȻפޤ
Standard C Ǥ function-like ޥΰ ## 黻Ҥ operand ʳ
˴ŸƤޤäƤޤǤϤäŸΤǤ
礦
  ɬפʤΤϡ## 黻ҤޤޥΤۤˤϡޥΡ
Ťˤʤä cascaded macro ǤޥƤӽФΡְפ
ŤˤͥȤƤϡϺҹ¤Ÿ
ƤΤǡ̾ϺǿŸ뤳ȤϤޤʤ㳰
Ϥ롣[1.7.6], [2.4.27] ȡˡ

        [1.6.4]     ƱޥκƵŪŸɻ

  Cascaded macro ϼŸƤޤʤäƤϺ
礬ޤϥޥȤƵŪˤʤäƤǤ
ΤޤŸ̵ºƵ˴٤äƤޤޤȤˤΥޥޤ
ƤľܺƵξϤ󡢣İʾŪ˺ƵƤ
ƱҤޤ򤱤뤿ᡢStandard C ǤϡŸ
ΥޥƱ̾Υޥִꥹ˸Ƥ⡢ִ
פȤղäƤޤʸϤǤΰտޤϤ狼
䤹ΤǤ
  ϴؿͥޥξ硢ؿȤϰäʸˡˤʤǤǥ
ȤޤäƤޤޥͭλͤǤꡢޥǤǤʤ
ʽȤƽȤƤΤʤΤǡλͤβƻĤΤ
ʤȤǤ礦

    [1.7]       

  ơʾǤ Standard C Υץץɤ̡ñ̤
夲Ƥޤܺ٤˸ƤȡԵ§ʤȤ䡢ϤΥ
Сإåɤγͭܿ˳Ȥ˴ޤޤƤޤ
¿ pre-Standard ŪŪʥץץˡ
줺˻ĤäƤޤäΤȻפޤΩʤĲŪʬ
¸ߤͤ狼ˤäˤƤޤޤ
Standard C ˤäƿ̵ѤѻˤʤäȤ鷺ʤ餢ޤ
ʲˤФƤߤޤ

        [1.7.1]     <stdio.h> η header-name

  <, > ǰϤޤ줿 header-name  K&R 1st. Ū˻ȤƤƤ
ΤǤȡȤƤϤ㳰ŪԵ§ʤΤǤΤ
Standard C Ǥ header-name Ȥ pp-token ˴ؤƤ undefined ʬ
 implementation-defined ʬ¿ʤäƤޤäƤޤ㤨 /* 
 sequence ޤޤƤ undefined Ǥޤ<stdio.h> Τ
ˡheader-name Ǥʤ <, stdio, ., h, > ȤĤ pp-token 
ʬ򤵤Ȥ#include Ԥ˸¤äƣĤ pp-token ˹ʤ
ʤޤ󡣤ˡ implementation-defined ǤTokenization 
translation phase 3 ǹԤΤˡphase 4 ǤιԤ #include
directive ǤȤ狼ȡtokenization ʤʤФʤʤ
ǤϤʤϤŪʻͤȸ虜򤨤ޤPhase 3 Ǥäʬ
줿ʲΡpp-token δ֤ space νȤʤ
#include <stdio.h> ʤɤȤǥ쥯ƥ֤ϺǤ portability ι⤤
ΤΤ褦˸ޤץץμͤȤʤ portability
㤤ΤʤΤǤ#include ԤΰޥǤȡԵ§
ޤ
  ", " ǰϤޤ줿 header-name ˤϡϤޤ󡣤
\  escape ʸȤưʤȤȤ <, > ˤ header-name
ƱͤǡʸƥȤϰä̤äƤޤescape
sequence  phase 6 ǽΤʤΤǡphase 4 ǽƤޤ
header-name  escape sequence ¸ߤʤΤϡŪʤȤǤϤ
ޤʵʤǤ header-name  \  undefined Ǥ롣ϼ
ˤ뤿θǤºݡ", " Ǥ \  " ľˤΤǤ
¤ꡢʤ(*)<, > ǤϤ⤦ʣǤ뤬ˡ
  ޤ#include <stdio.h>  #include "stdio.h" Ȥΰ㤤ϡԤϽ
ξõΤФơԤϥȥǥ쥯ȥʤ
Хѥˤõơ̵ <stdio.h> ƱõȤ
ΤȤˤޤStandard C ǤϣϣӤ˴ؤ֤ƤʤΤ
֥ȥǥ쥯ȥפȤѸϻȤäƤʤ¿ΣϣӤˤĤƤ
ᤵˡʤ#include <stdio.h>  #include "stdio.h" 
񤱤ФळȤʤΤǤ
  Header-name ηˣ濫뤳Ȥϡ桼Υإåȥƥ
إåȤζ̤ܤǤ狼Ȥ readability ޤ
ΤˤϤ虜虜Ե§ʥȡѰդʤƤ⡢"stdio.h" 
"usr.H" Ȥդ suffix Ƕ̤­ޤǰΤոȡ
 readability Ǥ뤫顢ƥबե̾ʸȾʸ
̤ʤƤ⤫ޤʤ"usr.hdr", "usr.usr", "usr.u" 
Ǥ⤫ޤʤˡ
  <, > ǰϤޤ줿 header-name ϸͤȤƤ̵ѤǤꡢץץ
 tokenization ݤˤʤΤǡѻߤۤɤȻפޤ
Υ򥳥ѥ뤹뤿ˤϤʤѻߤ櫓ˤϤ椭ޤ󤬡
obsolescent feature ȵꤷƤۤΤǤ

  *  ȤC99 Ǥ \ ǻϤޤ UCN Ƴ줿ˡä
    ˤʤä

        [1.7.2]     Character-base ΤʤĤ # 黻Ҥε

  ϡ# 黻Ҥ operand  pp-token δ֤ token separator 
Ƥ white spaces ΰǤİʾ white spaces ϣĤ space
˰̤Ĥʤ space ʤȤˤʤäƤޤ
  ȾüʵǤToken-based ưŰ줹뤿ˤϡtoken
separator ̵ͭ˺ʤȤɬפǤꡢΤˤ token
separator 򤹤٤ƺ뤫Ȥ⤢ pp-token δ֤ one space
֤ɤ餫˵ꤹ٤ǤC89 Rationale 3.8.3.2 (C99
Ratiolale 6.10.3.2) The # operator ϤεˤĤơ"As a compromise
between token-based and character-based preprocessing discipline"token-
based ʥץץˡ character-based ʤȤƤȤơ˷ꤵ
줿ȽҤ٤Ƥޤ
  ϥץץåμưפˤɤ;פô򤫤
̤ˤʤäƤꡢޤʣʥޥŸˡˤޤ⤿餷Ƥ
ANSI C 3.8.3 (C90 6.8.3, C99 6.10.3) Macro replacement ޥִ
-- Examples 4. ˤ㤬ܤäƤޤ

    #define str(s)      # s
    #define xstr(s)     str(s)
    #define INCFILE(n)  vers ## n

    #include xstr(INCFILE(2).h)

   #include ԤϤŸȤΤǤ

    #include "vers2.h"

  ¿ϤǤޤINCFILE(2)  vers2 ִ뤳
ȤˤϤޤϤޤ󡣤xstr() ΰǤ INCFILE(2).h
Ÿ̤ vers2, ., h ȤĤ pp-token  sequence Ǥʽ
ŸϤΣĤ pp-token δ֤ white spaces ʤΤȤưä
ޤˤϼΤ褦꤬ޤ

  vers2 ϥˤä pp-token ǤϤʤޥִˤä
줿ΤǤ롣vers2 θ white spaces ʤȤݾڤ뤿
ϡޥִ white spaces ʤ褦ˤʤФʤ
ʤޥִˤǤȡʤȤץץå
ѥ餫ΩץǤ硢ޥŸη̤Ȥ pp-
token ۤΤϢ뤷ƤޤȤȯ롣 token-based 
ץץθ§ȿ롣
  # 黻Ҥ operand ˤʤꤦޥִ white spaces 
 pp-token ۤΤϢ뤹Τɤˤϡؿ
ޥƤӽФΰ¸ߤޥִǤϡŪ˲ white
space ִ̤򤯤Ǥ줬 # 黻Ҥ operand ˤʤä
 white space ٤ƤִäƤǸ˻Ĥä
white space ʪ space ֤롢Ȥäٹɬפˤʤ
(*1)ϥץץμˤȤäƤʤôǤ롣ơ
礦åȤʤ⡢ɬפǤ뤳Ȥϵʽʸ
餫ǤϤʤǤΤΤǤ롣

  ޤʤ䤳Ϥ٤ơ# 黻Ҥ operand 
token separator ΰȾüͳ褷Ƥޤ
  # 黻ҤǤϤ٤Ƥ pp-token  single space ʬΥʸ󲽤
Ȥͤpp-token ΰۤϢɤ䤳ȯ
Ȥʤʸ󲽤줿ɤ pp-token sequence Ǥä
狼ΤǡɤȻפޤꤹȡΥޥ "vers2 . h"
Ÿ뤳Ȥˤʤޤ󡢤ŬڤʥޥǤϤޤ
  Ǥ狼褦ˡspace ΤʤȤˤ줬ƤϺۤȤ
ͣξ礬#include ԤΥޥ #, ## 黻ҤȤ줿Ǥ
Translation phase 4 ǽ #include ԤǤϡphase 6 ǽʸ
ƥϢϻȤޤ󡣤#include ԤΥޥ϶ #,
## 黻ҤȤäƥѥ᡼ʤƤ⡢ñʸƥ
ФǤळȤǤäΤ token-based ʸ§
ϡޤˤХ󥹤򼺤Ƥޤ
  Standard C ΥץץǤ syntax  token-based ʤΤǤ
顢# 黻Ҥ semantics ΤȤ character-based ʵ꤬ơ
Ūʰ»ʤäƤޤ*2
  ξ塢ʽΤϵʸɬ餫ǤϤʤͤ
ȤƤޤŬڤǤꡢ٤Ǥ礦

  *1  MCPP ⤷礦ʤΤǤƤ롣
  *2  JIS C  ISO C ΤΤǡƤѹϲäƤʤ
    ȤˤʤäƤ롣JIS ϥɥ֥åפ X 3010 / 6.8.3 4.
    ΰˤϡfputs( ..) ȤޥŸ̤ʸȤ space ̵ͭ
    äƤȤߥ롣ΰ space ΰ̵ФǤꡢ
    # 黻Ҥε褯򤷤ƤͤƤ뤤ϰå
    ϻפʤꤽΤΤ̵ѤѻǤ뤳ȤΤǤ롣

        [1.7.3]     ޥ white spaces ΰ

  # 黻Ҥ operand  white spaces ΰƱͤε꤬ޥ
˴ؤƤ⤢ޤݡݥޥκϸΥޥʤΤǤʤ
ʤʤǤ뤿ˤϡѥ᡼ο̾ƱǡִꥹȤ
Ʊ spelling ǤʤФʤʤִꥹ white spaces 
ĤƤϡ̵ͭƱǤʤФʤʤϰäƤƤɤݡ
ȵꤵƤޤ
  # 黻Ҥε꤬嵭Τ褦ǤСִꥹ white spaces ˤĤ
ƤƱ򤷤ʤФʤʤΤǡεǤϤꡢ
ͳ # 黻Ҥεˤޤ
  # 黻Ҥ operand  pp-token δ֤ˤϤ٤ one space Τ
ưȤȤˤСޥκ˺ݤƤ white spaces ̵ͭ
ˤʤʤʤޤ
  ˡץץåμǤϤ̲ơΤ٤Ƥ
pp-token δ֤§Ȥ one space ֤褦ˤ뤳ȤǤޤ
뤳ȤˤäơޥŸ˺ݤƤ tokenization ñΤ
ԤȤǤޤθ§㳰ĤޤĤ
preprocessing directive ԤǤβԥɤǤꡢ⤦ĤϥޥǤ
ޥ̾Ȥ³ '(' δ֤ white spaces ̵ͭǤФ
ŪˣäΥץץκƤΤǤꡢޤѤ櫓
Ϥޤ

        [1.7.4]     ؿͥޥΥѥ᡼̾

  ޥκ˺ݤƤϥѥ᡼̾פƤʤФʤʤ
ꤵƤ뤳Ȥ [1.7.3] ǿޤϲʵȻפ
ޤѥ᡼̾ϡޥŸ˲ΰ㤤⤿餷ޤ󡣤
˺ݤƤå뤿ˤϡץץåϤ٤Ƥ
ޥΥѥ᡼̾򵭲ƤɬפޤȤ
⤽λȤƻϡʤȤ⵬ϰϤǤϡΥåʳ˲⤢
ޤ󡣤äΤۤȤɰ̣ΤʤåΤˡϤ˥Х
ˤʤʤСإåɤ򤫤Τϡޤ
  ޥκǤϥѥ᡼̾פƤʤФʤʤȤϡ
ۤɤȻפޤ

        [1.7.5]     ɾΤ狼ʤ #if ʸ

  #if ԤΰǤ #if Ǥɾϥץץ
ǹԤΤǼ¹ԻĶΩΤǤʤФʤޤ󡣤Τᡢ
̤顢¹ԻĶФ䤤碌ɬפȤ륭㥹ȡ
sizeof 黻ҡƤޤʤ translation phase 7
ǽɾˡʸʤӥ磻ʸˤϽ
Ƥޤ
  ʸɾϼΤ褦˲ŤˤǤꡢportability Ϥۤ
ɤޤ

  ʸͤʸåȡASCII, EBCDIC ˤˤäưۤʤ롣
  ʸåȤƱǤäƤ⡢single-character character con-
stant ΰϽǤʥѥΤǤ char 
ʤĤˤˡ
  Multi-character character constant ɾϽǤꡢ
ʸåȤΰƱǤ⡢ͤƱȤϸ¤ʤCHAR_BIT 
char ʤȤƤ⡢'ab'  'a' * 256 + 'b' ȤʤΤȤ
'a' + 'b' * 256 ȤʤΤϡꤵƤʤ
  Multi-byte character  encoding ϽǤ롣Wide char-
acter  encoding  multi-byte character  encoding ˽wchar_t 
̵ͭǤ롣
  Multi-byte character  encoding ƱǤäƤ⡢ͤɾ
ƱȤϸ¤ʤƱ꤬롣
  ʾϤ⥳ѥΤǤʸɾˤⶦ̤Ǥ
뤬˥ץץǤʸåȤϥѥΤȰäƤƤ褤
ȤˤʤäƤ롣
  Translation phase 4 ޤǤоݤȤΤϥʸåȤǤꡢphase
6 ʹߤоݤȤΤϼ¹ԻʸåȤǤ롣phase 5 ʸʸ
ƥʸΥʸåȤ¹ԻʸåȤؤѴԤ
ʤʸåȤ⡢multi-byte character encoding ⡢ȼ¹
ȤǰޤäƤ뤫⤷ʤ
  #if ʸɾΤ phase 4 Ǥ뤬ϥʸ
åȤͤǤ¹ԻʸåȤͤ򥷥ߥ졼ȤƤ⡢ɤǤ褤
ˤʤäƤ롣ʸåȤȤƤʤ
  #if ɾʸåȤȼ¹ԻʸåȤƱǤäƤ⡢ɾ
ΤϰäƤƤ褤ȤˤʤäƤ롣ʤΰ⡢
multi-character character constant, multi-byte character constant ɾ
ΥХȥ⡢phase 4  phase 7 ȤǰäƤ뤫⤷ʤ
  ⡢ʸɾηϡphase 7 Ǥ multi-byte character 
ޤ character constant  intwide character constant  wchar_t 
ΤФơphase 4 Ǥ C90 Ǥ long ޤ unsigned long Ǥ롣
ʤphase 4 Ǥ int  long ƱɽĤΤ褦˰졢
unsigned int  unsigned long ƱɽĤΤ褦˰롣
äơʸåȡΰɾΥХȥ phase 4  7 
ǤޤäƱǤäƤ⡢INT_MAX < LONG_MAX νϤǤϡphase 4 ǥ
Сեʤʸ phase 7 ǤϥСե뤳Ȥ⤢ꤦ
뤷phase 7  int ˤʤΤ phase 4 Ǥ long ˤʤ뤫
⤷줺ˤʤ뤫ˤʤ뤫ޤäƤϤʤʸǤʤ
ȡˤʤ뤳ȤϤʤʸˤĤƤϰŪ
ˤϤۤȤͽ¬Ǥʤ
  C99 Ǥ #if ηϤνϤκȤ줿ʤ
ɾηϤˤäưۤʤ뤫⤷ʤ
  ˥ץץǤʤѥˤⶦ̤Ǥ뤬
multi-byte character ˤ encoding ꤬롣Ȥ UTF-8 ϣХ
Ȥ unicode ʸ򣱥ХȤʤХȤ encode 뤬ʸ
Ρ͡פȤϤäǤ ͤ UTF-8 ΣХȤ
sequence ɾ͡פǤȤ⸵ unicode Ρ͡פǤ
ȤȤˤʤΤǤɤͤŪ
ǤΤȽȤʤ
  ⥳ѥȶ̤Ǥ뤬C99, C++98 Ǥ UCN Ȥ
ΤޤƳ줿Ʊʸ UCN ɽΤ multi-byte
character Ȥƽ񤤤ΤȤƱʸפǤƱʸΤ
Ǥ뤬Ρ͡פ multi-byte character  encoding ˤäƤ줾
äƤǤ

  Ȥǡ#if ʸͤϽϴ֤Ǥ portability ʤ
СƱϤΥѥեȤδ֤Ǥ㤦⤷ʤȤ¿
ɤɾ뤫ۤȤͽ¬Ǥޤ
  ̤ˤϣøεˤϤޤʬϾʤ黻˴ؤƤ
ΰǤΤΡ CPU ǷޤΤǤꡢ
ϺԤǤդ˷뤳ȤΤǤʬϤޤʤΤǤʸ
ɾ㳰Ǥ CPU λ͡ʸåȡmulti-byte
character encoding Ȥƥ¦װǷޤ¦̤ΤۤˡϺ
Ԥκ̤ˤޤƤ̤¿ޤ
  줬 #if ʸȤʤȡϤκ̤ϰϤ
ѥեȤΰפݾڤ줺ɾƤ⤤äɾ
ΤۤȤɤ狼ޤʸɾϼ¹ԻĶؤ䤤
碌ɬפȤΤȹͤޤStandard C ΥץץǤϤ
䤤碌ɬפȤϽ줿ˤ⤫餺ʤʸ
ϽޤǤơ䤤碌򤷤ʤǤ⤹൬̵˺
äˡ̣ʤΤȤʤäƤޤäȻפޤ
   #if ʸˤɤʻȤƻΤǤ礦 ѥ
եǤ char ѿͤʸӤ뤳Ȥ褯Ԥޤ
ѿȤʤץץեǤϤλȤƻ⤢ޤ#if ʸ
λȤƻȤƤϡˤŬڤϻפդޤ󡣤̵ѤĹʪ
Ǥꡢ㥹Ȥ sizeof Ʊͤˡ#if оݤ٤Ǥ礦
Ƥ⡢㥹Ȥ sizeof 줿Τ٤С륽ϤϤ
˾ʤϤǤ

        [1.7.6]     ޥδؿͤǤʤ

  ޥƤӽФϤäִꥹȤ֤줿塢줬˺
ޤStandard C κεǤƱΤϡΥޥ
ӽФθΥȡ󤬤ִꥹȤ³Ƥ뤫Τ褦ˡ
ִꥹȤϢ³뤳ȤǤϴؿƤӽФǥȤ
ؿͥޥεθ§ޤäæƤꡢޥŸ狼ˤ
װȤʤäƤޤϡ³ΥȡоݤȤ
ȤεϺоݤִꥹȤ˸ꤹ٤ȹ
Ƥޤ
  ¤ϸ³ΥȡоݤȤΤϡ餯 K&R 1st. Τ
ĹǯΰۤλͤäȻפޤStandard C ǤϤλͤɬ
ʤʤäϤʤΤǤĲΤ褦ĤäƤޤäƤΤǤ
ϥޥŸκˤǤΤǡʲ˾ܺ٤˸Ƥ뤳
ˤޤ

  ޥ rescanʺˤˡʸϤΤ˵ҤΤϡưפʤȤ
Ϥޤ󡣵ʽʸϤ⡢K&R 2nd. ʸϤ狼䤹ΤǤϤ
ޤ󡣤ȤСK&R 2nd. A.12 ˤϡִꥹȤϷ֤
ȤޤʽˤϷ֤ȤϽ񤫤ƤޤRescan ϣ
Ԥ褦ˤɤޤƵŪ˹Ԥ褦ˤɤޤ
Ƥ櫓ǤϤޤ
  ϼȤʤȡΤ뤳ȤǤʤΤǤϤʤȻפ
ޤˡˡʤȡľŪǤ褦ˤϤʤ
Ǥ礦Τ餤ޥ rescanning ȤΤϥޥŸ
Ūʼˡ̩夷ΤʤΤǤ
  ޤΥХƤƤߤޤñˤ뤿ˡ x,
y ϥޥǤϤʤȤޤΥޥƤӽФϤɤŸΤǤ礦


#define FUNC1( a, b)    ((a) + (b))
#define FUNC2( a, b)    FUNC1 OP_LPA a OP_CMA b OP_RPA
#define OP_LPA          (
#define OP_RPA          )
#define OP_CMA          ,

    FUNC2( x, y);

    1:  FUNC2( x, y)
    2:  FUNC1 OP_LPA x OP_CMA y OP_RPA
    3:  FUNC1 ( x , y )

  1:  2: ִ졢2:  rescan ˤä 3: 뤳Ȥϡ
狼ޤǤϡ3: ϥޥƤӽФǤ礦 ʤƬ
⤦ rescan ٤Ǥ礦
  Rescan Ƭ鲿٤Ǥ֤ⷫΤʤΤǤ礦Ȥо
ϰϤƵŪˤ˶Ƥ椯ΤʤΤǤ礦 ¤ϡΤɤ
ǤʤΤǤ
  Rescan ȤΤμºݤŪˤ§ŪʺƵǡ뤤Ϥ
Ʊ̤ˤʤ뤢η֤ǹԤƤȻפޤθŵŪ
㤬 Kernighan & Plauger "Software Tools"ʡ֥եȥˡסˤ
Macro Processing ξϤ˺ܤäƤΤǤϸ M4 ޥץ
ȯŸƤ椯Τǡ켫ΤϣåץץåǤϤޤ󤬡
Ritchie äǽ񤤤ޥץåפΤȽ񤤤Ƥꡢ
ץץåμˡθ򤦤Τ뤳ȤǤޤ
  ΥޥץåǤϡޥƤӽФȤִꥹȤϤ
֤ɤľȤˡ rescanning ¸Ƥޤִꥹ
ˤޤޥƤӽФäϡ֤줬ϤˤäΤ褦ˡפ
οʥޥִꥹȤƱ褦֤ɤľޤ֤ϥ
ִƥȤ륨쥬Ȥˡ󶡤סϤ
¤ߤƵ򡢤Ϥμǽ褦ȤΤǤȤ
褦ˡˡϥޥץåΥץ¤狼䤹
뤿ˡ礤ΩäƤޤ
  åץץå¿⤳Ʊ褦ˡŪϡʤ
ΥåִꥹȤѤǡɤľȤˡǥޥ re-
scan 򤷤ƤΤȻפޤ

  嵭Ǥϡ2:  rescan ˡFUNC1 λǤϥޥƤӽ
ǤʤȤ狼ȡƱˤΥȡ󤬳ꤷʸִϷ֤
ˤƵˤ OP_LPA ʹߤоݤȤʤޤOP_LPA  ( ִơ
줬ޥǤʤȤ狼ȡ x ʹߤоݤȤʤ롢Ȥդ
Ƭ缡ꤷƤ椭3: ǽ̤ȤʤޤϤϤ
ƤӽФǤϤޤ

  "Software Tools" Ρʤ뤤ϤΡˤˡϳΤ re-
scan δʼˡǤ"Software Tools" ϿƤϤޤ󤬡
ˤޤȤ⤢ޤϡϤ֤줿ִꥹȤϥ
Ϣ³ɤ߹ޤ뤿ˡrescan ִꥹȤۤƸΥޥ
ӽФθʬޤǥ󤷤Ƥޤǽ뤳ȤǤͥȤ
ޥǤϡrescan Ƥ뤦ˤĤδ֤ˤͥȥ٥뤬Ƥ
ޤȤ⤢ꤨޤĤޥ̾Ÿʤޥ䡢
ִꥹȤʰĤޥθƤӽФȾʬȤ
ޥλ֤Ҥޤ

#define add( x, y)      ((x) + (y))
#define head            add(

    head a, b)

  줬Ǥδ̯ʥޥƤӽФ ((a) + (b)) Ÿ
ȤStandard C ǤϤ줬ǧΤƤޤޤ
ޤꡢΥޥ undefined ɤˡŪʤΤʤΤǤ

  衢åץץåϤޤ֥ޥŸտޤƤȤ
פޤ󡣤֤󸶽Σåץץåμ嵭Τ褦ʤ
ǤäˡޥۤäƤ餷Ÿ̤Ȥʤꡢ
ռŪѤץޤǸ졢줬¾ɸͤȤʤäƤ
ޤĤ Standard C Ǥ⤳ǧ뤳ȤˤʤäΤǤϤʤǤ礦
ʤΣåץץåμΤʷ٤̯ de
facto standard ͶƳStandard C ˤޤƤΤǤ줬
ĲĲ椨Ǥ

  ơrescan ϺƵ֤Ȥäȡ§ŪʺƵ
ꡢ֤ȸäƤ⤢ʤְ㤤ǤϤʤΤǤ롢ȤȤˤ
뤫ȻפޤƵϺƵǤ̤κƵΤ褦оϰϤ˶
Ƥ椯Ȥϸ¤餺षоϰϤ˸˥Ƥ椯Ȥ
̯äƵʤΤǤϺƵǤʤƤ֤ⷫǼ¸뤳
ǤޤƬη֤ǤϤʤ椫η֤ǡ
˸ʬǤ椯ΤǤ
  äơեΥȤץץǥ쥯ƥ֤
٤ƽ줿ΥƥȤͤȡΥ쥺 rescan ǥƥ
κǽ餫Ǹޤ̤ƽƤޤȤǽǤºݡ"Software
Tools" ǤϤˡȤäƤꡢߤΣåץץåΥˤ
򤷤ƤΤޤʤrescan ȤϥޥŸ
expandˤƱǤꡢϤޤƥΤΥޥŸȤƱʤ
Ǥ

  Rescan оݤ˸˥Ƥ椯Ȥϡ¿
ޤϤɤŸ٤ΤʥޥȤ C89
Rationale 3.8.3.4 (C99 Rationale 6.10.3.4) ˺ܤäƤΤǤ
ꤵʤäΤϡ֥ץץΤ quirksʵޤ졢
ʡˤޤǤꤷƤⲿˤΩʤפȤƤޤ
ϼŪǤϤषꤹ뤳ȤǤʤäΤǤ

#define f(a)    a*g
#define g(a)    f(a)

    f(2)(9)

  Ǥϡޤ f(2)  2*g ִޤָ³ȡפ
rescan оݤȤʤСޥŸϤǤޤǡf(2)(9)  2*g
(9) ȤȡȤʤޤȤָ³ȡפоݤȤ
뤿ˡ g(9) ޥƤӽФƤޤf(9) ִ
ޤǡ f(9) Ϥ 9*g ִ٤ȤƱ̾
κִػߤεŬѤִʤǤ٤ΤǤf(9)
Ȥȡ f(2) κǽִ̤θ g ȡָ³ȡ
פǤ (9) ΤĤʤäΤ rescan ˤä줿ΤǤ
ǡ줬 f(2) θƤӽФΥͥȤˤΤˤΤȽȤ
Ǥ

  ˤĤƤ C90 Corrigendum 1 ԤޤAnnex G.2
Undefined behavior ˼ɲäȤΤǤ

  -- A fully expanded macro replacement list contains a function-like
    macro name as its last preprocessing token (6.8.3).
  -- Ÿ줿ޥִꥹȤκǸ礬ؿޥ
    ̾Ǥ (6.8.3)

  Ϻؤ򤫤ΤǤޤ
  ޤ"fully expanded macro replacement list" Ȥʸ̣Ǥ
ϡְаΥޥŸ줿ִꥹȡפȲ᤹
ޤ󤬡 f(2)(9) ǤϡƱ̾ޥκִ򱾡
ˡf(2)  2*g ִ졢 g  function-like 
̾ǤȤ狼äȤǤǤ undefined Ȥʤޤʤ
 f  g ΥޥǤϡf θƤӽФɬ undefined Ȥʤ
ΤǤ
  ΡפŬѤȡISO/IEC 9899:1990 6.8.3 Examples ˤ뼡
褦ʥޥ㼨⤽ undefined ȤʤäƤޤޤ

#define f(a)    f(x * (a))
#define x       2
#define g       f
#define w       0,1
#define t(a)    a

    t(t(g)(0) + t)(1);      /* f(2 * (0)) + t(1);   */
    g(x+(3,4)-w)            /* f(2 * (2+(3,4)-0,1)) */

  ʽϤΥޥƤӽФϥȤ˽񤤤褦ŸȤ
ޤCorrigendum ŬѤȤϤʤޤ󡣤 f  g Υޥ
Ǥϡg Ȥ identifier ФƤɬ undefined Ȥʤޤg
ִꥹȤǤ function-like ޥ̾Ǥ f ͣǺǸ pp-
token Ǥ顣
    t(t(g)(0) + t)(1)
  Ϥޤ t θƤӽФΰŸޤ
        t(g)(0) + t
  ˤޤ t(g) ȤޥƤӽФΤǡ줬Ÿޤ
ΤˤϤޤŸʤФʤޤ
            g
  Ƥ줬 f ִȡ undefined ȤʤΤǤ
  ⤷򤳤Τޤޤˤơִ³Ƥ⡢
        t(f)
        f
Ȥʤꡢt(f) Ÿ̤κǸ pp-token  f ǤΤǡƤ undefined
Ǥִ³ȡʤޤ
        f(0) + t
            f(x * (0))
            f(2 * (0))
        f(2 * (0)) + t
    t(f(2 * (0)) + t)
    f(2 * (0)) + t
  ǽ t θƤӽФŸޤִꥹȤκ
夬Ϥ t Ȥ function-like ޥ̾ǤΤǡ
undefined Ȥʤޤ

  ǤϡϤɤǤ礦
    g(x+(3,4)-w)
   g  f ִ줿ȤǤǤ undefined Ǥ
  Examples  G.2 Ȥ̷⤹Ȥ˴٤äƤޤäƤޤ
  ⤷ Examples Τ㤬ä줿ȤƤ⡢ Corrigendum 
ǤϷ褷ƺϲäޤˡG.2 ϵʸǤϤʤ
äʸ˺ʤΤǤʸǤϡָ³ȡפ
rescan оݤȤȤ񤤤ƤʤΤǤˡ⤷ Corrigendum
ʸ˼ȤƤ⡢
    #define head            add(
 add ִꥹȤκǸǤϤʤΤ
    #define head            add
 undefined ȤΤǤϡޤˤ⥢Х󥹤Ǥ"fully expanded"
Ȥʸ̣ǤȤ⤢ޤ*1, *2

  줬ָ³ȡפ rescan оݤȤȤˤä
⤿餵줿 quirks Ǥ뤳ȤϡޤǤ⤢ޤ󡣤ĤĤޤ碌
褦ȤФۤɡ𤷤ƤޤΤǤʽˤƱ̾ޥִ
ߤε꤬ʸϤǽ񤫤Ƥޤ򤵤ΰ⤳
ޤ

  ¾ Standard C  function-like ޥθƤӽФ˺ݤƤϡ
ΥޥŸϤΰǹԤȵꤷƤޤΥޥ
ŸθΥƥȤޤǿäƤޤäΤǤ纮Ǥ顢ε
ȸǤ
  η̡ƱޥǤˤȤǤʤȤǰä
̤ˤʤȤХ󥹤ȯޤ

#define add( x, y)      ((x) + (y))
#define head            add(
#define quirk1( w, x, y)    w x, y)
#define quirk2( x, y)       head x, y)

    head a, b);
    quirk1( head, a, b);
    quirk2( a, b);

   quirk1() θƤӽФǤϡ裱Ǥ head  add( ִ줿
塢 rescan Ǵ뤷ʤޥƤӽФȤ violation of constraint
ʿХ顼ȤʤϤǤquirk2()  head a, b) 
顼ˤʤ餺

    ((a) + (b))

Ÿ뤳Ȥˤʤޤ
  Ĥ褦ǤХȤϤ٤ơ̤˥ޥ re-
scan ǡָ³ΥȡפޤǤоݤȤʤäƤޤȤȯƤ
ΤǤϡŸ¾ΥƥʬΩƹԤ뤿
ϡȤִꥹȤϤ֤ˡǤäƤ⡢ɤΥͥȥ٥Ǥ
뤫ȤղäɬפޤȤа̤ˤָ³Υȡ
פ rescan оݤ˼ޤʤ褦ˤ뤳Ȥưפ˼¸Ǥ
ǤषߤȾüʵǤϡȤǤʤȤǽ
Ѥɬפꡢˤ;פô򤫤̤ˤʤäƤޤ

  äΥޥŸŪ˥ǥͤʸִκפȤɤƤޤ
ǥͤʸִü˹ⵡǽʣΤ pre-Standard Υ
ŸȸǤ礦
  Ф Standard C ǤϡĤޥˤ虜虜 function-like
ޥȤ̾ޤդơθƤӽФιʸؿƤӽФ˶դ褦
ȤȹͤޤΥޥϴŸƤѥ᡼֤
Ȥ⡢ŸϰǹԤȤ⡢θ
§˹äΤǤȤ̤˥ޥ rescan ϸ³Υȡ
Ȥ꤬θ§֥亮Ƥޤƥִη
ȤĤΰʪǤ
  ³Υȡ rescan оݤƤޤСޥŸϴ
˺ƵŪˡʤоϰϤˤˤƵΤӤ˶Ƥ椯
褦ˡʾʤȤ⹭뤳ȤϤʤ褦ˡ˵ꤹ뤳ȤǤΤǤ
ơfunction-like ޥϤ̾ˤդ路ޥȤơʤ
ˤʤäȤǤ礦ƤϺȤϤäˤȤ
פʤΤǡʤʤäΤñ ANSI C Ѱ񤬡Ĥ
ĲڤȤǤĤʤäȤͤޤ*3
  C99 ǤϤ򥹥åѥڤȤƤ餤äΤǤޤ䤳
ĲĤäƤޤޤ

  *1  ԤΤ褦 function-like ޥ̾Ÿ object-like 
    ȤΤϡºݤΥץǤܤˤΤǤ롣Τ褦
    ʤΤǤ롣
        #define add( x, y)      ((x) + (y))
        #define sub( x, y)      ((x) - (y))
        #define OP  add
            OP( x, y);
    ԤΤ褦 function-like ޥθƤӽФȾʬŸ
    ΤۤŪʤΤǤϤʤʤФʤʤͳϲ
    ʤFunction-like ޥΥͥȤϼΤ褦 function-like ޥ
    ǤΤɤ
        #define OP( x, y)       add( x, y)
  *2   Corrigendum ˤФƤͳϡC90 ISO C Ѱ
    SC 22 / WG 14ˤ "Record of Responses to Defect Reports" Ȥʸ
    Ǥ狼#017 / Question 19ˡANSI C Rationale 3.8.3.4  f(2)(9)
    ΥޥŸ˴ؤǾ֤줿ΤǤ롣ľܤ
    ϡƱ̾ޥִػߡפεŬϰϤäϤǤ뤬
    ѰƱ̾ޥ˸¤ʤŪȤƲƤޤäΤǤ
    롣β᤬ Examples Ȥδ̷֤ȯ뤳Ȥˤϵ
    ʤä褦Ǥ롣
    ˡ "fully expanded" Ȥʸ̯Ǥ롣f(2)  2*g 
    ִ졢g ޤǺ줿 fully expanded ʤΤǤ
    ⤷ʤ顢ʾִϵʤ顢undefined ˤʤʤ
    ϤǤ롣⤷ޤ fully expanded Ǥʤʤ顢g ³ (9) Ȥ
    ˺졢f(9) ִ롣⤷줬 fully expanded Ǥ
    ʤ顢2*f(9) κǸ pp-token  function-like ޥ̾ǤϤʤ
    顢βϤƤϤޤʤʤޥŸϤĽΤ
    ȤʤäƤȤǡ֥ޥŸäפȸäƤ
    Ǥ롣ơޥŸϤĽΤޤޤ狼ʤʤ
    ƤޤäΤǤ롣
    C99 1997/11 draft Ǥ Corrigendum Τιܤ Annex K.2 Undefined
    behavior ˼ޤƤ1998/08 draft ǤϺơؤ
     Annex J.1 Unspecified behavior ˼Τ褦ʰ᤬ɲä줿
    ơɤ줬 C99 ˺Ѥ줿

        When a fully expanded macro replacement list contains a function-
        like macro name as its last preprocessing token and the next
        preprocessing token from the source file is a (, and the fully
        expanded replacement of that macro ends with the name of the
        first macro and the next preprocessing token from the source
        file is again a (, whether that is considered a nested
        replacement.

    ѰϤ褦䤯 Corrigendum ̷˵Ť褦Ǥ롣
    ʸκŪϤΤޤޤǤ롣ޤޥŸĽ
    ⡢ɤ unspecified Ǥ롣⡢'(' ˤ뤫ɤ
    Ƕ̤ȤΤǤϡƱޥˤ¾Υޥ
    ִꥹˤȤǷ̤äƤȤȤǤꡢӤʤ
    ͤǤ롣
    ˤĤƤϡ[2.4.26] ⻲ȤΤȡ
    ʤC++ Standard ǤϥޥŸ˴ؤ뵬 C90 ƱǤꡢ
    C90  Corrigendum 1 Τ C99  Annex J.1 ɲä줿
    ʤ
  *3  Ƥ⡢ FUNC2( x, y) Ϥ⤷줬¾ΥޥƤӽФΰ
    ˤäϡŸ FUNC1 ( x, y) Ȥʤꡢ˸Υ
     rescan  ((x) + (y)) Ÿ뤳Ȥˤʤ롣ʤ
    ˤȤǤʤȤǺǽŪŸ̤ۤʤ롣
    Ϥޤ̤μǤꡢԹǤϤʤǤ

        [1.7.7]       C90 Corrigendum 1, 2, Amendment 1 Ǥɲ

  ISO/IEC 9899:1990 ˤĤƤϡ1994  Corrigendum 1ˤ
1995  Amendment 1ˤФ졢 1996  Corrigendum 2 Ф
ޤ

  Corrigendum 1 ΤۤϤʸۤȤɤǤĤץ
ץ˱ƶͿΤޤޤƤޤΣĤ [1.7.6] Υ
κ˴ؤΤǤ

  ⤦ĤϥޥΥޥ̾ $ ޤޤƤˤĤƤΡ
üʵǤ
  Standard C Ǥ identifier ʸȤ $ ǧƤޤ󤬡
ǧͭϤʽϤŪ¸ߤƤޤtest-t/e_18_4.t ˤ 18.9
ϡStandard C Ǥ $ ʸǣĤ pp-token ȲᤵΤǡ
̾ THIS  $ ʹߤ object-like ޥִꥹȤȤʤꡢTHIS$AND
$THAT Ȥ̾ function-like ޥȤץΰտޤȤϤޤä
ä̤ˤʤޤ
  Corrigendum 1 Ǥϡ˴ؤ㳰Ū꤬ɲäޤ
object-like ޥִꥹȤ non-basic character ǻϤޤ
ϡޥִ̾ꥹȤȤ white-space ʬΥƤʤФʤ
פȤΤǤ 18.9 ФƤ Standard C Ͽǥå
ФʤФʤʤΤǤˤäơ$  @ ޥ̾˻Ȥ
Ƥ륽ۤäưտޤʤ̤˥ץץ֤ɤȤ
櫓Ǥ쿴εǤ㳰ΤϺäΤǤ$ 
@  identifier ǧʤϤǤϡޥϤȤץץ
ǥ顼ȤʤʤƤ⡢ѥեɬ顼ˤʤϤʤΤǡ
㳰ɬפϤʤȻפޤ*1

  ΤۤISO 9899:1990 Ǥ header-name Ȥ pp-token  #include
directive ˤƤϤʤʤȤ̣ constraint ޤ
Corrigendum 1 ǡheader-name  #include directive Ǥǧ
ޤ*2

  Amendment 1  multi-byte character, wide character Ӥʸ
饤֥ؿɲä濴ǡȼä <wchar.h>,
<wctype.h> ȤɸإåɲäޤޤISO 646 ʸå
˴ޤޤʤʸ䤽Ȥä token, pp-token ɽˡȤơ
trigraph ¤֤⤦ĤȤ <iso646.h> Ȥɸإå
digraph ε꤬ɲäޤ<iso646.h> ϤĤ operator ޥ
뤴ñʥإåǡäϤޤ*3
   digraph Ǥ trigraph Ȥ褯ƤơӤϤۤȤƱ
ʤΤǤץץǤΰ֤ŤϤޤääƤޤTrigraph
 character Ǥꡢtranslation phase 1 ̾ character Ѵ
ΤФơdigraph  token, pp-token ʤΤǤDigraph sequence  #
黻Ҥˤäʸ󲽤ϡѴˤΤޤʸ󲽤ʤ
ʤޤʤ # ΤΤ digraph Ǥ %: Ƚ񤯤ΤǤ뤬ˡΤ
ᡢƤΤˡϤϾʤȤ phase 4 ޤǤϤ
 pp-token ȤݤäƤɬפޤѴȤСθ
ʸƥ digraph ǤϤʤtoken ȤƻĤä digraph
sequence Ѵˡ
  ϽϤ̵Ѥô򤫤ΤǤTrigraph Ʊͤ character
Ȥǧphase 1 ѴƤޤۤˤʤޤ
 pp-token Ȥݤϲ⤢ޤAmendment ⡢digraph ̾
 token Ȥΰ㤤ʸ󲽤ˤȯʤƤޤ
Phase 1 Ѵ褦ˤ "%:" Ȥäʸƥ񤯤Τ˺
Ȥ뤫⤷ޤ󤬡 trigraph ǤƱͤǤꡢ
ˤϤޤˤüǤɤƤ񤭤 "%" ":" Ȥ
ФߤޤDigraph  trigraph  alternative Ȥ phase 1 Ѵ
褦˰֤Ťʤ٤Ǥ礦

  Corrigendum 2 ˤϥץץ˴ؤ뽤Ϥޤ

  *1  C99, C++ Standard ǤϤεϾäƤ롣
    C99 ǤϤΤˡ6.10.3 Macro replacement / Constraints ˼
    ̲꤬դä줿
            There shall be white-space between the identifier and the
            replacement list in the definition of an object-like macro.
     tokenization 㳰ǤΤǡʤ
  *2  Corrigendum 1 ˤ롣
        Subclause 6.1.7
        Replace the paragraph in "Semantics" with:
            A header name preprocessing token is recognized only within
            a #include preprocessing directive.
    Ϥɤ paragraph ؤΤǤ롣Constraints 
    ơ paragraph  Semantics ɲäȽ񤯤٤ȤǤ롣
    C99 ǤϼºݤˤʤäƤ롣
  *3  C++ Standard Ǥϡ identifier  operator ϥޥǤϤ
     token Ǥ롣ʤΤ򤷤ʥץץ٤
    Ȥϸ餹ȤȯۤˡȤˤϤˤȤäƤϤä
    ȤǤ롣

        [1.7.8]     Ĺʵ

  ANSI C 2.1.1.2 (C90 5.1.1.2, C99 5.1.1.2) Translation phasesե
ˤ 3 ˤϡ³ϤʤΤξĹʵ꤬ޤ

    A source file shall not end in a partial preprocessing token or
    comment.

  Translation phase 2 ǡե <newline> ̵Ǥޤ
<backslash> <newline> ǽäƤϤʤʤȤΤǡphase 2 ̤ä
եɬ <backslash> Τʤ <newline> ǽޤPartial
preprocessing token ǽ뤳ȤϷ褷ƤޤPartial
preprocessing token षΤȤƤϡ "  '  <, > 
ΤȤƤʤΤޤ ANSI C 3.1 (C90 6.1) Lexical
Elementsʻǡ/ Semanticsʰ̣§ˤ undefined ȤƤ
Ǥꡢޤ˸¤äǤϤޤ"partial
preprocessing token or" פʸǤ

  ANSI C 3.8.1 (C90 6.8.1, C99 6.10.1) Conditional inclusionʾդ
ߡ/ Constraintsˤˤϸ򾷤ɽޤ

    it shall not contain a cast; identifiers (including those lexically
    identical to keywords) are interpreted as described below;

   "it shall not contain a cast; " ϼ­Ǥ³ʬ
Semanticsʰ̣§ˤǡkeyword Ʊ identifier ޤह٤Ƥ
identifier ϥޥǤŸ졢Ĥä identifier  0 ɾ
Ȥ餫ˤƤޤCast 򤽤󤷤̤˼夲ɬפϤ
ޤ(type) ȤʸǤ type ñʤ identifier Ȥư
Ȥ餫Ǥ
  դˡ줬 constraint ˤȡϤ cast ιʸǧơ
ФǥåФʤФʤʤȤ⡢ᤵޤϵ
ʽΰտޤǤϤʤǤ礦Translation phase 4 Ǥ keyword ¸ߤ
Τǡcast ǧΤ褦ʤΤǤsizeof ⤳ǤƱǤ
 sizeof ˸ڤcast 夲ƤΤ̯ʤȤǤ
  ʸּ­פȸޤ

    [1.8]       C99 Υץץ

  C99 Ǥϡץץ˴ؤƤϼλͤɲäƤޤ

  1.  ̻ҡʸƥ롢ʸpp-number  \uxxxx,
\Uxxxxxxxx η 16  sequence  UCN (universal-character-name) ȸ
Unicode ʸ̣ͤ롣 basic source character set ˴
ޤʤ extended character ꤹΤǤʤФʤʤ# 黻Ҥ
ä UCN ʸ󲽤줿 \ Ťͤ뤫ɤ implementation-
defined Ȥ롣
  2.  ̻ implementation-defined ʸȤȤǤ롣
äơΤ褦 multi-byte-characters ̻˻Ȥ imple-
mentation ǽȤʤä
  3.  // ޤǤ򥳥ȤȤư
  4.  Pp-number  e+, E+, e-, E- Ʊͤ p+, P+, p-, P- Ȥ
sequence ǧ롣 0x1.FFFFFEp+128 ȤդˡưΥ
åȥѥ򣱣ʤɽ뤿ΤΤǤ롣
  5.  #if ηϤνϤκȤ롣long long / unsigned
long long ɬܤǤΤǡ#if η long long ޤϤʾΥ
Ȥʤ롣
  6.  ѸĤΥޥȤ롣
  7.  ޥƤӽФΥͭʰȤ롣
  8.  ޥ __STDC_HOSTED__ ɲä롣 hosted
implementation Ǥ 1 ˡǤʤ 0 롣
 __STDC_VERSION__  199901L 롣
  9.  ޥ __STDC_ISO_10646__, __STDC_IEC_559__,
__STDC_IEC_559_COMPLEX__ 򥪥ץȤɲä롣
  10.  _Pragma operator ߤ롣
  11.  #pragma STDC ǻϤޤǥ쥯ƥ̾򵬳ʤȽѤͽ󤷡
ư黻ɽĤ #pragma STDC ǥ쥯ƥ֤ɲä롣#
pragma STDC ǻϤޤǥ쥯ƥ֤ϥޥŸоݤȤʤǤ
 #pragma ԤϥޥŸоݤȤ뤫ɤ implementation-defined
Ǥ롣
  12.  Wide-character-string-literal  character-string-literal Ȥ
ܤƤΤ C90 Ǥ undefined Ǥä Wide-character-
string-literal ȤϢ뤹롣
  13.  #line ΰȤƻȤֹϰϤ [1,2147483647] ˳礹롣
  14.  Translation limits 򼡤Τ褦˰夲롣
    ԤĹ            :   4095 Х
    ʸƥ롢ʸheader name Ĺ    :   4095 Х
     identifier Ĺ          :   63 ʸ
    #include Υͥ               :   15 ٥
    #if, #ifdef, #ifndef Υͥ   :   63 ٥
    ΥåΥͥ              :   63 ٥
    ޥΥѥ᡼ο          :   127 
    Ǥޥο            :   4095 
  15.  Header name ϣʸ + . + ʸޤǤݾڤƤ
ʸ + . + ʸޤǤѹ롣

  ѰޥȤΤϡΤ褦ʤΤǤ

    #define debug(...)  fprintf(stderr, __VA_ARGS__)

Ȥޥȡ

    debug( "X = %d\n", x);

ȤޥƤӽФϼΤ褦Ÿޤ

    fprintf(stderr, "X = %d\n", x);

  ʤѥ᡼ꥹ ... İʾΥѥ᡼̣
ִꥹ __VA_ARGS__ бޤơޥƤӽФ
ˤ ... бʣäƤ⡢ , ޤϢ뤷Τ
ĤΰΤ褦˰ޤ

  C90  undefined behavior ȤƤΤˤϡʬ̣Τ
βǽʤΤޤޥƤӽФΥʤɤǡ 0
Ĥ pp-token Ȳ᤹뤳ȤͭѤʾ礬ޤC99 Ǥϡ줬ͭ
ʰȤޤ

  _Pragma( "foo bar") Ƚ񤯤 #pragma foo bar Ѵ _Pragma Ȥ
ĥ黻Ҥ C99 Ǽ夲Ƥޤ#pragma Ԥΰ C90 Ǥϥ
Ÿ줺ޥŸη̤Ȥ #pragma ǥ쥯ƥ
ιԤϥǥ쥯ƥ֤Ȥư줺ޥִꥹ #pragma
񤯤ȤǤʤΤФơ_Pragma ϥޥִꥹ˽񤯤
ȤǤη̤Ȥ #pragma ϥǥ쥯ƥ֤ȤưȤ
ĥܤȤǡˤ #pragma  portability 夵褦Ȥ
ΤǤ
  §Ūʳĥ򤷤ʤƤ⡢#pragma ԤΰϥޥŸоݤ
ȤѹäۤǤꡢ portability ΰտޤ
ʤãǤϤǤξϥޥ #pragma 񤯤Ȥ
ǤʤȤ󤬻ĤꡢޥŸƤϤʤ #pragma ΰϥ
֤̾ڤΥ __ ǻϤޤ̾ѹʤФʤʤȤ
꤬ФƤޤ_Pragma() operator §ŪǤϤΤΡ
ݤȤۤɤǤʤʻͤȻפޤ

  Unicode Ƴˤ꤬ꤹޤޤϤ multi-byte
character  Unicode ȤѴΤ˵ɽѰդʤФʤ餺
 overhead ޤ16 ӥåȰʲΥƥǤϻ¾塢Բǽ
ǤUnicode ޤääƤʤƥ¿¸ߤޤޤ
Unicode  multi-byte character ȤǤϰа mapping Ǥʤ礬¿
ޤץιݲȤ̾ܤ Unicode øɸ
ϰ̤֤ΤϡȻפޤ
  C99 Ǥ 1997/11 draft  C++ Standard ٤ UCN ΰ˸
ץץåôŪʤޤΤᡢMCPP Ǥ
μǽˤʤޤ*1
  ѥΤôϰ礭Τޤޤ
ΤʤɽǤΤǡtrigraph ƱͤˡޤȤʤǽ뤳Ȥ
ͽۤޤ*2

  ʤMCPP Ǥϡ-S1 -V199901L Ȥץ C99 λͤˤʤޤ
__STDC_ISO_10646__, __STDC_IEC_559__, __STDC_IEC_559_COMPLEX__ ϻ
ޤ󡣤ϽϤΥإåե뤳Ȥˤʤ
Ǥ

  *1  1997/11 draft Ǥ C++ Standard ȤۤƱͤˡtranslation phase 1
     basic source character set ˴ޤޤʤ extended character Ϥ
     UCN Ѵphase 5  execution character set ʸ˺Ѵ
    뤳ȤˤʤäƤ
    ⤷ϡץץȸˤѴ򤹤
    ƤӽФȤȤˤʤȻפ롣Ѵ OS ˰¸
    ΤʤΤǡ̤ΥġˤۤŪǤ롣
  *2  C99 Rationale 5.2.1 Character sets ˤȡλͤϽ°
    Υġ multi-byte character ΥȤδ֤ߤѴƻȤ
    ȤꤷΤȤƤ롣Multi-byte character ʸƥ
    ʬڤΥ̥եˤޤȤƤƽȤȤǤ
    ɤޤǼѤˤʤΤǤ

    [1.9]       ʥץץ

  ʾ˽Ҥ٤Ƥ Standard C ץץȻ䤬ͤΤϡ
Τޤ޾ Standard C ؤ˾Ǥ⤢ޤޤȤȡΤ褦ʤ
Ȥˤʤޤ

  <stdio.h> η header-name  obsolescent featureѻͽ굡
ǽˤȤ롣Ǥ header-name ʸƥΤΤˤ롣
  Token-based ʥץץθ§Ӥ# 黻Ҥϰ token
separator ̵ͭ˺ʤ褦ˡtoken separator ʤƤ pp-
token ֤ˤϤ٤ single space ʸ󲽤뤳Ȥˤ롣
  Ʊͤˡޥκ˺ݤƤϡִꥹ token separator
̵ͭΰ㤤ˤʤȤˤ롣
  ޥκ˺ݤƥѥ᡼̾ΰ㤤å뤳Ȥϡ
ϤΥСإåɤ䤹ǤۤȤͭʤΤǡΰ㤤
ˤʤȤˤ롣
  ʸɾϼ¹ԻĶؤ䤤碌ɬפȤΤǤ
ꡢ#if ǤͭۤȤɤʤΤǡ #if оݤ롣
  ؿͥޥδؿͤΰŰ줷ޥƤӽФˤä
ִꥹˤäƤ⸶§ȤƱ pp-token sequence 
ˡޥ rescanning ִꥹȤоݤȤޥƤӽФ³
 pp-token sequence оݤȤʤȤˤ롣
  Digraph  token ǤϤʤtrigraph Ʊͤ character 
spelling Ȥtranslation phase 1 Ѵ뤳Ȥˤ롣
  Translation phase 3 εΤ"partial preprocessing token or"
Ϻ롣
  #if ˴ؤ "it shall not contain a cast; " Ȥܤ con-
straint footnote 83 C99 Ǥ footnote 140ˤ˵ۼ롣
  Trigraphs ϥ衼åΦǤϼºݤ˻ȤƤΤǤ
⤷ʤȤƤΤǤлĤʤǤʤѻߤ

  Ϥ⡢Ե§ʵ§ץץñˤ
褦ȤΤǤˤäƥץץ狼䤹ʤ뤳Ȥϴְ
ʤǤ礦դ˺뤳ȤϤۤȤɤʤϤǤ
  MCPP ǤϡSTANDARD Ȥ⡼ɤǤ Standard C εʤȤ
ޤ Standard C Υץץ˼ƤĤǤ
POST_STANDARD Ȥ⡼ɤǤϰʾѹäץץ¸Ƥ
ޤʤΤۤUCN, identifier  multi-byte characters λѤ
Ƥˡ
  C90  Amendment 1, Corrigendum 1 ǤϡץץˤĤƤԵ§
§Ե§䤹ưƤޤޤ
  C99 Ǥ⡢ǽɲä줿Фǡ嵭Τ褦κ
ɤʤäΤϻǰǤ*1

  C99 ɲä줿ͤˤĤƤϡΣ׵ᤷȻפޤ

  Unicode (UCN) ƳϥץˤȤɤ롣
  long long ϤꥪץȤƤƳˤȤɤ롣

  ʤ嵭Τۤˡ#if ŬѤα黻§ˤĤ
⣲꤬ޤ

  α黻̤ϤηɽǤϰϤˤʤФʤʤȤ
constraint 뤬Ϥ٤ƤŬѤΤʤΤɤ
Ǥ롣㳰ϵܤƤʤȤߤȡʸξǤϤ٤Ƥ
ŬѤȲ᤹뤷ʤStandard C ΰտޤϡɬפʤ
ǤϡפȤȤǤΤˤ٤Ǥ롣ޤ¾ǡʤ
Ϸ褷 overflow ʤפȤ⤢ꡢʤ黻ϰ
Ķ˿ǥåФ٤ɤϡȤˤޤǤ
ϥѥɾǤΤǤΤǡǥåФΤŬ
Ȼפˡ
  /, %  operand ޤǤη̤ implemen-
tation-defined ȤʤäƤ뤬ϤޤˤҤɤǤ롣C89
Rationale ɤȵäȤϤ狼뤬ɡ⵬ꤷʤ̤
ʤäƤ롣div(), ldiv() Ʊˤ٤Ǥ*2

  ϥץץͭǤϤʤΤǡʾޤ


  *1  C99 ؤγƼ defect report 䤽Ф response 
    corrigendum  draft ϼ ftp site ˤ롣 ISO/SC22/WG14 
    official ftp server ȤʤäƤꡢʤȤ⺣ΤȤ anonymous
    ftp ǤSC ȤΤ steering committee άǡWG  working
    group Ǥ롣SC22 ȤΤϥץεʤ򿳵ĤȤǡ
    WG14  C εʤôƤˡ
        http://osiris.dkuug.dk/JTC1/SC22/WG14/
  *2   C99 Ǥ div(), ldiv() Ʊˤʤä


            ֣ ӣ ⡡

    [2.1]       Validation Suite for Conformance of Preprocessing

  test-t, test-c, test-l, tool, cpp-test Ȥǥ쥯ȥäƤ
ΡӤ cpp-test.txt ΤΤκä "Validation Suite
for Standard C Conformance of Preprocessing" ʡ֥ץץɸŬ
ѥȥ켰סˤǤǤդνϤΥץץ
Standard C (ANSI/ISO/JIS C) ٤ܺ٤˥ƥȤΤǤStandard C
ǵꤵƤ뤹٤ƤΥץץͤ夷ƤĤǤˡ
곰λ˴ؤ뤪ޤ⤿󤢤ޤ

  test-t Ȥǥ쥯ȥˤ 189 ܤΥץƥȤäƤޤ
Τ 30 ܤϥإåե롢151 ܤϺڤΥץƥȤǡ8 
ϺڤΥץƥȤޤȤ᤿եǤإåեʳϰ
 *.cc Ȥ̾ǤȤϤ٤ *.t Ȥ̾ĤƤޤ
ϥѥեȤϴطʤץץեƥȤ
ΤǤäơɬäץηˤϤʤäƤޤ
󡣥ץץƥѤΥץƥȤȸ٤ΤǤ
  Standard C νϤϥץץȥѥȤ򰵽̤ƽ뤳
ǤΤǡϤˤäƤϥץץڤΥƥƥȤ뤳
Ǥޤ󡣤 *.t Υץ뤽ΤΤ Standard C ˽äƤʤ
ޤץץڤΥƥƥȤǤϤ¿
ꡢǤʤڤΥƥƥȤۤͤΤˤʤޤ
 *.t ΥץϤΤΤΤǤ
  C++ ΥץϡϤˤäƤ *.c, *.t Ȥ̾Ǥ C++ Υ
ȤưʤΤ⤢Τǡ*.cc Ȥ̾ΤΤѰդƤޤ
  ץƥȤΥեˤ̾ n_ ǻϤޤΡnormal ΰաˡ
i_ ǻϤޤΡimplementation-dependent ΰաˡe_ ǻϤޤ
erroneous ΰաˤޤ
  n_ ǻϤޤΤϡץץ˴ؤƤϴְ㤤 undefined ư
Τ implementation-defined ʬޤޤʤץǤ
Standard C Υץץåϡ򥨥顼ˤǤ
Фʤޤ
  i_ ǻϤޤΤϡʸåȤ˴ؤ implementation-defined ʻͤ
¸륵ץǡASCII ʸåȤȤơmulti-byte
character, wide character Ȥƿ encoding ĤΤѰդƤ
ʸåȤ Standard C νϤΥץץåϡ
򥨥顼ˤǤʤФʤޤ󡣤ǤС¿
encoding 뤳Ȥ˾ޤޤ
  e_ ǻϤޤΤϡ餫 violation of syntax rule or constraint
ʤ顼ޤॵץǤStandard C Υץץåϡ
ƨȤʤǤǤʤФʤޤ
  n_, i_, e_ θ˿³Τ C90 Υץץ,  C90 
C99 ζ̤ΥץץͤƥȤ륵ץǤإåեΤ
pagmas.h, ifdef15.h, ifdef31.h, ifdef63.h, long4095.h  nest9.h
 nest15.h ޤǤ C99 ΥץץͤƥȤ륵ץǡ¾
إåե C90  C99 ζ̤ΤΤǤ
  n_, i_, e_, u_  std, post ʳΥե٥åȤ³Τ C99 
 C++ ΥץǤn_dslcom.t, n_ucn1.t, e_ucn.t, u_concat.t  C99
 C++98 ζ̤Ρn_bool.t, n_cnvucn.t, n_cplus.t, e_operat.t, u_cplus.
t  C++ Ρ¾ C99 ΥץץͤƥȤ륵ץǤ
  ?_std.t Ȥ̾Υե C90 κڤեޤȤ᤿ΤǤ
?_std99.t Ϥ C99 ǤǤ?_post.t, ?_post99.t Ȥ̾Υե
ޥǡMCPP  POST_STANDARD ⡼ɤΥƥȤΤΤΤǤ
  u_*.t Ȥ̾Υեϥޥǡundefined behavior ΥƥȤ
ڤΥեǤundefs.t ϤܤˤޤȤ᤿ΤǤunbal?.
h ϤǻȤإåեǤunspcs.t  unspecified behavior
ΥƥȤ򤹤Τǡwarns.t ϰʾΤɤˤƤϤޤʤϤ
˥󥰤ФΤ˾ޤƥȤ򵭺ܤեǤunspcs.t,
warns.t ⥪ޥǤ
  misc.t ϥޥΥޥǡʽ䤽¾νҤ˺ܤäƤΡ
ɽˤäƷ̤ۤʤƥȡtranslation phase 5, 6 ˴
ƥȡĥǽŤͤΥƥȡ򽸤᤿ΤǤ

  test-c Ȥǥ쥯ȥˤ 132 ܤΥե뤬äƤꡢΤ
26 ܤϥإåե24 ܤ test-t ΤΤƱˡ102 ܤϺڤΥ
ץ륽ǡ2 ܤϺڤΥץ륽ޤȤ᤿ե롢¾ 2
ܤϼưƥȤ˻ȤեǤΤ 31 ܤϥޥΥץ륽
ǤإåեʳΥϤ٤ *.c Ȥ̾ĤƤ
ϣäΥץηˤʤäƤޤ
  Ϥꡢn_, i_, e_ ǻϤޤ̾ĤƤޤn_ ǻϤޤΤϡ
Standard C Ǹ strictly conforming program ʴְ㤤ϰ¸ʬ
ʤץˤǤϤϤ򥨥顼ˤѥ
¹ԤǤʤФʤޤ¹ԤǤϤ줾

    started
    success

ȤåФޤn_std.c ˸¤äƤϡΥåϽФ

    <End of "n_std.c">

ȤäλΥåФޤǤʤϲ餫μԤΥ
Фޤi_ ǻϤޤΤˤ ASCII Ȥơ multi-
byte character encoding бΤޤʸåȤ
ĽϤϡ n_ ǻϤޤΤƱͤѥ뤷¹
ǤʤФʤޤe_ ǻϤޤΤˤĤƤϡϤϥѥ
ʥץץ˻ǤǤʤФʤޤ
  ѥ뤢뤤ϼ¹ԤˤƥȤϺǤΥƥˡǤ
ˡǤϽϤ˴ְ㤤뤳ȤϤ狼äƤ⡢ɤ˴ְ㤤Τ
ˤʤʤ礬ޤ *.c եץץåˤ
ơη̤ܤǸƥƥȤ뤳ȤǤΤǡϤ¤ꤽ
ۤΤɾǤޤ*.t եΤۤüŪǤˡ
  ?_std.c Ȥ̾ΥեϺڤեޤȤ᤿ΤǤ
  u_*.c Ȥ̾Υեϥޥǡundefined behavior ΥƥȤ
ڤΥեǤundefs.c ϤܤˤޤȤ᤿ΤǤ
unspcs.c  unspecified behavior ΥƥȤ򤹤Τǡwarns.c ϰʾ
ɤˤƤϤޤʤϤ˥󥰤ФΤ˾ޤƥȤ
ܤեǤunspcs.c, warns.c ⥪ޥǤ
  test-c ǥ쥯ȥˤ C99 ΥƥȤϴޤޤƤޤ󡣤ޤC99 
Ƥ륳ѥΤʤǤC++ ΥƥȤ test-t 
쥯ȥˤޤ

  test-l ǥ쥯ȥäƤΤϡ translation limits
ΥƥȤ򤹤뤿ΥץǤ144 ܤΤ٤ƤޥǤ*.c, *.t,
*.h ե뤬äƤޤ

  *.h ե test-t, test-c, test-l γƥǥ쥯ȥ˽ʣƴޤޤ
ƤΤʤꤢޤʣإåեĤΥǥ쥯ȥ
ޤȤȡ㤨

    #include "../test-t/nest1.h"

Ȥä󥯥롼ɤΤɬפˤʤޤѥꥹȤη
եõˡʴǥ쥯ȥɤ֤ˤ٤
implementation-defined ǤꡢߴݾڤƤʤΤǡ
򤱤뤿˽ʣ򤤤Ȥ鷺ƥǥ쥯ȥ˥إåե֤Ƥޤ
ʤ⤽֥ǥ쥯ȥפȤǰ C Standard ϽƤ
ˡ

  tool Ȥǥ쥯ȥˤϡưƥԤΤɬפʥġ뤬
Ƥޤ

  cpp-test Ȥǥ쥯ȥˤΤϡGNU C / testsuite ǻȤ
ץǤtest-t, test-l ǥ쥯ȥΤΤ testsuite Ѥ˽ľ
Ǥ֤Ƥޤ

  Standard C ׷ȤƤϡϤư뤳ȤϤ
ǤʤɥȤɬפʻबΤ˵ܤƤ뤳
ɬפǤˤĤƤ [2.5] ޤ

    [2.2]       ƥˡ

  Validation Suite ǥƥȤˤϡϤ Standard C ˶դ뤿
Υץ󤬤ϡ򤹤٤ƻꤷޤʶ [5.1] 
ȡˡ

        [2.2.1]     ưƥ

  test-t, test-c γƥǥ쥯ȥȤ⡢礭ޤȤ᤿եȤʤ
ڤΥեȡΥץ뤬ޤץץå Standard C
٤⤱СʤȤ n_* ˤĤƤϤޤȤ᤿եǥƥ
Ǥޤۤɹ⤯ʤϤΥեǤ椫ץץ
˴٤äơʹߤιܤΥƥȤǤʤʤäƤޤȤ
ΤǡڤΥեѰդƤޤޤڤˤȥ
ο䤿ƥƥȤμ֤ΤǡøʤȤ
ƤޤϤˤäƤϡκڤΥץǤǸޤǽ
ǤʤȤޤξϤΥץ򤵤ʬ䤷ƥƥȤ

  ޤ#error directive ϽϤˤäƤϽλΤǡ#error
ΥƥȤ򤹤륵ץϤޤȤ᤿եƤޤ#include Υ
顼򤽤ǽλ뤳Ȥ¿ΤǡޤȤ᤿եˤƤ
ޤ
  *.t ΥץϡץץåΩץˤʤäƤ硢
ޤϥѥ˥ץץΥƥȤϤ륪ץ󤬤
˻ȤޤΥեץץ̤ľܡܤǸơ
˽񤫤Ƥ̤Ȱפ뤫ɤΤޤץץ
η̤ľܸ뤳ȤǤΤǡϤ¤ꤳǥƥȤ
ΤȽǤǤޤ
  *.c Υץ¿ "defs.h" Ȥإåե include 
ޤ "defs.h" ˤϽϤ Standard C ٤˱ƣ
assert ޥ񤤤ƤΤǡΤΤɤ줫ĤϤǤ #
if 0  0  1 ˤޤץץå # 黻ҤƤ
ǤϡܤޤϣܤΤΤȤޤܤΤΤ <assert.h> 
include ǤܤΤΤ assertion ԤƤ abort ʤ
assert ޥǤϤ assert ޥǤϤޤ󤬡
ΥƥȤǤϤषΤۤǤ礦ܤΤΤ assertion
Ԥñ "Assertion failed" ɽΤΤǡ
assertion ԤΤ狼ޤ# 黻ҤƤʤ
䡢ƤϤ뤬ְ㤤äƥѥ륨顼Ϥ
ϡ礦ʤΤǤȤޤ
  <limits.h> Ȥɸإåե뤬ʤŤϤǤϡ񤤤
ɬפޤ[4.1.3] ȡˡ
  void Ȥ keyword ¸ߤʤŤϤǤ <stdio.h> κǸ׻


    #undef  void
    #define void

Ƚ񤤤ƤƥȤ򤷤Ƥ
  Multi-byte character νϼ¹ԻĶˤäƽϤưͤѤ
礬Τǡi_33, i_34, i_36 ΥƥȤˤդɬפǤ[2.4.32]
ȡˡ

  ƥȤˤ񤷤꤬ޤƥȤ褦Ȥȡ
Ϥ¾η٤ˤҤääƤޤȤ뤫Ǥ㤨 <limits.h>
ְäƤ硢 include  #if ΥƥȤ򤷤褦Ȥȡ
<limits.h> ΥƥȤ򤷤ƤΤ #if ΥƥȤ򤷤ƤΤ狼ʤ
äƤޤޤ*.c ե򥳥ѥ뤷¹ԤƥȤǤϡ*.t ե
ץץƥȤäȤäˤʤޤǽŪʷ̤
äƤСϤ˲餫η٤뤳ȤϤϤäꤷޤƥȤ
褦Ȥ˷٤Τɤϡɬ餫ǤϤޤ
   Validation Suite ǤϥåȤȤŪʤ褦ˤ
פĤǤValidation Suite Τ portable Ǥʤ
ФʤʤȤ󤬤ꡢޤƥȤ뤿ˤ¾θ
ͤƤ뤳ȤȤ򤨤ޤ󡣤äơ
פȤƻȤץץλϡλ򥿡åȤȤ
ȹܰʳΤȤǤۤΤ˥ƥȤ뤳Ȥˤʤޤ˽Ҥ
פˤĤƤ⡢ۤ뤳ȤαդƤ
Ϥ륵ץν˼Ԥ硢ˤΥץ뤬
åȤȤƥȹܤǼԤΤȤ¾װǼԤΤϡ¾
ΥƥȤȤʻƸʤȽǤǤʤȤޤ

  ƥƥȹܤˤĤƤϡ줾Ƥޤδ񤤤
ޤStandard C ˤϥ֥åȤȤΤϤʤΤǡܤ
פƤʤи̩ˤ Standard C Ȥϸޤ󤬡¤ˤϤ
ϤϤʤʤʤΤǡϤɾˤ Standard C ٤Ȥʪ
Ȥ虜򤨤ޤ󡣤ơܤν٤ˤ礭ʺΤǡ
ʹܤο櫓ˤϤ椫٤˱򤻤򤨤ޤ

  󤳤ˤϵҴŪʴϤޤ󡣤 Validation
Suite ϻ䤬˷᤿Τǡ礷Ϥޤ󡣤Ǥ⡢
Ϥεʹ٤ҴŪɾ뤿ܰ¤ˤϤʤǤ礦
  ϡK&R 1st.  Standard C ȤζʬƤ 0 
줵ƤʤХޥʥK&R 1st. ̵뤤
ƤʤäΤ Standard C 줿ͤƤ
Хץ饹Ϳ褦ˤƤޤ
  n_*, i_*, e_*, d_* ϵʽ٤˴ؤƥȤǡϸ§Ȥ 2
ñ̤ޤʳΥƥȤʼɾǤϡq_*  2 ñ̤ǡ
¾ 1 ñ̤ޤǥåФ٤ȤǤϡФˤ
ФʤΤǤϡϤʤȤˤޤޤäְ
ǤϤʤΤΤʤԥȤΤ줿ǥåξϡȾʬ
뤳Ȥޤ

        [2.2.2]     cpp_test ˤ뼫ưƥ

  tool ǥ쥯ȥˤ cpp_test.c Ȥץ򥳥ѥ뤷
test-c ǥ쥯ȥưȡC90  n_*.c, i_*.c ΥƥȤưŪ˹
ȤǤޤϡߤĤǡܺ٤Τ뤳ȤϤǤ
ޤe_*.? ΥƥȤޤޤƤޤ󡣥ץץå C90 
ˤĤƴñ˸Ĥ뤿ΤΤǤC99 ˤĤƤΥƥȤޤޤ
ޤ󡣸ߤϤޤѥȾ C99 ˤбƤʤǤ*
1
  cpp_test.c 򥳥ѥ뤹ϡ__MSDOS__ Ȥޥ
ʤ MS-DOS νϤξϡLSI C-86 / cpp ʤɡˡ-D__MSDOS__ Ȥ
ץդƥѥ뤷Ƥ*2
  ¹Ԥˡi_33_*.c, i_34_*.c, i_36_*.c ΤŬ encoding 
Τ򤽤줾 i_33.c, i_34.c, i_36.c ˥ԡƤƤ

  cpp_test λȤ DJGPP V.1.12 ˤȤȡ̤Ǥ

    cpp_test -go32 DJGPP112 "gcc -ansi -o%s %s.c" "del %s" < n_i_.lst

  -go32 Ȥץ DOS-extender ư륳ޥɤꤹ
ǡcpp_test ϥץץμ¹Իˤ "go32 " 򥳥ޥɥ饤
ƬˤĤޤDOS-extender ʳǤϥץ̵ѤǤʲ
ϡΥץϰο˿ʤȤˤޤ
  ʲϤ줾 "  " ǰϤɬפޤshell  ", " 
ƤޤϡǸΰޤǤΤ '  ' Ǥ˰
кɬסˡ%s  n_*, i_* ץץ̾ .c
Τ֤ޤ

    Ϥ̾ꤷޤϣХȰǡ'.' ޤ
    ʤΤǤʤФʤޤMS-DOS ΤĤ˹碌Ƥˡ
    ̾ .out, .err, .sum Ĥ̾Υե뤬ޤ
    ѥ뤹뤿Υޥɤ񤭤ޤ
  軰ʲ  ѤΤե륳ޥɤ񤭤ޤ
    ʣäƤޤޤ

  n_i_.lst  test-c ǥ쥯ȥˤޤn_*.c, i_*.c γƥե̾
 .c ΤΥꥹȤ񤫤Ƥޤ
  ϤˤäƤϡɤ줫Υν˽ϤΤ⤢ޤ
ξϡn_i_.lst ΤΥ̾㤨 none Ȥä¸ߤʤ
̾˽ؤơƼ¹Ԥޤ

   cpp_test ¹Ԥȡn_*.c, i_*.c 缡ѥ뤵졢
ԤƤ椭ޤn_*.err, i_*.err Ȥեˡץץ
 stderr ؤνϤϿޤơDJGPP112.sum ˤκ̤
ģ˽񤭹ޤޤȸäƤ⡢Σκޤ

    *:  
    o:  ѥϤǤ¹Է̤Թ
    -:  ѥǤʤä

  DJGPP112.out  cpp_test θƤӽФޥɥ饤󤬵Ͽ졢
 stdout ˽ФåФ⤽˵ϿޤDJGPP112.
err ˤϡϤ stderr ˽ФåС줬Ͽޤ
򸫤뤳Ȥˤäơ⤦Τ뤳ȤǤǤ礦

  ˡΤ褦ˤޤ*3

    paste -d\0 side_cpp *.sum > cpp_test.sum

  ȡƽϤΥƥȷ̤Ǥ *.sum ե뤬Ϣ뤵
Ĥɽ졢cpp_test.sum ˽񤭹ޤޤside_cpp ϥƥȹ
Υȥ񤤤ɽ¦ʬǡtest-c ǥ쥯ȥˤޤ
  䤬ƺä cpp_test.sum  doc ǥȥ֤Ƥޤ
ʤ[5] ˤϼưˤܺ٥ƥȤη̤񤤤ƤޤǤ
cpp_test.sum ¿ΥץץåƥȤƤޤΥץ
åˤϤɤνϤΥѥɥ饤ФˤбƤʤΤ
ꡢץץåˤĤƤ cpp_test ˤ뼫ưƥȤϤǤޤ


  *1   cpp_test.c  "Plum-Hall Validation Sampler"  runtest.c 
    summtest.c Ȥץߤˤƽ񤤤ΤǤ롣
  *2  cpp_test.c  Borland C / bcc32 ǥѥ뤹ȴ̤ư
    ʤcpp_test  stdout, stderr 쥯Ȥ system()
    ƤӽФƤ뤬bcc32 ǤɸϤ¹Υץ˷Ѿ
    褦Ǥ롣Visual C, LCC-Win32 ǥѥ뤷Τʤư
  *3  Shell  \ ϤȤ \0  \\0 Ƚɬפ롣
    *.sum ե뤬¿ paste ǤƱ˥ץǤʤ⤷
    ʤξ paste 򼡤Τ褦ˣʬƼ¹Ԥ롣
        paste -d\0 side_cpp file1 file2 .. > tmp
        paste -d\0 tmp file10 file11 .. > cpp_test.sum
    Paste ޥɤΤʤƥǤ tool/paste.c 򥳥ѥ뤷ƻȤ
     4.4BSD-Lite ΤΤˡBSD ʳΥƥǤ⥳ѥǤ
    褦䤬㴳μäΤǤ롣getopt() ΤʤϤǤ src/
    lib.c ΤΤڤФԽƻȤPaste λˡ tool/paste.0
    򻲾ȤΤȡ 4.4BSD-Lite  paste.1 ǡ
    ¸Τʤ plain text ѴΤǤ롣

        [2.2.3]     GNU C / testsuite ˤ뼫ưƥ

            [2.2.3.1]   TestSuite Ȥ

  GNU C ˤ testsuite ȤΤޤGNU C Υ򥳥ѥ
ǡmake -k check Ȥȡ testsuite Υץ뤬ȥ
å졢̤𤵤ޤ
  θڥåȤ V.1.3 ϡGNU C  testsuite ȤƤȤ˽
ľ edition ɲäޤ testsuite Ƥȡmake
-k check ǼưŪ˥åޤ[2.2.2]  cpp_test Ȥġ
 n_*, i_* Ȥ̾Υץ뤷ƥȤǤޤ󤬡testsuite Ǥ
e_*, w_*, u_* οǥåפ륵ץ⼫ưŪ˥ƥȤǤޤ
Ǥ GNU C 2.9x / cpp, GNU C 3.x / cpp, MCPP ΥƥȤ򤹤뤳Ȥ
ޤ
  ǤϡGNU C / testsuite ǤθڥåȤλȤޤ

  ڥåȤ cpp-test ǥ쥯ȥ test-t, test-l ǥ쥯ȥ GNU
C / testsuite бƽľΤǡcpp-test  test-t, test-l
γƥǥ쥯ȥ꤬ޤ
  i_33_*, i_34_*, i_36_*, u_1_7_*  multi-byte character γƼ
encoding бΤǤѥδĶѤ뤳Ȥ
testsuite ǤϤǤʤΤǡcpp-test ˤϴޤƤޤ
  GNU C / cpp λͤѹ testsuite λͤѹޤǤˤ
ꡢ줫⤢ͽۤޤˤäƤϸڥåȤΰ
ɬפˤʤޤȤ˿ǥåɲä줿ѹ줿ꤷ
ϡtestcase ˤɬפޤΤȤ GNU C
ΥС󤬤ҤɤŤʤ¤ꡢʽɬפʤȻפޤcpp-
test  testcases  GNU C 2.95.3, 2.95.4, 3.2R γ cpp (cpp0) 
MCPP ưΤƤޤ
  ޤDJGPP 1.12 (GNU C 2.7.1) οǥåĴ٤ơGNU C 2.95.x
ȰۤʤΤ testcases ˼Ǥޤäơ testcase
Ƥ GNU C 2.7.1 - 2.95.4, 3.0 - 3.2 ΤۤȤɤΥСб
ƤȻפޤtestsuite Ǥϼ¹ԻץϤˤä
Ѥ뤳ȤϤǤޤʣεʤ¾ʻ¸Ƥ븽ߤξǤ std
= ȤץǵʤΥСɬפޤΥ
 GNU C θŤСˤ¸ߤޤ󡣤äơ
testsuite ŬϰϤ GNU C 2.9x ʹߤ MCPP V.2.3 ʹߤȤȤˤʤ
ޤ

  ʤtestsuite  egcs-1.1.2 (GNU C 2.91.66) ޤǤ¸ߤƤޤ
GNU C 2.95 - 2.95.3 ˤ¸ߤƤޤ󡣤λ testsuite ΰ
꤬äˡαƤΤǤGNU C
3.0 Ǥ褷褦Ǥ
  Testsuite ϥץץ˽񤫤줿Τ褦ʷΥȤ
ᤷƼ¹ԤޤϥȤʤΤǡ¾νϤΥƥȤˤϱƶ


    /* { dg-do preprocess } */
    /* { dg-error "out of range" } */

  dg-error Ȥ dg-warning ȤȤν񤫤줿ץǤϡǥ
åƥȤޤʣνϤΥƥȤ򤹤뤳Ȥ⡢줾ν
Ϥοǥå '|' (OR) Ϥ¤٤ƽ񤯤Ȥǡǽˤʤ

  ¹ԤΤ DejaGnu Ȥġǡľܤˤ runtest Ȥ
shell-script ǤDejaGnu  *.exp Ȥ̾ΤĤΥե
˽񤫤Ƥޤ*.exp  expect ȤġΤ script Ǥ
ơ expect  Tcl Ȥޥɸǽ񤫤줿ץʤΤǤ
  äơtestsuite Ȥˤϡ testsuite ˱ơ¿
ΥġŬڤʥСΤΤäƤʤФʤޤ󡣤
θڥåȤȤǤ⡢ȤʤƱǤ

            [2.2.3.2]   TestSuite ؤΥ󥹥ȡȥƥ

  GNU C / testsuite ǻθڥåȤȤˤϡΤ褦ˤޤ
  ޤ cpp-test ǥ쥯ȥ GNU C  testsuite Ŭʥǥ쥯ȥ
˥ԡޤ
  cpp-test ǥ쥯ȥϡtest-t, test-l γƥǥ쥯ȥɬפʥե
ľcpp-test.exp ȤƥѤեäΤ
*.t Ȥ̾Υե suffix  .c ѤƤޤC++ Υե
 *.C Ȥ̾ˤƤޤ
  ȾΥץϥץץåƥȤΤǤĤ
DejaGnu, Tcl Ǥ줬ǤʤΤǡcompile & run 뤿Υ
ˤʤäƤޤ*_run.c Ȥ̾ΤΡˡΣĤΥץˤ
{ dg-options "-ansi -no-integrated-cpp" } ȤԤޤ-no-
integrated-cpp ȤΤ GNU C 3 ΤΥץǤGNU C 2 ˤϤ
ΥץϤʤΤǡGNU C 2 ǥƥȤϤΥץϤ
ʤФʤޤ󡣤ΤˡΣĤ testcase ˤĤƤ *_run.c.
gcc2, *_run.c.gcc3 ȤΥեѰդƤޤŬʤۤ
 *_run.c ˥󥯤ƻȤäƤ

  ʲǤϡΤȤ GNU C 3.2 ˤȤäޤGNU C 3.2 
 /usr/local/gcc-3.2-src ֤ƤȤޤޤGNU C Υ
ѥ /usr/local/gcc-3.2-objs ǹԤȤޤ

    cp -r cpp-test /usr/local/gcc-3.2-src/gcc/testsuite/gcc.dg

  ǡgcc.dg ǥ쥯ȥ cpp-test ʲΥե뤬ԡޤ
  Ƥȡ/usr/local/gcc-3.2-objs 

    make bootstrap

Ȥ GNU C Υ򥳥ѥ뤷ǡ

    make -k check

Ȥȡcpp-test  testcases ޤ᤿٤Ƥ testsuite ƥȤ
ޤ
  ޤcpp-test ȤäƥƥȤˤϡ/usr/local/gcc-3.2-objs/gcc
ǥ쥯ȥǼΤ褦ˤޤ

    make -k check-gcc RUNTESTFLAGS=cpp-test.exp

  Testsuite  log  ./testsuite ǥ쥯ȥ gcc.log, gcc.sum ˵Ͽ
ޤ
  make check ϡGNU C Υ INSTALL/test.html 
ˡDEJAGNULIBS, TCL_LIBRARY ȤĶѿ꤬ɬפǤȤС
ΤȤ VineLinux Ǥ /etc/profile ǼΤ褦ˤƤޤ

    TCL_LIBRARY=/usr/lib/tcl8.0jp
    DEJAGNULIBS=/usr/share/dejagnu
    export TCL_LIBRARY DEJAGNULIBS

  ޤGNU C 3 ǤϴĶѿ LANG, LC_ALL  C ȤƱѸĶˤʤ
Фʤޤ
  GNU C Υѥ make check ǻȤΤϡǤ˥󥹥ȡ뤵
Ƥ gcc, cc1 ǤϤʤgcc ǥ쥯ȥ줿 xgcc, cc1,
cc1plus, cpp0 Ǥ뤳ȤդƤ
  cpp-test ˤƥȤϼΤ褦ˤƤǤޤ

    runtest --tool gcc --srcdir /usr/local/gcc-3.2-src/gcc/testsuite  \
                                                        cpp-test.exp

ξϡ¹Ԥǥ쥯ȥǤդǤϥȥǥ쥯ȥ
ϤޤƥȤΤϡǤ˥󥹥ȡ뤵Ƥ gcc, cc1,
cpp0 Ǥcpp-test  testsuite ɬפʤΤϡGNU C ѤγƼ
 (config.*, *.exp) ˤ뤫Ǥ
  ʤcpp-test ˤϥץץå˥󥰤ФΤ˾ޤȹ
륱ˤĤƤΥ˥󥰤 testcases ¿ޤޤƤޤ
GNU C ΥץץåϤȾʬʲ PASS ޤ󤬡̤ʤ
ȤäơưְäƤȤץץåѥ뤵
ƤʤȤȤȤǤϤޤ󡣤ְäƤ뤫
ǤϤʤץץåΡʼפʤΤǤ

            [2.2.3.3]   MCPP μưƥ

   cpp-test Ǥɸ⡼ɤ MCPP ΥƥȤǤ褦ˤʤäƤޤ
äơGNU C Υץץ MCPP ֤ơgcc ǥ쥯ȥ

    make -k check-gcc RUNTESTFLAGS=cpp-test.exp

ȤȡMCPP μưåޤǤդΥǥ쥯ȥ runtest 
ľܸƤӽФƼ¹Ԥ뤳ȤǤޤ

    runtest --tool gcc --srcdir /usr/local/gcc-3.2-src/gcc/testsuite  \
                                                        cpp-test.exp

  MCPP  GNU C 3 Ǽ¹Ԥ硢cpp-test  testcases Ƥ
٤Ƥ PASS ϤǤGNU C 2 Ǽ¹ԤϤ⤦̤ʤ
ޤ gcc  -D__cplusplus=1 Ȥץդ
MCPP ƤӽФǤꡢMCPP ΤǤϤޤ
  ץץ MCPP ֤ˡˤĤƤϡmanual.txt [3.9.5], [3.
9.7] 򸫤ƤTestsuite ŬѤϡMCPP εư -23j Ȥ
ץդ褦ꤹɬפޤ-2  digraph-3 
trigraph ͭˤ륪ץǤ-j ϿǥåνϤ˥
ξղäʤΥץǤ¾ΥץꤷʤǤ
ޤtestsuite ǥƥȤǤΤɸ⡼ɤ MCPP ǡ¾
⡼ɤ MCPP ΥƥȤϤǤޤ

  ʾ GNU C  make θǹԤˡǤGNU C / testsuite 
ȡ뤵ƤƼ¹ԤǤ֤ˤʤäƤСMCPP Ȥ configure 
make  MCPP μưƥȤ򤹤뤳ȤǤޤξϡɬפ
٤ make check ưŪˤäƤΤǡǤñǤˡˤ
ƤϡMCPP  README 򸫤Ƥ

            [2.2.3.4]   TestSuite ȸڥå

  GNU C ˤ testsuite Ť餢ޤץץ˴ؤƤ V.
2.9x ޤǤϤ鷺Υץ뤷ޤǤ˥ץץ
ڻ뤵Ƥ狼ޤΥץץ testcases  V.3.x 
ϥ㤤ޤץץåΥȥɥȤ쿷졢
up-to-date ʤΤˤʤäȤȼΤǡץץŻ뤵褦
ˤʤäȤ狼ޤ
   testcases ϰȤƤʤҴäΤˤʤäƤޤ
θϡtestsuite μΤ褦ʤͳ褹ΤȻפޤ

  桼󤻤 bug report νѤǤ뤳ȡʤºݤ
ȯ줿ХȯɤΤΤ濴Ǥ롣
  ˡȯԤǽˡΥǥХåΤ˽
ΤɲäƤ롣

  ϥץ󥽡ʤǤϤΥǥХåˡǡGNU C ¿ͥ
ץޤ˻ȤƤȤǲǽȤʤäΤǤˡ
Ʊˡtestcases ΥҴ⤿餷Ƥȹͤޤ
  ޤ testcases ˤ GNU C ǤѤʤץ뤬¿¾
νϤˤŬѤǤޤ󡣤ɤGNU C 3  testcases ˤ GNU
C 2 / cpp ˤŬѤǤʤΤ¿ޤޤƤޤץץ
 spacing ΰ㤤ǥåΰ㤤뤿Ǥ
  ФƻθڥåȤϡϻΥץץåΥǥХåΤ
˻䤬ͤǽ񤤤ΤǤǹͤѤơץץ
ƥȤ褦˽ľޤ¿Υץ뤬ΤȤƥƥޥ
å˹Ƥޤƥޥƥå testcases  GNU C
/ testsuite ɲä뤳Ȥϡʤʤ̣ĤȻפޤ
  ޤ testsuite ǸڥåȤ GNU C 2.9x / cpp, GNU C 3.x / cpp,
MCPP ȤĤΥץץåΥƥȤǤ褦˽񤫤Ƥޤ
ʤDejaGnu, Tcl ɽεǽѤСϤˤץץ
Ϥ spacing κۤǥåκۤۼ뤳ȤǤ
Ǥ*

  Testsuite ڥåȤ򤳤ΣĤΥץץåŬѤ̤
˺ܤƤޤ2004/03 Υƥȡˡ
  GNU C 3.2 ǥץץåɸ⡼ɤ MCPP V.2.4.1 ֤Ƽ¹
Ϥʤޤ

                === gcc Summary ===

# of expected passes            266
# of unexpected failures        1
# of expected failures          2
gcc version 3.2

  Ĥ FAIL ΤϡC++98 Ǥ universal-character-name <=>
multi-byte character ѴƤʤȤˤΤǤ
  GNU C 3.2 / cpp0 ǤϤʤޤ

                === gcc Summary ===

# of expected passes            214
# of unexpected failures        55
# of unexpected successes       1
# of expected failures          1
gcc version 3.2

  FAIL ¿ϡ˥󥰤ФƤۤȤǽФƤʤȤ
ΤǤ
  GNU C 2.95.3 / cpp0 ǤϤʤޤ

                === gcc Summary ===

# of expected passes            184
# of unexpected failures        86
# of unexpected successes       1
# of expected failures          1
gcc version 2.95.3 20010315 (release)

  GNU C 3 / cpp ⤵˥˥󥰤ʤԥȤγ줿ǥ
⤤ĤޤC99, C++98 οͤȾʬ̤Ǥ
  GNU C 2 η¿ʤäƤΤϡĤ testcase ʣ
FAIL ȯ뤳Ȥ뤫Ǥ
  GNU C 2.95.4 / cpp0  2.95.3 ƱǤǥåäƤ
Ǥ

                === gcc Summary ===

# of expected passes            184
# of unexpected failures        86
# of unexpected successes       1
# of expected failures          1
gcc version 2.95.4 20020320 [FreeBSD]

  *  Τˡ testcases  dg script Ϥ䤿 \ 䵭¿
    unreadable ʤΤˤʤäƤ롣
    DejaGnu, Tcl ɽνˤϤʤʤ٤ꡢȤˤϼ
    ιפɬפǤ뤬פʣνϤˤĤư̤μư
    ȤǽǤ뤳Ȥ狼ä
    ǤϡνϤμ¹ԻץΤ testcases
    ǻȤ륪ץ󤬶̤Ǥ뤳ȤǤ롣

    [2.3]       Violation of syntax rule or constraint ȿǥå

  Standard C νϤʤФʤʤΤϤ
ǤְäФƤϿǥåФʤФʤ
󡣤ޤStandard C ˤϡưͤϤˤޤƤʬ䡢
ư򤹤뤫ꤵƤʤʬ⤢ޤΤȤޤȤ
ȡΤ褦ˤʤޤ*

  ץǡǡɤνϤǤƱ̤ˤʤ
Ρ
  ץȥǡǤäƤ⡢νˡϵꤵʤΡ
ϥɥȤ˵ܤʤƤɤ unspecified behavior̤
ưˤȸƤ֡
  ץȥǡǤäƤ⡢νϽϤˤޤƤ
ΡλͤϳƽϤɥȤ˵ܤʤФʤʤ
implementation-defined behaviorʽưˤȸƤ֡
  ְä뤤ϰܿΤʤץޤϥǡǤ뤬ν
ˤĤƤϲ⵬ꤵʤΡϤϤ˿ǥåФƤ
ɤФʤƤɤ餫ץȤƤν򤷤Ƥ
 undefined behavior̤ưˤȸƤ֡
  ְäץޤϥǡǡФƽϤ diagnostic
messageʿǥåˤФʤФʤʤΡˤ violation
of syntax ruleʹʸ§ȿˤ violation of constraint ȿˤ
롣

  ΤΥץȥǡΤΤ strictly conforming
program ʵʸ̩ץץˤȸƤӤޤʣ⡢Ϥˤ
äƷ̤˰㤤νФʤΤǤСޤޤƤƤɤȲᤵˡ
  ΥץȥǡΤΤ conforming program ʵʹ
ץץˤȸƤӤޤ
  ǥåνФ implementation-defined Ǥ餫
violation of syntax rule or constraint ޤ translation unit Ĥˤ
ƣİʾβ餫οǥåФʤФʤʤȤƤޤ
Violation of syntax rule or constraint ޤޤʤץФơ
ǥåФȤϽϤμͳǤ strictly
conforming program 䡢νϤ implementation-defined, unspecified
λͤ˹פ conforming program ϺǸޤǤʤФʤ
ޤ
  ΥɥȤǤϡviolation of syntax rule or constraint ֥
פȸƤ֤Ȥˤޤ
   Validation Suite  e_* եˤϡʣΥ顼ޤΤ
󤢤ޤʲκǤϡϤĤΥ顼ˤĤƣİʾο
ǥåФȤԤƤޤĥ顼äƤ⣱
Ĥ translation unit ˤĤƣĤοǥå"violation of syntax
rule or constraint" ȤäˤФʤϤ⤢뤫⤷ޤ󡣤
顼Ȥθν𤹤Ϥ⤢뤫⤷ޤ󡣤
ϽϤΡʼפǤʽ٤ǤϤޤ
ɬפʾϥץХ餷ƺƥƥȤƤʼ [3] 
̤ˤȤꤢޤ

  *  ANSI C 1.6 (C90 3) Definitions of Terms Ѹڤӵ
     ANSI C 1.7 (C90 4) Compliance ʹ
     ANSI C 2.1.1.3 (C90 5.1.1.3) Diagnostics ǥå
     C99 3 Terms, definitions, and symbols
     C99 4 Conformance
     C99 5.1.1.3 Diagnostics

    [2.4]       ܺ

  ʲˡƥƥȹܤˤĤƣĤĲ⤷ޤ Standard C ץ
ץΤΤβȤʤΤǤK&R 1st. ȶ̤λͤ
ĤƤϡ餿ƲϤޤ󡣹ܤֹ *.t ե *.c ե
ȤǶ̤Ǥ

        [2.4.1]     Trigraphs

            [n.1.1]     Ĥ trigraph sequences

  äδʸåȤˤ ISO 646:1983  Invariant Code Set ˴ޤޤʤ
ʸĤΤǡϼΣʸ sequence Ǥ⥽˽񤯤
Ǥ褦ˤʤޤ C90 ǿߤ줿Ǥ*

    ??=     #
    ??(     [
    ??/     \
    ??)     ]
    ??'     ^
    ??<     {
    ??!     |
    ??>     }
    ??-     ~

  ΣĤ trigraph sequence  translation phase 1 бʸ
֤ޤĤʸ򥭡ܡɤϤ뤳ȤΤǤ륷
Ǥϡ trigraph ȤɬפϤޤ󡣤
Ǥ Standard C ˹פץץ trigraph ѴǤɬפ
ޤ
    : [0,6]ĤȤǤ 6 Ǥʤ
trigraph Ĥ뤴Ȥ 2 0 򲼸¤Ȥ롣

  *  ANSI C 2.2.1.1 (C90 5.2.1.1) Trigraph sequences ʸɽ
     ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     C99 5.2.1.1 Trigraph sequences
     C99 5.1.1.2 Translation phases

            [n.1.2]     ȥ trigraph sequence

  Trigraphs Ѵ translation phase 3 Ǥ tokenization  phase 4 
ΥȥԤνΩäƹԤΤǡ󥳥ȥԤ
ǤɤǤ trigraphs 񤯤ȤǤޤ
    : [0,2]

            [n.1.3]     Trigraphs ϣĤ¸ߤʤ

  Trigraphs Ͼ嵭ΣĤʤΤǡʳ ?? ǻϤޤ sequence 
¾ʸѴ뤳ȤϤʤ?? åפ뤳Ȥ⤢ޤ
Trigraph ȤǤʤ ? ޤ sequence ߤƤ⡢ץץ
Ǥɬפޤ
    : [0,2]

        [2.4.2]     <backslash><newline> ˤ³

   \ äƤľ˲Ԥ³ƤФϡ <backslash>
<newline>  sequence  translation phase 2 ̵˺ޤ
η̡ĤιԤ³ޤʽǤϡեιԤ
physical lineʪԡˡ<backslash><newline> ʤС˺³
줿ιԤ logical lineԡˤȸƤǶ̤ƤޤTranslation
phase 3 νϤԤоݤȤƹԤޤ*
  K&R 1st. Ǥ #define Ԥʸ <backslash><newline> ǼΥ
Ԥ³뤳ȤǤȤƤޤΰʳξˤĤƤϿ
Ƥޤ󡣼ºݤνϤǤϤޤޤǤȥԤ #define
˸¤餺³ǤΤ¿ä褦Ǥ

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     C99 5.1.1.2 Translation phases

            [n.2.1]     #define ԤΥѥ᡼ꥹȤִꥹȤȤδ

  #define Ԥ³ K&R 1st. ǤǧƤΤǤꡢۤȤɤν
ϤǲǽǤ
    : [-4,0]ʤǤ 0 Ǥʤ -4 

            [n.2.2]     #define ԤΥѥ᡼ꥹȤ

  #define ԤǤäƤѥ᡼ꥹȤΤ褦ʤޤ̤Ǥ
ʤȤ <backslash><newline> ȡǤʤϤ⤢
ޤ
    : [-2,0]

            [n.2.3]     ʸƥ

  ʸƥ <backslash><newline>  K&R 1st. ΤΤǤ
    : [-2,0]

            [n.2.4]     ̻Ҥ

  Standard C Ǥϡ̻ҤǤȤɤǤȡ<backslash>
<newline> ̵ǺʤФʤޤ
    : [0,2]

            [n.2.5]     Trigraph ˤ <backslash>

  <backslash>  \ Ǥʤtrigraph ˤ ??/ ⤢ޤ
 ??/  translation phase 1  \ ѴƤޤ顢phase 2 Ǥ
 \ ΤΤǤ
    : [0,2]

        [2.4.3]     

  Translation phase 3 ǤԤ pp-token  white spaces ʬ򤵤
κݡȤϣĤ space Ѵޤ*1
  ǽϤϡϢ³ white spacesʥȤޤˤ򣱸Ĥ space
Ѵ뤫⤷ޤ󡣤ɤˤƤ <newline> Ѵ
Τޤ޻Ĥޤϡ phase 4 Ǥ preprocessing directive ν
ΡֹԡפоݤȤ뤫Ǥ
  ȤԤޤäƤϡȤˤ¾ι³Ԥ
ޤ

  *1  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
      C99 5.1.1.2 Translation phases

            [n.3.1]     One space Ѵ

   Reiser θŤ cpp ǤϥȤϡcpp Ǥ token
separator ȤƵǽϻˤϺƤޤΤȤѤơ
ȡϢ˥ȤȤˡޤλͤ K&R 1st. 
⳰줿ΤǤꡢStandard C ǤΤꤵޤStandard C 
ϥȡϢˤ ## 黻ҤȤޤ
    : [0,6]Ǥ 0 Ǥʤ -6 ȤƤ褤ΤǤ
뤬K&R 1st. εܤޤΤǤʤΤǡƤ

            [n.dslcom]  // 

  K&R 1st.  C90 ˻ޤǡȤ /* ǻϤޤ */ ǽΤ
*1
  C99 Ǥ C++  // ⥳ȤȤưȤˤʤޤ*2
    : [0,4]
  C90 ǤϤϥȤǤϤʤñʤ // Ȥ pp-token sequence Ȥ
ƽ٤ΤǤꡢ Validation Suite Ǥ V.1.2 ޤǤϤ
ȤƤC99  // 򥳥ȤȤƽϤ
ŪǡԤƤ륽¿C99 Ǹǧ줿ȤǤ⤢Τǡ
ΥƥȤ V.1.3 ϤϤ
  MCPP Ǥ⡢V.2.2 ޤǤ C90 ⡼ɤǤ // 򥳥ȤȤưäƤʤ
äV.2.3  C90 ⡼ɤǤ⤳򥳥ȤȤƽǥ
˥󥰤Ф褦ˤ

  *1  ANSI C 3.1.9 (C90 6.1.9) Comments 
  *2  C99 6.4.9 Comments

            [n.3.3]     Ȥ pp-directive νΩäƽ

  # ǻϤޤ preprocessing directive ϡֹԡפоݤȤޤΡֹԡ
ϥʪԤȤϸ¤ޤ<backslash><newline> ˤä³줿
ԤǤ뤳Ȥ⤢СʪԤޤȤˤäʣʪ
ԤˤޤֹԡפǤ뤳Ȥ⤢ޤ translation phase 1
 4 νͤƤߤСΤȤǤ
    : [0,4]

            [n.3.4]     Ȥ <backslash><newline>

  <backslash><newline> ȥȤˤäƤĤʪԤˤޤ
 pp-directive Ԥ¸ߤޤTranslation phase Ƥʤ
ץץåǤϡ뤳ȤǤޤ
    : [0,2]

        [2.4.4]     üʥȡ (digraphs) ʸ (UCN)

  C90 / Amendment 1 (1994) ǤϡĤ operator, punctuator ˤĤ
 digraph Ȥ spelling ɲäޤ*1
  C99 Ǥ UCN (universal character sequence) Ȥʸɽɲä
*2
  e.4.? Ǥϥȡ󥨥顼夲ޤ

  *1  Amendment 1 / 3.1 Operators, 3.2 Punctuators ISO 9899 / 6.1.5, 6.
    1.6 ؤɲá
      C99 6.4.6 Punctuators
  *2  C99 6.4.3 Universal character names

            [n.4.1]     Preprocessing directive  digraph spelling

  Digraph  token (pp-token) Ȥưޤ%:  #  spelling 
preprocessing directive ԤƬ pp-token ȤƤ⡢ʸ
黻ҤȤƤȤޤ
    : [0,6]

            [n.4.2]     Digraph spelling ʸ

  Digraph  trigraph Ȱä token (pp-token) ʤΤǡʸ󲽤˺ݤ
Ѵ줺ˤΤޤޤ spelling ʸ󲽤ޤ̵̣ʻͤǤˡ
    : [0,2]

            [n.ucn1]    UCN ǧ 1

  UCN ʸƥ롢ʸ̻Ҥǧޤ
    : [0,8]ʸƥ UCN ץץ򤽤Τޤ̲᤹
 4 ʸidentifier  UCN г 2 
UCN Ǥ뤳ȤǧۤäƤΤޤ޽ϤΤԲġ

            [n.ucn2]    UCN ǧ 2
  UCN  pp-number ǤȤޤץץνޤǤ
number-token ϾǤƤʤФʤޤ󡣤 C99 εǡ
C++ ˤϤޤ
    : [0,2]

            [e.ucn]     UCN θ

  UCN  \U ǻϤޤΤϣ\u ǻϤޤΤϣΣʿǤ
Фʤޤ
  UCN  [0..9F], [D800..DFFF] ϰϤˤäƤϤʤޤ󡣤24($),
40(@), 60(`) ͭǤ
    : [0,4]ĤΥץΤ줾ˤĤơǤǤг
1 

            [e.4.3]     ʸ

  äΥȡη򤷤Ƥʤ sequence Ǥ⤿Ƥ pp-token Ȥǧ
ޤäơץץ tokenization ǥ顼Ȥʤϡ
ޤꤢޤ
  Τۤ undefined behavior Ȥʤ礬Ĥޤ[3.
1] ȡˡ
  ʸϥץץ #if ԤǤ⥳ѥǤ⡢violation of
syntax rule Ǥ*
    : [0,2]

  *  ANSI C 3.1.3.4 (C90 6.1.3.4) Character constants ʸ -- Syntax
    ʸ§
     C99 6.4.4.4 Character constants -- Syntax

        [2.4.5]     Preprocessing directive line  space  tab

  Space, tab, vertical-tab, form-feed, carriage-return, new-line 
white space Ȥư礵ޤʸƥ롦ʸإå̾
Ȥˤʤ white space ̾ token separator ȤƤΰ̣
Ƥޤ󤬡translation phase 4 ޤǻĤä new line ̤ʤΤǡpp-
directive ζڤȤʤޤơpp-directive line ǤϻȤ
white space ˼㴳¤ޤ

            [n.5.1]     #  space  tab

  Standard C ǤϡPreprocessing directive line κǽ pp-token Ǥ
#  space, tab ϡäƤʤƤƱ̤ˤʤ뤳Ȥݾڤ
ޤ(*)K&R 1st. ǤϤ줬ΤǤϤʤºݤˤ #  space,
tab ǧʤϤޤ
  ιԤΤʹߤ space, tab ϡK&R 1st. Ǥ Standard C Ʊͤˡ
ñʤ token separator ȤǧƤȲᤵޤ
  pp-directive line  space, tab ʳ white space ä
 undefined Ǥ[3.1]  [u.1.6] ȡˡ
    : [0,6]

  *  ANSI C 3.8 (C90 6.8) Preprocessing directives  --
    Description ­, Constraints 
      C99 6.10 Preprocesssing directives -- Description, Constraints

        [2.4.6]     #include

  #include  K&R 1st. κǤŪ pp-directive Ǥ
Standard C Τ directive εˤ undefined ʬ implementation-
defined ʬȤ¿ʤäƤޤ(*)ͳϼˤޤ
  1.  directive ΰǤ header-name Ȥ pp-token ϣϣӤΥ
륷ƥ˰¸ΤǤꡢɸಽ
  2. ե򤵤ɸפξϽϤ˰¸롣
  3. ", " ǰϤޤ줿ʸƥη header-name Ǥ⡢\
 escape ʸǤϤʤʸƥȤ̤ pp-token Ǥꡢ
<, > ǰϤޤ줿 header-name ˤäƤϺǤ§Ū pp-token Ǥ롣
  n.6.* ǤϡΤ褦ʺǤŪʥƥȤϡܤʬƹԤȤϤ
󡣤¾ΥƥȹܤȤƴޤޤƤꡢ줬Ǥʤ
Ǥ¿ΥƥȤ»ܤǤʤΤǡǤ

    #include    <ctype.h>
    #include    "header.h"

  *  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
    
     C99 6.10.2 Source file inclusion

            [n.6.1]     Ĥηˤɸإå include

  Header-name ˤϣĤηޤΰ㤤ϡ<, > ǰϤޤ줿
ǤϽξʣǤɤˤ餽 header 򤵤", "
ǰϤޤ줿ǤϤΥեޤˡǤơ
줬Ԥ <, > ǰϤޤ줿Ʊͤν򤹤롢ȤȤˤ
ޤ󡣤äơ", " ǰϤޤ줿ɸإå include 뤳Ȥ
Ǥޤ K&R 1st. ǤƱͤǤ
  ʤStandard C ǤϡƱɸإåʣ include Ƥ⤫ޤʤ
ȤˤʤäƤޤϤɤˤƤץץåǤ
ʤɸإåνǤ[4.1.1] ȡˡ
    : [-10,0]

            [n.6.2]     ޥˤ header-nameΣ

  K&R 1st. Ǥ #include Ԥ˥ޥȤȤϤƤޤǤ
Standard C Ǥϥޥǧޤ#include ΰĤΤɤη
Ȥפʤϡ˴ޤޤޥŸޤη̤ϣ
ĤηΤɤ餫˰פɬפޤ
  εˤ̯ʤȤ⤢ޤ㤨СΤ褦ʥϤɤ
٤Ǥ礦

    #define MACRO   header.h>
    #include    <MACRO

  ϡMACRO ޤŸ

    #include    <header.h>

Ȥ٤Ǥ礦Ȥ⡢ޥŸ < б > ʤȤ
ƥ顼Ȥ٤Ǥ礦
  ʤϤȤޤǰռƽ񤫤ƤȤϹͤޤ󡣤
äơ<, >  ", " Ʊͤ quotation delimiter ȤưΤʤ
פޤ˥ޥŸΤ⡢ʰȿȤϸޤ󤬡
 Validation Suite ˤϡʤηĤĤƥȤϴޤޤƤ

    : [0,6]

            [n.6.3]     ޥˤ header-nameΣ

  ĤޤʤȤǤޥɬ⣱ĤǤɬפϤޤ
    : [0,2]

        [2.4.7]     #line

  #line Ȥ pp-directive ϥ桼ȤȤ̤ϤʤΤǤ¾
βΥġǡʣäȤϸ¤ʤ˥ pre-preprocess ʤɤˡ
ΥΥե̾Ȥλιֹ뤿˻ȤΤΤ褦
ǤK&R 1st. 褢Ȥ򸫤ȡŪˤʤӤΤ
礦
  ޤץץåνϤˤ̤ #line ޤϤѷե
̾ȹֹ򥳥ѥΤ뤿˻Ȥޤϵ
ꤵƤ뤳ȤǤϤޤ
  #line ǻꤵ줿ե̾ȹֹϻޥ __FILE__,
__LINE__ ͤȤʤޤ__LINE__ ϤʪԣԤȤ˥󥯥
Ƥ椯ˡ*

  *  ANSI C 3.8.4 (C90 6.8.4) Line control 
     C99 6.10.4 Line control
     ANSI C 3.8.8 (C90 6.8.8) Predefined macro names 餫
    ޥ̾
     C99 6.10.8 Predefined macro names

            [n.7.1]     ֹȥե̾λ

  Line number  filename ꤷ #line  K&R 1st. Ǥ Standard C
ǤƱǤ
  ʤե̾ʸƥǤ #include  header-name
ȤϰäȡǤꡢ̩˹ͤ \ ΰ̯ޤ
ޤǤʤǤ礦#line 
filename  <stdio.h> ηΤΤʤΤϹǤˡ
    : [-6,0]

            [n.7.2]     ե̵̾Ƥɤ

  Filename ΰϥץǤꡢʤƤ⤫ޤޤ󡣤 K&R
1st. ƱǤline number λΤʤΤ undefinedˡ
    : [-4,0]

            [n.7.3]     ޥˤֹȥե̾λ

  K&R 1st. Ǥ #line ΰ˥ޥȤȤϤƤޤǤ
Standard C ǤϻȤ뤳Ȥݾڤޤ
    : [0,4]

            [n.line]    ֹϰ

  #line ǥ쥯ƥ֤ line number ϰϤ C90 Ǥ [1..32767] Ǥ
C99 Ǥ [1..2147483647] ˳礵ޤ
    : [0,2]

            [e.7.4]     ե̾磻ʸƥ

  Filename ΰʸƥǤʤФʤ餺ĤޤʤȤǤ
磻ʸƥǤ violation of constraint Ȥʤޤʤʳ
pp-token ǤϤʤ undefinedХ󥹤ʵǤˡ
    : [0,2]

        [2.4.8]     #error

  #error  Standard C ǿߤ줿 directive Ǥץץˡ
򤽤ΰȤƴޤ२顼åɽޤŤϤǤ #
assert  directive ĤΤ⤢ޤɸŪʤΤϤޤ
Ǥ
  ʤ#error ǤϽλ٤ɤϵꤵƤޤ󤬡
Rationale ˤȡʤǤϤޤ׵ǤʤΤǵꤷʤäǡ
ߤΤ ANSI C ѰΰտޤǤȤΤȤǤ*

  *  ANSI C 3.8.5 (C90 6.8.5) Error directive ɽ
     ANSI C Rationale 3.8.5
     C99 6.10.5 Error directive
     C99 Rationale 6.10.5

            [n.8.1]     ޥŸʤ

  #error ΥޥŸޤ󡣥ȥԤǥޥŸ
Τϡ#if (#elif), #include, #line Ǥ*
    : [0,8]ޥŸƽΤ 2 λ뤫
ʤ

  *  ANSI C 3.8 (C90 6.8) Preprocessing directives  --
    Semantics ̣§
     C99 6.10 Preprocessing directives -- Semantics

            [n.8.2]     å̵Ƥɤ

  ĤޤʤȤǤ#error ԤΰϥץǤꡢʤƤ⤫
ޤ
    : [0,2]

        [2.4.9]     #pragma

  #pragma  Standard C ǿߤ줿ΤǤȼγĥ directive
Ϥ٤ #pragma sub-directive Ǽ¸뤳ȤˤʤäƤޤ*1

  *1  ANSI C 3.8.6 (C90 6.8.6) Pragma directive ץ饰޻
      C99 6.10.6 Pragma directive

            [n.9.1]     ǧǤʤ #pragma ⥨顼ˤϤʤʤ

  äơϤȤǧǤ #pragma sub-directive ۤʤޤ
ǧǤʤ #pragma 顼ˤʤäΤǤ portable ʥץ
ब񤱤ʤΤǡϤǧǤʤ #pragma ̵뤹뤳ȤˤʤäƤ
ޤץץǤϼʬǧǤץץ˴ؤ #pragma 
ơ¾ #pragma Ϥ٤ƤΤޤޥѥΤϤȤˤʤ
ޤ
    : [0,10]#pragma 򥨥顼ˤƤϤʤ˥󥰤Ф
ȤϤޤʤץץϥ顼ˤʤΤ˥ѥΤ顼
ˤȤΤϤʤǤ⤷äƤץץδְ㤤Ǥ
ʤΤ 10 Ϳ롣ץץåΩƤʤϤǤ
ζ̤Ĥʤϡص塢0 Ȥ롣

            [n.pragma]  _Pragma() operater

  C99 Ǥϡ#pragma Ʊ̤#pragma Ȱäƥޥˤ
ȤΤǤ _Pragma() operator ɲäޤ
  ޤpragma ³ pp-token  STDC Ǥеꤵ줿ɸεǽ
ξϥޥŸػߤ뤬¾ξϥޥŸоݤȤ
ɤ implementation-defined ȤƤޤ
    : [0,6]

            [e.pragma]  _Pragma() ΰʸƥ

  _Pragma() operator ΰʸƥǤʤФʤޤ
    : [0,2]

        [2.4.10]    #if, #elif, #else, #endif

  #if, #else, #endif  K&R 1st. 褢ΤǤ*
  #if ȤʤϤǤϡn.10.1, n.11.*, n.12.*, n.13.*, e.12.*, e.14.
* ɤǤʤФǤʤ¾¿ΥƥȤ⼺Ԥ뤳Ȥˤʤ
ޤ

  *  ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ
     C99 6.10.1 Conditional inclusion

            [n.10.1]    #elif Ȥ

  Standard C Ǥ #elif ɲäޤˤäơ#if 򲿽Ťˤ
Ȥɤߤˤ򤱤褦ˤʤޤ
  #if ˤϥޥȤȤǤޤޥȤƤʤ
identifier  0 ɾޤ
  ʤʽǤϡ#if 餽б #endif ޤǤ #if section
 #if (#ifdef, #ifndef), #elif, #else, #endif Ƕڤ줿֥å
 #if group ȸƤǤޤ#if, #elif Ԥμ #if ȸƤӤޤ
    : [0,10]

            [n.10.2]    åפ #if group Ǥ pp-token 

  åפ #if group Ǥϡ#if group бطȥ졼뤿
 #if, #ifdef, #ifndef, #elif, #else, #endif Ĵ٤ʳ
preprocessing directive Ͻ줺ޥŸޤ
  tokenization ϹԤޤˡäΥϽᤫ
ޤǥȤ pp-token  sequence Ǥꡢˡ#if 
бطĴ٤뤿ˤϾʤȤ⥳Ȥνɬפǡ/* 
ȵǤ뤳ȤΤ뤿ˤϤ줬ʸƥʸˤ
ΤǤϤʤȤΤʤФʤʤǤ
    : [-6,0]

        [2.4.11]    #if defined

  Standard C Ǥ #if  defined Ȥ黻Ҥߤޤ
#ifdef, #ifndef  #if (#elif) 礹Τǡˤäơ#ifdef 
ŤˤͥȤ줿ɤߤˤ򤱤褦ˤʤޤ

            [n.11.1]    #if defined

  defined 黻Ҥ operand ϼ̻ҤǤ (, ) ǰϤȰ
ޤʤǧƤޤɤ̣Ʊǡoperand 
ȤƤ 1Ǥʤ 0 ɾޤ
    : [0,8]Ĥ #if section ǤʤΤ 2 

            [n.11.2]    defined ñ黻

  defined ϱ黻ҤΣĤǤꡢ1  0 Τɤ餫ͤͿΤǡ
̤򤵤¾μȱ黻뤳ȤǤޤ
    : [0,2]

        [2.4.12]    #if η

  #if ˤĤƤ K&R 1st. ǤȤƤǡη
ϤäꤷƤޤǤC90 Ǥ #if Ǥꡢint 
long ȡunsigned int  unsigned long ƱɽäƤ뤫Τ
˰ȤΤˤޤʤ#if ϤޤƤ
٤ long  unsigned long ɾޤСȡ
ˤϤ٤ L ޤ UL ҤդƤΤƱ褦˰ޤ*
1
  ˡC99 Ǥ #if ηϤ줾νϤκȤޤ
η <stdint.h> Ȥɸإå intmax_t, uintmax_t Ȥ
̾ typedef ޤC99 Ǥ long long ɬܤȤƤΤǡ#if 
η long long ޤϤʾΥȤȤˤʤޤlong long /
unsigned long long ɽˤ LL (ll) / ULL (ull) Ȥ
Ȥޤ*2
  long long / unsigned long long ͤ printf() ɽˤϡ%ll 
 length modifier Ŭ conversion specifier Ȥޤ%lld, %
llu, %llx ˡintmax_t, uintmax_t ͤɽ length modifier  %j
Ǥ%jd, %ju, %jx ˡ*3

  *1  ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ --
    Semantics ̣§
  *2  C99 6.10.1 Conditional inclusion -- Semantics
  *3  C99 7.19.6.1 The fprintf function -- Description

            [n.12.1]    long  #if 

  C90  #if Ǥ long ɾǤʤФʤޤ
  sizeof (long) > sizeof (int) νϤˤ #if  int  unsigned
int ǤɾǤʤΤꡢˤ long ۤä truncate ɾ
Τ⤢ޤܤΥץϸԤå뤿ΤΤǤ
    : [0,6]

            [n.12.2]    unsigned long  #if 

  C90  #if Ǥ unsigned long ɾǤʤФʤޤ
    : [0,4]

            [n.12.3]    ʿ

  #if ǤϣɾǤʤФʤޤK&R 1st. ǤƱͤǤ
long κͤۤ K&R 1st. Ǥ long ͤɾ줿
ΤФơC90 Ǥ unsigned long ɾȤäƤޤ*1
    : [-2,2]ʿǧ뤬ɾꥪСե
Τ 0 ʿǧʤΤ -2 

  *  ANSI C 3.1.3.2 (C90 6.1.3.2) Integer constants 
     C99 6.4.4.1 Integer constants

            [n.12.4]    ʿ

  #if ǤϣɾǤʤФʤޤK&R 1st. ǤƱͤ
long κͤۤ K&R 1st. Ǥ long ͤɾ
ΤФơC90 Ǥ unsigned long ɾȤäƤޤ
    : [-2,2]ʿǧ뤬ɾꥪСե
ꤹΤ 0 ʿǧʤΤ -2 

            [n.12.5]     L, l

  #if Ǥ L, l դȡɾǤʤФʤޤ
K&R 1st. Ǥ long κͤۤʤˤĤƤƱǤץץ
ǤϤҤϤäƤʤƤɾƱǤ
    : [-2,0]

            [n.12.6]     U, u

  #if Ǥ U, u դȡɾǤʤФʤޤ
 K&R 1st. ˤϤʤC90 Ǹǧ줿ˡǤ
    : [0,6]

            [n.12.7]    

  #if ǤοⰷʤФʤޤK&R 1st. λͤǤ
    :  [-4,0]

            [e.12.8]    ȡͤɽǤϰϤˤʤ

  C90 Ǥϡ#if ˸ȡͤ long ޤ unsigned
long ɽǤϰϤˤʤ violation of constraintʿ
顼Ȥʤޤ #if ˤĤľܵꤵƤ뤳ȤǤϤ
󤬡̤ˤĤƤε꤬ꡢ#if 㳰ǤϤʤȹͤ
*
  ʤʸ overflow ˤĤƤϡe.32.5, e.33.2, e.35.2 ǥƥ
ޤ
    : [0,2]

  *  ANSI C 3.4 (C90 6.4) Constant expressions  -- Constraints 
    
     C99 6.6 Constant expressions -- Constraints

            [n.llong]   long long / unsigned long long ɾ

  C99  #if ǤϾʤȤ long long / unsigned long long 
ɾǤʤФʤޤ
  long long κͤۤ unsigned long long ɾޤ
  C99 Ǥ LL, ll, ULL, ull ȤҤɲäޤ*
    : [0,10]
  ĤΥץˤĤơǤФ줾 2 

  *  C99 6.4.4.1 Integer constants
     C99 6.6 Constant expressions -- Constraints

            [e.intmax]  黻η̤ int_max_t ϰϳ

  C99  #if Ǥϡintmax_t, uintmax_t ϰϤۤ
 violation of constraint Ȥʤޤ
    : [0,2] <stdint.h> ʤϥޥŬ˽񤤤Ƥ⤫ޤ


        [2.4.13]    #if α黻

  #if ΰǤ̤٤ȼΤ褦ʰ㤤
Ǥ
  C90 Ǥ int  longunsigned int  unsigned long Ʊɽ
ĤΤ褦ɾ롣C99 Ǥ int, long  intmax_tunsigned int,
unsiged long   uintmax_t ƱɽĤΤ褦ɾ롣
  defined 黻ҤȤ롣
  ޥŸ˻Ĥä identifier Ϥ٤ 0 ɾ롣*1
  ץץǤ keyword ¸ߤʤΤǡkeyword Ʊ̾ iden-
tifier ñʤ identifier Ȥư롣äơ㥹Ȥ sizeof
ϻȤʤ
  ؿƤӽФޱ黻Ҥϡ̤ǤȤޤ
ѿǤϤʤΤǡ󥯥ȡǥȡȤޤ
  n.13 Ǥϰ̤ȶ̤ɾ롼ˤĤƥƥȤޤ
 n.13.5  K&R 1st. ȤѤäȤǡn.13.6  pre-Standard 
#if ǤϤޤޤäȤǡn.13.13, n.13.14  K&R 1st. Ǥ
ǤʤäΤǤ¾ K&R 1st. ޤäѤäƤޤ*2
  ʤ#if  int ͤɾǤʤϤˤĤƤ⤳Υ롼Υ
ȤǤ褦ˡn.13 ǤϤ٤ƾͤȤäƤޤ󡣤ޤ
 defined, >=  n.13 ˽ФƤޤ󤬡¾Τɤ˽ФƤƤޤ

  *1 C++ Standard Ǥ true, false ̰졢줾 1, 0 ɾ
    롣ϥޥǤϤʤ keyword Ǥ뤬ץץǤ
    boolean literal Ȥư뤳ȤˤʤäƤ롣
  *2 ANSI C 3.3 (C90 6.3) Expressions 
     ANSI C 3.4 (C90 6.4) Constant expressions 
     C99 6.5 Expressions
     C99 6.6 Constant expressions

            [n.13.1]    <<, >>

  ӥåȥեȱ黻ϾʤȤ˴ؤƤϡݤϲ⤢ޤ
    : [-2,0]

            [n.13.2]    ^, |, &

  ϤηϰϤˤޤäƤ¤ꡢƱͤΥӥåȥѥ
CPU ϤΤˤ餺ƱʤΤǡ^, |, & Ȥ츫 CPU λ
ͤ˰¸ʱ黻⡢ϰϤǤϤɤνϤǤޤäƱ̤ˤʤ
ޤ
    : [-2,0]

            [n.13.3]    ||, &&

  ǤʤϤϤʤǤ礦
    : [-4,0]

            [n.13.4]    ? :

  ǤʤϤϤʤǤ礦ʤȻפ줿ºݤˤϤʤ
ˡ
    : [-2,0]

            [n.13.5]    <<, >> Ǥ̾λѴϹԤʤ

  ¿Σ黻ҤǤξդη򤽤뤿 usual arithmetic conversion
̾λѴˤԤޤK&R 1st. Ǥϥեȱ黻ҤǤ⤳줬Ԥ
뤳ȤˤʤäƤޤStandard C ǤϹԤʤȤˤʤޤ
դͤϾ˾Ǥ뤳ȡʳɽǤϡ
Ѵ줿ΤǤϥӥåȥѥѤäƤޤäƤΤ狼
ʤʤäƤޤȤͤȡʵǤ礦*
    : [0,2]

  *  ANSI C 3.3.7 (C90 6.3.7) Bitwise shift operators ӥåñ̤Υե
    黻 -- Semantics ̣§
     C99 6.5.7 Bitwise shift operators -- Semantics
    ¿Σ黻Ҥ˴ؤƤϡξդѷǤСФ̾
    λѴԤפȤ񤤤Ƥ뤬<<, >> ˴ؤƤϤ
    ܤʤC89 Rationale 3.3.7 (C99 Rationale 6.5.7) ˤˤĤ
    β⤬롣

            [n.13.6]    ̾λѴˤؤѴ

  黻 *, /, %, +, -, <, >, <=, >=, ==, !=, &, ^, |, ˴ؤƤϡ
ξդη򤽤뤿ᡢξդ operand Ф̾λѴԤ
黻 ? : 裲裳 operand ˤĤƤƱͤǤäơ
ʤǤȡ¾ʤѴ졢ˤʤä
ޤޤ
  ʤ̤Ǥ̾λѴˡ operand  int 
ûǤäϤФ integer promotion ĥˤ
Ԥޤ#if ǤϤ٤Ƥ operand ƱηȤư
Τǡintegral promotion ȯޤ
    : [0,6]ĤΥƥȤ򣱤Ǥ뤴Ȥ 2 
  ɾ§ K&R 1st. ǤƱʤΤǤ뤬Υץ 0U Ȥ
ȡ U ҤȤäƤΤǡK&R 1st. νϤǤϽǤ
ξϡ 0U ʤɾ뽽ʬ礭ͤǡ -
1 ʤѴͤ礭ʤͤǽؤơƥȤ
ľɬפ롣Pre-ANSI νϤǤʤ #if ˡΤ
Τ⤢롣Ѵε§ K&R 1st.  Standard C ƱǤˤ⤫
餺κ [-6,0] ǤϤʤ [0,6] ȤƤΤϡͳ
ˤΤǤ롣

            [n.13.7]    ||, &&, ? : ǤɾǤڤ

  ||, && 黻ҤǤɾޤäƤꡢդɾǷ̤ꤹ
դɾޤ? : Ǥ operand ɾ̤ˤä軰
Τɤ餫ɾ졢¾ɾޤ*
  äơɾʤˤϤȤ 0 ˤäƤ⥨顼
Ϥʤޤ
    : [-6,0]

  *  ? : 黻ҤǤϤ operand 軰 operand Ȥδ֤̾λ
    ѴϹԤ뤳ȤˤʤäƤ롣ɾʤΤѴȤ̯ʤ
    Ǥ롣Ȥ #if ǻȤȡͤɾʤȷ
    ޤʤΤǡʤȸäƤդ̵Ǥ뤬ˤ
    Ƚꤹ뤿ˤϡͤɾ򤨤ʤ0 ˤϤ
    ϤʤΤǤ롣äʤȤǤ롣

            [n.13.8]    ñ黻 -, +, !, ~ Υ롼ײ

  n.13.8  n.13.12 ޤǤ #if Υ롼ײΥƥȤǤ
ϱ黻Ҥ̤ͥȷ絬§˽äƥ롼ײޤ̤
Ǥ̤ͥ˹ʸǷޤʬޤ#if ϥ롼ԥ󥰤
(, ) ʳˤϹʸȤʤȤϤޤn.13.8  n.13.10 
ǤϷ絬§ΥƥȤǡn.13.8 ñ黻 -, +, !, ~ η絬§Υƥ
ȤǤñ黻ҤϤⱦ麸ط礵ޤ
    : [-2,0]

            [n.13.9]    ? : Υ롼ײ

  黻 ? : ϱ麸ط礵ޤ
    : [-2,0]

            [n.13.10]   <<, >> Υ롼ײ

  黻ҤϤ⺸鱦ط礵ޤn.13.10 Ǥ <<, >> Υƥ
Ȥ򤷤ޤ
    : [-2,0]

            [n.13.11]   ̤ͥΰۤʤ黻ҤΥ롼ײΣ

  ñ黻 -, +, ! ȣ黻 *, /, >> Ȥ̤ͥ絬§
ۤʤ黻Ҥδޤޤ뼰ΥƥȤ򤷤ޤ
    : [-2,0]

            [n.13.12]   ̤ͥΰۤʤ黻ҤΥ롼ײΣ

  ñ黻 -, +, ~, ! ȣ黻 -, *, %, >>, &, | ^, ==, !=
黻 ? : ޤवʣʼΥ롼ײΥƥȤ򤷤ޤ
    : [-2,0]


            [n.13.13]   黻ҤŸޥ

  #if ˤϥޥޤळȤǤޤΥޥ̾Ÿ
ΤǤˤĤƤ n.10.1, n.12.1, n_12.2, n.13.7 Υƥ
˴ޤޤƤΤǡǤϤ餿ƥƥȤޤ
  黻ҤŸޥȤΤϿҾʤΤǤϤޤ󤬡Ϥ긶
§ȤƱ黻ҤȤư٤Ǥ礦ISO C 1990 / Amendment 1 Ǥ
<iso646.h> ȤɸإåꤵޤϤĤα黻Ҥ
ޥΤǤ (*)&, |, !, ^, ~ ȤäʸȤʤƤ⥽
񤯤ȤǤ褦ˡȤݤΤ褦Ǥץץ #if
ǤϤΥޥŸʤ顢黻ҤȤưȤޤ
  ¾ #if Υޥ defined Ÿ undefined 
꤬ޤdefined  identifier ʶ路Τ̰ˤʤä
ΤǤ礦[u.1.19] ȡˡ
    : [0,4]

  *  C++ Standard Ǥϡʤ identifier ͱ黻ҤϥޥǤϤ
     token Ǥ롣

            [n.13.14]   ĤΥȡŸޥ

  ĤΥȡŸޥޤ #if ҾʤΤǤϤޤ
󤬡ϤϤꤽΥޥȤŸ˾ɾ٤
礦
    : [0,2]

        [2.4.14]    #if Υ顼

  e.14.1  e.14.10 ޤǤ #if Ǥ violation of syntax rule 
violation of constraint ΥƥȤǤϤϤΤɤ줫Ĥޤह
٤ƤΥФơǥåФɬפޤ*

  *  ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ
     ANSI C 3.4 (C90 6.4) Constant expressions 
     C99 6.10.1 Conditional inclusion
     C99 6.6 Constant expressions

            [e.14.1]    ʸƥ

  #if Ǥꡢݥ󥿤ϻȤʤΤǡʸƥϻȤ
ޤ
    : [0,2]

            [e.14.2]    黻 =, ++, --, . 

  #if ǤΤǡѤı黻ҤѿϻȤޤA --B
 A - -B Ȥϰä violation of constraint Ǥ
    : [0,4]ĤΥץΤǤǤʤΤУ
 2 İʾ夢 0 

            [e.14.3]    뤷ʤ

  黻Ҥ operand ʤäꡢäбȤʤä
Τϡ violation of syntax rule Ǥ
    : [0,2]

            [e.14.4]    #if defined Υå

  #if Ԥ defined Ȥ黻Ҥΰ (, ) ǰϤǤϤޤʤƤ⤫
ޤ󤬡åΤ violation of constraint Ǥ
    : [0,2]

            [e.14.5]    ʤ

  #if ǼʤΤϤ violation of syntax rule Ǥ
    : [0,2]

            [e.14.6]    ޥŸȼʤʤ

  ޥȤƤʤ identifier  0 ɾޤޥ
ŸȲʤʤäƤޤ #if ԤΰϤ violation of
syntax rule Ǥ
    : [0,2]

            [e.14.7]    Keyword ǧʤsizeof

  sizeof Ȥ pp-token ϥץץǤñʤ identifier Ȥư
졢#if ǤϡޥȤƤʤ 0 ɾޤint
Ȥ pp-token ƱͤǤäơsizeof (int)  0 (0) Ȥʤꡢ
violation of syntax rule Ȥʤޤ
    : [0,2]

            [e.14.8]    Keyword ǧʤ̾

  e.14.7 Ʊͤˡ(int)0x8000  (0)0x8000 ȤʤꡢϤ violation of
syntax rule Ȥʤޤ
    : [0,2]

            [e.14.9]    0 ˤ

   e.14.9 ȼ e.14.10 ˤĤƤϡǥåФ٤ɤ
Ĥβ;Ϥꡢ꤬ޤǤʽˤϼΤ褦
꤬ޤ

ANSI C 3.4 (C90 6.4) Constant expressions  -- Constraint 
C99 6.6 Constant expressions -- Constraint
      Each constant expression shall evaluate to a constant that is in
    the range of representable values for its type.
      ɾ̤ϡηɽǽͤϰˤǤ
    Фʤʤ

  εŬϰϤ餫ǤϤޤ󤬡ʤȤɬפʤ
ˤŬѤ뤳ȤϼǤ#if ϤǤʤФʤ
󡣤¾ǼΤ褦ʵ⤢ޤ

ANCI C 3.3.5 (C90 6.3.5) Multiplicative operators 黻 --
    Semantics ̣§
C99 6.5.5 Multiplicative operators -- Semantics
    if the value of the second operand is zero, the behavior is
    undefined.
    2ڥɤͤ0ξ硢ư̤Ȥ롣
ANSI C 3.1.2.5 (C90 6.1.2.5) Types 
C99 6.2.5 Types
    A computation involving unsigned operands can never overflow,
    ̵ڥɤޤ׻ϡ褷ƥСեʤ

  0 ˤʤ黻ǤϡɤεŬѤ٤Ǥ礦
ɤβ⤢ꤦ褦˻פޤ
  ǤϤ᤹뤳Ȥˤޤݡ׵ᤵȤ
 0 ˤޤơηϰϤˤޤʤ̤Ȥʤϸ§
ȤƿǥåФʤФʤʤݡݡǤ̤ˤ
ȤΤϥץδְ㤤ͤ줺ϼ¹ԻǤϤʤ
ѥɾΤʤΤǡ˿ǥåФΤ
פ뤫Ǥޤ0 ˤ㳰ΤԼǤ
̵黻η̤ϰϳȤʤˤĤƤϵΤޤ
ŤˤʤΤǡˤϴޤ᤺undefined Ȳ᤹뤳Ȥˤޤ
  ISO 9899:1990 / Corrigendum 1 ǤϡViolation of syntax rule or
constraint СȤ¾ΤȤ undefined or implementation-
defined Ū˵ꤵƤƤ⡢ϤϿǥåФʤ
ʤʤפȤ꤬ɲäޤ C99 ˤѤƤޤ
*
    : [0,2]

  *  C99 5.1.1.3 Diagnostics

            [e.14.10]   黻η̤ɽǤϰϤˤʤ

  C90 Ǥϡ#if ͤ long / unsigned long ɽǤϰϤˤʤ
ʤޤ
    : [0,4]ĤΥƥȤ򤹤٤ǤǤ 4 Ĥ
ǤǤ 2 İʲǤǤʤ 0 

        [2.4.15]    #ifdef, #ifndef

  n.15  #ifdef, #ifndef ˴ؤƥȤǤ K&R 1st. Ǥ
Standard C ǤޤäƱǤe.15 Ϥ violation of syntax rule 
ƥȤǤ*

  *  ANSI C 3.8 (C90 6.8) Preprocessing directives  -- Syntax
    ʸ§
     ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ
     C99 6.10 Preprocessing directives -- Syntax
     C99 6.10.1 Conditional inclusion

            [n.15.1]    #ifdef ˤޥΥƥ

    : [-6,0]

            [n.15.2]    #ifndef ˤޥΥƥ

    : [-6,0]

            [e.15.3]    ̻ҤǤʤ

  #ifdef, #ifndef Ԥΰ identifier ǤʤФʤޤ
    : [0,2]

            [e.15.4]    ;פʰ

  #ifdef, #ifndef Ԥΰ identifier ʳ;פʥȡ󤬤äƤϤ
ޤ
    : [0,2]

            [e.15.5]    ʤ

  ʤΤ⡢ violation of syntax rule Ǥ
    : [0,2]

        [2.4.16]    #else, #endif Υ顼

   #else, #endif  violation of syntax rule ΥƥȤǤ
syntax  K&R 1st. ѤäƤޤʤviolation of syntax
rule or constraint ФƿǥåФʤФʤʤȤ
ϡStandard C ǽƵꤵ줿ȤǤˡ*

  *  ANSI C 3.8 (C90 6.8) Preprocessing directives  -- Syntax
    ʸ§
     C99 6.10 Preprocessing directives -- Syntax

            [e.16.1]    #else ;פʥȡ󤬤

  #else ιԤˤ¾Τɤʥȡ⤢äƤϤޤ
    : [0,2]

            [e.16.2]    #endif ;פʥȡ󤬤

  #endif ιԤˤ¾Τɤʥȡ󤬤äƤ⤤ޤ

#if     MACRO
#else   ! MACRO
#endif  MACRO

ǤϤʤ

#if     MACRO
#else   /* ! MACRO  */
#endif  /* MACRO    */

Ƚ񤭤ޤ礦
    : [0,2]

        [2.4.17]    #if, #elif, #else, #endif бطΥ顼

   #if (#ifdef, #ifndef), #elif, #else, #endif б˴ؤ
violation of syntax rule ΥƥȤǤ syntax ۤ K&R 1st. 
ƱǤ#elif  Standard C ǿä줿ΤǤޤ
бϥեñ̤ΩäƤʤФʤʤȤϡK&R
1st. ǤΤǤϤʤäȤǤ

  *  ANSI C 3.8 (C90 6.8) Preprocessing directives  -- Syntax
    ʸ§
     C99 6.10 Preprocessing directives -- Syntax

            [e.17.1]    #if Τʤ #endif

  Ԥ #if ʤΤ #endif ФƤΤϡ violation of
syntax rule Ǥ
    : [0,2]

            [e.17.2]    #if Τʤ #else

  б #if Τʤ #else ְ㤤Ǥ
    : [0,2]

            [e.17.3]    #else θˤޤ #else

  #else θˤޤ #else ФƤΤ⡢󤤤ޤ
    : [0,2]

            [e.17.4]    #else θ #elif

  #else θ #elif ФƤƤ⤤ޤ
    : [0,2]

            [e.17.5]    󥯥롼ɤ줿ե #if Τʤ #endif

  #if, #else, #endif ϥեpreprocessing fileñ̤б
ȤƤʤФʤޤ󡣥󥯥롼ɤ줿ե뤬ᤫ
鸵եˤäΤ褦˰ȽбȤ롢ȤΤǤ
Ǥ
    : [0,2]

            [e.17.6]    󥯥롼ɤ줿ե #endif Τʤ #if

    : [0,2]

            [e.17.7]    #endif Τʤ #if

  #endif ˺뤳Ȥϼºݤˤ褯ޤϤϤФ
ƿǥåФʤФʤޤ
    : [0,2]

        [2.4.18]    #define

  #define  syntax  K&R 1st. Ф C90 Ǥ #, ## 黻Ҥɲä
ޤȤѤäƤޤ*1
  C99 ǤϤ˲Ѱޥɲäޤ[1.8] ȡˡ*2
  #define ǤʤΤǤϣåץץåȤϸޤ󤬡ξ n.
18.*, e.18.* 碌 -60 Ȥʤۤ¾ΥƥȤǤޥȤ
Τǡ˸뤳Ȥˤʤޤ

  *1  ANSI C 3.8 (C90 6.8) Preprocessing directives  -- Syntax
    ʸ§
      ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ
  *2  C99 6.10 Preprocessing directives -- Syntax
      C99 6.10.3 Macro replacement

            [n.18.1]    Object-like ޥ

  #define ԤκǽΥȡϥޥ̾Ǥľ white spaces 
ȡ裲Υȡ ( ǤäƤ⡢ִꥹȤγϤȤߤʤ졢
function-like ޥȤϤߤʤޤ󡣤ޤޥ̾θ˲
󤬤ʤСΥޥϣĤΥȡޤ
    : [-30,0]ĤΥޥΤΣĤǤʤ -
20 

            [n.18.2]    Function-like ޥ

  ޥ̾ľ white spaces Ϥޤ ( ȡ function-
like ޥΥѥ᡼ꥹȤγϤȤߤʤޤε K&R 1st.
ΤΤǡwhite spaces ̵ͭ˺ character-oriented ʥץ
ץκפĤäƤޤޤȤʤäƤϤɤ褦⤢ޤ
    : [-20,0]

            [n.18.3]    ʸƥִоݤˤʤʤ

   "Reiser" model ΥץץåǤϡִꥹʸ
ޤʸ˥ѥ᡼Ʊڥ뤬ȡʬޥ
Ÿˤäư֤ޤ Standard C Ϥ
K&R 1st. ǤǧƤʤäΤǤִ character-
oriented ʥץץħ褯ͤǤtoken-oriented ʥץ
ץǤǤ
    : [-10,0]

            [n.vargs]   Ѹİޥ

  C99 ǤϲѸİޥƳޤ
    : [0,10]

            [e.18.4]    ̾ʤ

  #define ԤκǽΥȡϤ identifier ǤʤФʤޤ
    : [0,2]

            [e.18.5]    ʤ

  #define Ԥ˥ȡ󤬣ĤʤΤ violation of syntax rule Ǥ
    : [0,2]

            [e.18.6]    Υѥ᡼

  Υѥ᡼ violation of syntax rule Ǥ*
    : [0,2]

  *  ANSI C 3.5.4 (C90 6.5.4) Declarators  -- Syntax ʸ§
     C99 6.7.5 Declarators -- Syntax

            [e.18.7]    ѥ᡼̾νʣ

  ĤΥޥΥѥ᡼ꥹȤƱѥ᡼̾ʣΤ
violation of constraint Ǥ*
    : [0,2]

  *  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Constraints 
     C99 6.10.3 Macro replacement -- Constraints

            [e.18.8]    ѥ᡼̻ҤǤϤʤ

  ޥΥѥ᡼ identifier ǤʤФʤޤ*
    : [0,2]

  *  C99 Ǥ ... Ȥѥ᡼ɲä줿ִꥹ
    __VA_ARGS__ Ϥбüʥѥ᡼̾Ǥ롣

            [e.18.9]    ޥִ̾ꥹȤüȤ߹碌

  Standard C Ǥ identifier ʸȤ $ ǧƤޤ󤬡
ǧͭϤʽϤŪ¸ߤƤޤΥץϤ
ǥѥ뤵륽˸ΤΤǤ Standard C 
 $ ʸǣĤ pp-token ȲᤵΤǡޥ̾ THIS  $ 
ߤ object-like ޥִꥹȤȤʤꡢTHIS$AND$THAT Ȥ̾
function-like ޥȤץΰտޤȤϤޤää̤ˤʤ

  ISO 9899:1990  Corrigendum 1 Ǥϡ˴ؤ㳰Ū꤬
äޤФƤ Standard C ϿǥåФʤ
ʤʤΤǤ*1
  C99 ǤϤäơ̤ object-like macro Ǥϡޥ̾
ִꥹȤδ֤ white spaces ʤФʤʤȤޤ*2
    : [0,2]

  *1  Corrigendum 1 ˤ C90 6.8  Constraints ؤɲá
    C++ Standard ǤϤεϾäƤ롣
  *2  C99 6.10.3 Macro replacement -- Constraints

            [e.vargs1]  ִꥹȤǤϤʤȤ __VA_ARGS__

  C99 βѰޥǤϡޥΥѥ᡼ꥹ ... 
ѥ᡼ȤִꥹǤ __VA_ARGS__ Ȥޤ
identifier ϤʳΤȤ˻ȤäƤϤޤ
    : [0,2]ĤΥץǤǤ 2 ĤǤ 0


        [2.4.19]    ޥκ

  ޥκˤĤƤ K&R 1st. Ǥϲ⿨Ƥ餺ޤ
ޤǤStandard C ǤϡƱϵ뤬ۤʤ
ǧʤȤˤʤޤޥϻ¾塢ʤȤˤʤ
#undef Ǥääʤ¤ˡ*1, *2

  *1  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Constraints 
     C99 6.10.3 Macro replacement -- Constraints
  *2  ˥󥰤ФǺǧϤ¿MCPP
    ¸νϤȤθߴΤᡢV.2.4 Ϥ

            [n.19.1]    ִꥹȤ white spaces ΰ㤤

  White spaces οäƤϵޤ
    : [0,4]

            [n.19.2]    ѥ᡼ꥹ white spaces ΰ㤤
                        Ԥޤ white spaces ΰ㤤

  White spaces ˤϡ<backslash><newline> sequence 䥳Ȥˤäƥ
ԤޤΤޤޤޤ
    : [0,4]

            [e.19.3]    ִꥹȤΥȡ󤬰㤦

  ִꥹȤΥȡ󤬰ۤʤ violation of constraint Ǥ
    : [0,4]

            [e.19.4]    ִꥹ white space ̵ͭ㤦

  ִꥹ white space ̵ͭۤʤ violation of
constraint Ǥˤ character-oriented ʥץץοĤ
Ƥޤ
    : [0,4]

            [e.19.5]    ѥ᡼λȤ㤦

  ѥ᡼λȤΰ㤦ϼ¼ŪˤۤʤʤΤǡviolation
of constraint Ǥ
    : [0,4]

            [e.19.6]    ѥ᡼̾㤦

  ѥ᡼̾㤦μ¼ŪƱ violation of constraint
Ȥʤޤ constraint Ȼפޤ
    : [0,2]

            [e.19.7]    Function-like, object-like ޥ̾ζ

  ޥ̾ϰĤ֤̾°Τǡfunction-like ޥ object-
like ޥȤƱ̾ȤȤϤǤޤ
    : [0,2]

        [2.4.20]    Keyword Ʊ̾Υޥ

  ץץǤ keyword ¸ߤʤΤǡkeyword Ʊ̾ identifier
ޥȤŸ뤳ȤǤޤ*

  *  ANSI C 3.1 (C90 6.1) Lexical elements  -- Syntax ʸ§
     C99 6.4 Lexical elements -- Syntax
     C89 Rationale 3.8.3 (C99 Rationale 6.10.3) Macro replacement

            [n.20.1]    ̾Ϥ٤ŸоݤȤʤ

    : [0,6]

        [2.4.21]    Pp-token ʬΥפޥŸ

  ե pp-token ؤʬ translation phase 3 ǹԤޤ
ơΤȤʣ pp-token Ĥ pp-token Ϣ뤵Ȥ
Τϡ## 黻ҤȤä줿ޥŸϢ뤵硢# 黻
ҤȤä줿ޥŸʸ󲽤硢ܤʸ
ƥ뤬Ϣ뤵礷ꤵƤޤ󡣤äơʣ pp-
token ۤΤϢ뤵뤳ȤϡäƤϤʤʤȤȲᤵ
 token-oriented ʥץץθ§餹ȡΤȤǤ
*

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ
     C99 5.1.1.2 Translation phases
     C99 6.10.3 Macro replacement

            [n.21.1]    Pp-token ۤΤϢ뤵뤳ȤϤʤ

  ץץΩץǹԤϡΥץνϤ
Ĥ - Ĥ̡ pp-token Ǥ뤳ȤѥΤˤ狼褦
ˡ򲿤餫 token separator ʬΥϤɬפޤ
    : [0,6]

        [2.4.22]    Pp-number Υޥ sequence

  Preprocessing-number  Standard C ǽƵꤵ줿ΤǤ
ȡưȡ碌ΤϰϤiden-
tifier ʬޤळȤ⤢ޤץץǤ tokenization 
ñˤ뤿˵ꤵ줿ΤǤޥʬ pp-number 
硢ñ tokenization 򤽤̤ˤʤȡְ㤤
ޤ*

  *  ANSI C 3.1.8 (C90 6.1.8) Preprocessing numbers 
     C99 6.4.8 Preprocessing numbers

            [n.22.1]    Pp-number Υޥ sequenceΣ

  12E+EXP Ȥ sequence ϣĤ pp-number ʤΤǡȤ EXP Ȥ
ƤƤ⡢Ÿ뤳ȤϤޤ
    : [0,4]

            [n.22.2]    Pp-number Υޥ sequenceΣ

  Pp-number  digit ޤ . ǻϤޤޤ
    : [0,2]

            [n.22.3]    Pp-number γΥޥŸ

  C90 Ǥϡ+ ޤ -  E ޤ e ˤ³ pp-number 
뤳ȤǤޤ12+EXP  12E+EXP Ȱ㤤12 + EXP ȤĤ pp-
token ʬ򤵤ޤϤ줾 pp-number, operator, identifier
ǤEXP ޥǤСŸޤ
    : [0,2]

            [n.ppnum]   [Pp][+-]  sequence

  C99 Ǥϡư򣱣ʤɽ뤿ˡpp-number  P ޤ
 p  + ޤ - ³ sequence ɲäޤ
  ʤprintf() ư򣱣ʤɽˤ %a, %A Ȥ
conversion specifier Ȥޤ*
    : [0,4]

  *  C99 7.19.6.1 The fprintf function -- Description

        [2.4.23]    ## 黻ҤȤäޥ

  ##  Standard C ǿ줿黻Ҥǡ#define Ԥִꥹ
Ȥޤ##  pp-token ϥޥŸϢ뤵ƣĤ pp-
token Ȥʤޤ##  pp-token ѥ᡼ξϡޥŸ
˼°֤ƤϢ뤵ޤ*

  *  ANSI C 3.8.3.3 (C90 6.8.3.3) The ## operator ##黻
     C99 6.10.3.3 The ## operator

            [n.23.1]    ȡϢ

  ## 黻ҤȤäǤñ function-like ޥǤ
    : [0,6]

            [n.23.2]    Pp-number 

  ## 黻Ҥ operand ϥޥŸʤΤǡ xglue() Τ褦
ˤ⤦Ĥΰ츫̣ʤʥޥ򤫤֤ƻȤȤФйԤ
ޤϰΥޥŸƤϢ뤹뤿ǤΥץ
ΥޥƤӽФ줿 12e+2 Ȥ sequence ͭ pp-number 

    : [0,2]

            [e.23.3]    ## ˥ȡ󤬤ʤobject-like ޥ

  ִꥹ ## 黻Ҥˤɬ pp-token ʤФʤ
󡣤 object-like ޥǤObject-like ޥ ## Ȥ
Ȥ̵̣ǤǤϥ顼ǤϤޤ
    : [0,2]

            [e.23.4]    ## ˥ȡ󤬤ʤfunction-like ޥ

   function-like ޥִꥹ ## 黻Ҥ pp-
token ΤʤǤ
    : [0,2]

        [2.4.24]    # 黻ҤȤäޥ

  # 黻Ҥ Standard C Ƴ줿ΤǤFunction-like ޥ
 #define ԤִꥹȤǤȤޤ# 黻Ҥ operand ϥѥ
ǡΥޥŸб°ʸƥѴޤ
*

  *  ANSI C 3.8.3.2 (C90 6.8.3.2) The # operator #黻
     C99 6.10.3.2 The # operator

            [n.24.1]    ʸ

  # 黻Ҥ operand бξü "  " ǰϤޤʸ󲽤
ޤ
    : [0,6]"a + b" ȥȡ֤ space Τ 2 

            [n.24.2]    ȡ֤ white spaces ΰ

  # 黻Ҥ operand бʣ pp-token  sequence 
ΩäƤϡ pp-token ֤ white spaces  a space Ѵ
Ƥʸ󲽤졢white spaces ʤ space ޤ
ʤwhite spaces οˤϱƶʤΤΡ̵ͭˤäƷ
äƤޤʤ character-oriented ʥץץοĤäƤ
ˡ white spaces Ϻޤ
    : [0,4]

            [n.24.3]    \ 

  # 黻Ҥ operand бʸƥޤʸ
ϡˤ \, " ʸƥϤ " ʸľ
 \ ޤʸƥʸ򤽤Τޤޤηɽ
뤿ʸƥˡƱǤ
    : [0,6]

            [n.24.4]    <backslash><newline> ޤޥƤӽФ

  <backslash><newline>  sequence  translation phase 2 Ǻޤ
顢ޥŸˤϻĤäƤޤ
    : [0,2]

            [e.24.5]    # 黻Ҥ operand ѥ᡼̾Ǥʤ

  # 黻Ҥ operand ϥѥ᡼̾ǤʤФʤޤ
    : [0,2]

        [2.4.25]    ޥΥޥŸ

  Function-like ޥθƤӽФ˺ݤơ˥ޥޤޤƤ
ˤ򤤤Ÿ뤫ˤĤƤϡK&R 1st. ǤϿƤޤǤ
Pre-ANSI νϤǤμޤޤä褦ǤִꥹȤκ
ŸΤ¿ä⤷ޤStandard C ǤϤϡ
Ʊꤷȡѥ᡼֤Ÿȵꤵޤؿ
ƤӽФǤΰɾƱͤνǡ狼䤹ʤޤ
 #, ## 黻Ҥ operand Ǥѥ᡼бΤξϡ
˥ޥ̾ޤޤƤƤ⡢ϥޥƤӽФȤϤߤʤ줺Ÿ
ޤ

  *  ANSI C 3.8.3.1 (C90 6.8.3.1) Argument substitution °ִ
     C99 6.10.3.1 Argument substitution

            [n.25.1]    ΥޥŸ

  ΥޥϡƱꤵ줿ȤŸ졢줫ִꥹ
Υѥ᡼֤ޤäơĤΰȤƱꤵ줿
ΤϡȤŸʣΰΤ褦ʷˤʤäƤ⣱ĤΰǤ
    : [0,4]

            [n.25.2]    ĤΥȡŸ

  ƱͤˡŸȣĤΥȡˤʤäƤޤ⡢ˡŪʤΤǤ
    : [0,2]

            [n.25.3]    ## 黻ҤȤޥǸƤӽФ

  ## 黻Ҥ operand ѥ᡼ξ硢бϥޥŸ
ʤΤǡޥŸϤ⤦ĤΥޥͥȤɬפ
ޤ
  Ǥϡxglue()  ## 黻ҤȤäƤʤΤǡΰǤ
glue( a, b) ϥޥŸ ab Ȥʤꡢxglue() ִꥹȤ glue
( ab, c) Ȥʤޤ줬 abc ǽ̤Ȥʤޤ
    : [0,2]

            [n.25.4]    ## 黻Ҥ operand Ÿʤ

   glue() ľܸƤӽФƤΤǡΰ˥ޥ̾ä
Ÿޤ
    : [0,6]

            [n.25.5]    # 黻Ҥ operand Ÿʤ

  # 黻Ҥ operand Ǥѥ᡼б⡢ޥŸ

    : [0,4]

            [e.25.6]    ΥޥŸϰϤǴ뤷ʤ

  ΥޥŸϤΰǹԤޤ뤷ʤޥ
violation of constraint ǤFunction-like ޥ̾ϤǤϥ
ƤӽФǤϤޤ󤬡 ( ³ȡ줬ޥƤӽФ
sequence γϤȤʤޤϤ줿Ǹ塢 ( б ) ʤ
Фʤޤ*
    : [0,4]

  *  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Constraint 
     C99 6.10.3 Macro replacement -- Constraints

        [2.4.26]    ޥƱ̾ޥ

  ޥƵŪˤʤäƤ硢Υޥ򤽤ΤޤŸƤ椯
̵ºƵˤʤäƤޤޤΤᡢK&R 1st. ǤϺƵŪʥޥȤ
ȤǤޤǤStandard C Ǥ̵ºƵɤʤƵŪޥ
Ÿǽˤ뤿ᡢִޥ̾ϺִʤȤ꤬
ޤεϤʤǤΤ褦˥ѥե졼Ǥޤ
*1
  ޥ A ִꥹȤκˤޤ A Ȥ̾ĤäƤ⡢
Ϻִʤ
  ޥ A ִꥹ˥ޥ B θƤӽФꡢޥ B 
 A Ȥ̾ФƤͥȤ줿ִξ⡢ A Ϻ
ʤ
  ޥ B ִǸΥޥ A ִꥹȤθΥȡ
󤬼ޤ줿ϡμޤ줿ʬˤ A ִ롣
ִΤϡ A ʲ餫ΥޥִꥹǤϤʤ˥
ˤ˸¤롣
  ޥ B ִˤĤƤ⡢飳ƵŪŬѤ롣ʤ
ޥ B ִˤޤ B 졢줬 B ִꥹȤθ
ΥȡˤΤǤʤС B Ϻִʤ
  Υޥ A θƤӽФΰ˥ޥ C θƤӽФꡢ
˸줿 C 飳ŬѤƺִػߤ줿硢 C ϸ
ޥ A ִꥹȤκǤִʤ

  ѥե졼ƤޤǤȤˣϡ³Υȡ
ߤȤŪʥޥͤͳ褹Τǡ줬̵
ѻˤƤޤˤĤƤϵʤ corrigendum Ф
ꤷƤƤޤ󤬤餬Ǥޤ³ȡ󤬥
ˤȤǤʤȤŸˡѤȤΤ⡢
ʤͤǤ*2
  ³ȡޥŸȤΤ۾ʤΤǤˡ
ʬˤäִػߤ줿ޥٸȤΤŤ˰۾
ʥǤ Validation Suite ˤϡŤ˰۾ʥޥˤĤ
ΥƥȹܤϤޤ󡣡ָ³ȡμߡפȤޥŸ
۾ʵ꤬뤳Ȥ򡢴ԤȻפޤ*3

  *1  ANSI C 3.8.3.4 (C90 6.8.3.4) Rescanning and further replacement 
    Ⱥִ
    C99 6.10.3.4 Rescanning and further replacement
  *2 [1.7.6] ȡ
  *3 ƵŪޥŸ˴ؤ뵬ʤλͤˤĤƤϡˣ̤β᤬
    ꡢnewsgroup comp.std.c 褬󤫹ԤƤ롣recurs.t Ϥ
    ǺΣĤǤ롣recurs.t ΥȤ򻲾Ȥ줿
    ץɾоݤȤϤʤ
    V.2.4.1 ʹߤ MCPP  Standard ⡼ɤǤϡƵŪޥŸˤĤ
    ƤĤˡƤ롣ǥեȤǤƱ̾ޥִػߤ
    Ϥ嵭 1-5 ΤȤ깭ȤꡢΥץ NIL(42) Ÿ
    롣-c ץꤹȺִػߤϰϤ򶹤Ȥꡢ42 Ÿ
    롣λͤΰ㤤ФƤΤϡ嵭 3 Ǵؿޥ A θƤӽ
    Ⱦʬ B ִꥹ˸Ǥ롣ǥեȤǤϡA
    ̾ B ִꥹ˸줿 A κִػߤ뤬-c
    ץǤϡA ̾ǤʤꥹȤȤϤ '('  ')'
    Τ٤Ƥ B ִꥹ˸줿ִػߤ롣ޤ
    A ̾ˤ뤫ɤǶ̤ʤ

            [n.26.1]    ľܺƵ object-like ޥϺŸʤ

   object-like ޥľܺƵǤ
    : [0,2]

            [n.26.2]    ܺƵ object-like ޥŸʤ

  Object-like ޥδܺƵǤ
    : [0,2]

            [n.26.3]    ľܺƵ function-like ޥŸʤ

  Function-like ޥľܺƵǤ
    : [0,2]

            [n.26.4]    ܺƵ function-like ޥŸʤ

  Function-like ޥδܺƵǤ
    : [0,2]

            [n.26.5]    κƵŪޥ

  Standard C ˤϡְٺִػߤ줿ޥϡ̤ʸ̮Ǻ
ƤִʤפȤ̣ʵ꤬ޤŪˤ˳
ΤϰΥޥοƥޥΰǤ˺ƵŪޥ
äϡ٤ִޤ󤬡ϿƥޥκǤִ
ޤ
    : [0,2]

        [2.4.27]    ޥκ

  ޥִꥹȤΤ K&R 1st. λͤǤ
ȯ줿ޥϺƵŪޥǤʤ¤ꡢִޤˤäơ
ͥȤ줿ޥޤStandard C Ǥäѹä
ǤϤޤ󤬡K&R 1st. ǤΤǤʤäȤ餫Τˤ
äƤޤ*

  *  ANSI C 3.8.3.4 (C90 6.8.3.4) Rescanning and further replacement 
    Ⱥִ
     C99 6.10.3.4 Rescanning and further replacement

            [n.27.1]    Object-like ޥΥͥ

   K&R 1st. ǤƱǤ
    : [-6,0]

            [n.27.2]    Function-like ޥΥͥ

   K&R 1st. ǤƱǤ
    : [-4,0]

            [n.27.3]    ## 黻Ҥ줿̾ŸоݤȤʤ

  ## 黻Ҥ operand бϥޥŸޤ󤬡pp-token
Ϣˤä줿 pp-token ϡ˥ޥŸоݤ
ʤޤ
    : [0,2]

            [n.27.4]    ִꥹ˷줿 function-like ޥ

  Function-like ޥ̾ФƤƤ⡢ ( ³Ƥʤϡ
ϥޥƤӽФȤϤߤʤޤ󡣰 function-like ޥ
̾졢ִꥹˤ̾Ȥä function-like ޥθ
ӽФȡŸޤ
    : [0,6]

            [n.27.5]    Function-like ޥȾִꥹ

  ִꥹȤ function-like ޥθƤӽФȾȤ۾
ʥޥϡpre-Standard ǤϰۤλͤǤStandard C Ǥϸǧ
ƤޤޤִꥹȤθ pp-token 󤬼ޤơޥƤ
Ф뤷ޤ
    : [0,2]

            [e.27.6]    ˰οʤ

  Function-like ޥθƤӽФǤϰοѥ᡼οȰפƤ
ʤФʤޤ󤬡ִꥹȤκȯ줿 function-like 
Ǥ⡢ƱͤǤ , ǶڤΤʤΤǡ
åʥޥǤϰοľŪˤ狼ˤȤޤ
    : [0,2]

        [2.4.28]    ޥ

  C90 ǤϣĤüʥޥϤ뤳Ȥˤʤޤ*1
   C90 / Amendment 1 Ǥϡ__STDC_VERSION__ Ȥޥɲä
ޤ
  __FILE__, __LINE__ ưŪѲƤ椯üʥޥ
assert() ޥǥХåѥġǤλȤƻޤ¾ɸ
ޥϣĤ translation unit νѲޤ

  *1  ANSI C 3.8.8 (C90 6.8.8) Predefined macro names 餫
    ޥ̾
  *2  C99 6.10.8 Predefined macro names

            [n.28.1]    __FILE__
  ץץΥե̾ɽʸƥޤ#
include ˤäƼޤ줿եǤϤΥե̾ˤʤΤǡ
Ʊ translation unit ǤѲޤ
    : [0,4]"n_28.t" ȤʸƥǤʤ n_28.t Ȥäñ
̾ˤʤΤ 0 

            [n.28.2]    __LINE__

  ץץΥեιֹɽޤ
ֹϣϤޤޤ
    : [0,4]ֹ椬ϤޤΤ 2 

            [n.28.3]    __DATE__

  ץץιԤƤդɽʸƥޤ
asctime() ؿΤȤۤƱ "Mmm dd yyyy" ηǤ 10
̤ξ dd Σܤ 0 ǤϤʤ space ˤʤȤäƤ

    : [0,4]10 ̤ξ dd Σܤ 0 ȤʤΤ 2 

            [n.28.4]    __TIME__

  ץץιԤƤɽʸƥޤ
asctime() ؿΤƱ "hh:mm:ss" ηǤ
    : [0,4]

            [n.28.5]    __STDC__

  C90, C99 νϤǤ 1 ޤ
    : [0,4]

            [n.28.6]    __STDC_VERSION__

  C90 / Amendment 1:1995 бϤǤϡ줬 199409L 
ޤ*1
    : [0,4]

  *1  Amendment 1 / 3.3 Version macroISO 9899:1990 / 6.8.8 ؤɲá

            [n.stdmac]  C99 λޥ

  C99 Ǥ __STDC_VERSION__ ͤ 199901L Ǥ
  ޤ__STDC_HOSTED__ ȤޥɲäޤϽ
Ϥ hosted implementation Ǥ 1 ˡǤʤ 0 

    : [0,4] 2 

            [n.28.7]    󥯥롼ɤ줿ե __LINE__ 

  __FILE__, __LINE__  translation unit ǤϤʤեоݤ
Τǡinclude 줿ǤϤ include ե̾ȹֹ
ˤʤޤ
    : [0,4]ֹ椬ϤޤΤ 2 

        [2.4.29]    #undef

  #undef  K&R 1st. Τǡ礭ѲϤޤ󡣻ꤵ줿ޥ
äޤޥƱ translation unit ǡ#define
Ƥ #undef ǼäޤǤδ֤ͭϰϤǤ*

  *  ANSI C 3.8.3.5 (C90 6.8.3.5) Scope of macro definitions ޥ
    ͭϰ
     C99 6.10.3.5 Scope of macro definitions

            [n.29.1]    #undef ˤޥμä

  #undef 줿ǤϤΥޥ̾ϤϤޥǤϤޤ
    : [-10,0]

            [n.29.2]    Ƥʤޥ #undef

  ޥȤƤʤ̾ #undef 뤳ȤϵƤޤ
ϤϤ򥨥顼ˤƤϤޤ
    : [0,4]

            [e.29.3]    ̾ʤ

  #undef Ԥˤ identifier ɬפǤ
    : [0,2]

            [e.29.4]    ;פʥȡ󤬤

  #undef ԤˤϣĤ identifier ʳΤΤäƤϤޤ
    : [0,2]

            [e.29.5]    ʤ

  #undef Ԥ˰ʤΤ violation of syntax rule Ǥ
    : [0,2]

        [2.4.30]    ޥƤӽФ

  ޥƤӽФ˺ݤƤϡԤñʤ white spaces ΣĤȤư
ޤäơޥƤӽФʣιԤˤޤ뤳ȤǤޤ
 K&R 1st. ǤΤǤϤޤǤ*
  ؿͥޥƤӽФΰȤΤ , Ƕڤ줿ΤǤ
(  ) ΥڥäƤ , ϰڤΤȤϤߤʤޤ󡣤
ΤȤϤǤľܤϥƥȤޤ󤬡n.25 ᡢǰۤΤ
˥ƥȤƤޤޤ*.c Υץ¿ assert() ޥ
äƤΤǡ˴ؤƤϤʤʣʥƥȤ뤳Ȥˤʤޤ

  *  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Semantics ̣§
     C99 6.10.3 Macro replacement -- Semantics

            [n.30.1]    ޥƤӽФʣԤˤޤ뤳ȤǤ

    : [0,6]

            [n.nularg]  ޥƤӽФΥ

  C99 ǤϥޥƤӽФǥǧޤϰβᾯȤ
ۤʤޤʬΥ ',' ϾάǤޤʥѥ᡼Ĥξ
ϤξԤ̤Ǥʤˡ
    : [0,6]

        [2.4.31]    ޥƤӽФΥ顼

  ϥޥƤӽФΤĤΥ顼Ǥ

            [e.31.1]    ¿

  οѥ᡼οȰäƤΤ violation of constraint Ǥ
Undefined ǤϤޤ*
    : [0,2]

  *  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Constraint 
     C99 6.10.3 Macro replacement -- Constraints

            [e.31.2]    ­ʤ

  οѥ᡼ο꾯ʤΤ violation of constraint Ǥ
  C99 ǤϥǧޤϰβᾮȤϰۤʤޤ
ʬΥ ',' ǡƤƤϤޤ
    : [0,2]

            [e.31.3]    ȥԤǴ뤷ʤޥƤӽФ

  ̤ˤϥޥƤӽФʣιԤˤޤ뤳ȤǤޤ# ǻϤޤ
preprocessing directive line ϤιԡʥȤ a space Ѵ
ԡˤǴ뤹ΤǡˤޥƤӽФ⤽ιԤǴ뤷Ƥ
Фʤޤ
    : [0,2]

            [e.vargs2]  Ѱޥΰʤ

  C99 βѰޥǤ __VA_ARGS__ б°ϡʤȤ⣱
ĤɬפǤ
    : [0,2]

        [2.4.32]    #if ʸ

  #if ǤʸȤȤǤޤɾϤۤȤ
implementation-defined ǡݡӥƥϤޤꤢޤ32.? ǤϺ
ñʣХȤʸsingle-byte character constantˤ夲
*1
   Validation Suite  i_* ΥץϤ٤ơ#if Ǥδʸ
åȤ ASCII Ǥ뤳ȤȤƤޤ

  Multi-byte character, wide character ˤϼ encoding ޤ
 Validation Suite Ǥϡi_33, i_34, i_36 ˤĤƤϿ encoding
бץѰդƤޤϤϤΥƥǤɸ
encoding бƤʤФʤʤΤϤǤ¿б
뤿ˤϡ¿ encoding бƤɬפޤ
*2
  ƥȤˡϥƥϤˤäưۤʤꡢñǤ
ޤ
  GNU C ϴĶѿ LC_ALL, LC_CTYPE, LANG бưѤ뤳Ȥˤ
äƤޤȾüǤƤˤǤޤ󡣤ޤGNU C Ǥεǽ
Ȥ뤫ɤ GNU C Ȥ򥳥ѥ뤷 configuration ˤäư
ʤޤ
  Visual C++ ˤ #pragma setlocale Ȥʥǥ쥯ƥ֤Τǡ
줬ȤޤWindows ǤϡϰȸΥץפˤäƻѸ
ѹǤ뤳ȤˤʤäƤޤȾüǤäǤ#pragma
setlocale  Windows 򤤤餺˻ȤΤǡץޤˤȤäƤ
ΤǤVisual C++ ȤɤޤƤ뤫̤Ǥ
ˡ
  ΥƥȤ¾νϤǤϺΤȤνϤǤΥǥեȤ
encoding ˤбƤʤ褦Ǥ饤֥ setlocale() δؿ
ĽϤ¿ޤϥΥץץ䥳ѥˤ
طޤ󡣤ɬפʤΤϡϼȤ encoding ǧ
ǽϤʤΤǤ

  *1  ANSI C 3.1.3.4 (C90 6.1.3.4) Character constants ʸ
      ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ --
    Semantics ̣§
      C99 6.4.4.4 Character constants
      C99 6.10.1 Conditional inclusion -- Semantics
      ʲ33, 34, 35 ΥƥȤŵƱǤ롣
  *2  C99 Ǥϡ\u, \U ǻϤޤ Unicode  sequence Ƴ졢multi-
    byte / wide character ȤδطƤ狼ˤʤäƤޤäƤ
    롣C++ Standard ǤϤʣǤ롣

            [n.32.1]    Character octal escape sequence

  ʸǤϣ escape sequence ȤȤǤޤ˴ؤƤ
ɤνϤǤƱǡimplementation-defined ʬϤޤ
    : [-2,0]

            [n.32.2]    Character hexadecimal escape sequence

  ʸǤϣ escape sequence ȤȤǤޤ
implementation-defined ʬϤޤ󡣣 escape sequence  K&R
1st. ˤϤʤäΤǤ
    : [0,2]

            [i.32.3]    Single-byte character constant

  Escape sequence ǤϤʤХȤʸñʤΤǤʸ
åȤˤäͤۤʤޤѥȼ¹ԻȤǴʸåȤ
ѥǤϡ#if ɾǤϤΤɤȤäƤ⤫ޤʤ
ȤˤʤäƤޤ
  ޤƱʸåȤǤäƤ⡢ΰ implementation-
defined ǡ⥳ѥΡtranslation phase 7ˤȥץץ
phase 4ˤȤǰۤʤäƤƤ⤫ޤʤȤˤʤäƤޤ
  äơ#if ʸͤ򸫤ƴʸåȤȽꤹ뤳Ȥϡ
ݾڤƤˡǤϤޤ
    : [-2,0]

            [i.32.4]    '\a', '\v'

  Standard C Ǥ '\a', '\v' Ȥ escape sequence ɲäޤ
    : [0,2]

            [e.32.5]    Escape sequence ͤ unsigned char ϰϳ

  ʸΣĤ escape sequence ϣĤ single-byte character 
ɽΤʤΤǡunsigned char ϰϤˤʤФʤޤ
    : [0,2]

        [2.4.33]    #if Υ磻ʸ

  磻ʸ Standard C ǿߤ줿ΤǤͤɾ
single-byte character constant ˤ implementation-defined ǡ
ȤɾƤޤ

            [i.33.1]    磻ʸɾ

    : [0,7]γ encoding Ȥ 1 

            [e.33.2]    磻ʸͤϰϳ

  磻ʸǤ⣱ʤޤϣʤ escape sequence Ȥޤ
ͤϥ磻ʸͤʤɽϰϤˤʤФʤޤ
    : [0,2]

        [2.4.34]    #if  multi-byte ʸ

  #if ǤʣХȤ multi-byte character constant¿Хʸ
ȤޤʵʽǤ multi-byte character ȤѸ single-byte
character ޤΤȤƻȤƤ뤬ǤϺ𤷤ʤ褦ˡ
single-byte ǤϤʤ multi-byte character ؤȤˤˡ
ɾ single-byte character constant ʾ implementation-defined 


            [i.34.1]    multi-byte ʸɾ

    : [0,7]γ encoding Ȥ 1 ΥƥȤϸҤ u.1.
7 ΥƥȤȹ碌ȽǤɬפ롣ñʸͤɾǤǤϡ
 encoding ǧƤ뤳ȤˤϤʤʤu.1.7  multi-byte
character  encoding ǧϰϤ˼ޤäƤ뤫ɤΥƥ
Ǥ롣i.34 ʸͤɾǡ u.1.7 Ŭڤʿǥ
åФƽƤ encoding ǧƤȸ롣äơ
 encoding ˤĤơi.34, u.1.7 ΥƥȤ˹ʤƽ 1 
Ϳ롣

        [2.4.35]    #if  multi-character ʸ

  ʸˤ multi-character character constant ȤΤ⤢ޤ
Multi-byte character constant ʶ路ѸǤ̤γǰǡʣ
character ʤʸ̣ޤ character ˤϡsingle-byte
character, multi-byte character, wide character ꡢ줾б
 multi-character character constant ΤǤʵʽǤ character
ȤѸ single-byte character ΰ̣ǻȤƤ뤬Ǥϣ
ʸؤդȤƻȤˡ
  Multi-character character constant λȤƻä˲ʤǤ
줬 K&R 1st. ǧƤΤñˡcharacter constant η int
 int ϰϤΤǤвǤ⤫ޤʤȤȤˤ
Ȼפޤ

            [i.35.1]    multi-character ʸɾ

  Single-byte character  multi-character character constant ϡK&R
1st. 餢äΤǤA.16ˡɾΥХȥ K&R 1st.
Ǥ Standard C Ǥ⵬ꤵƤޤ
    : [-2,0]

            [e.35.2]    multi-character ʸͤϰϳ

  ʤޤϣ escape sequence ˤ multi-character character
constant ͤ̾ int ޤ unsigned int ϰϤˤʤФʤʤ
ͤޤC90 Ǥ #if Ǥ int / unsigned int  long /
unsigned long ƱɽĤΤ褦˰Τǡlong ޤ
unsigned ϰϤˤ뤫ɤåФȹͤޤ
ϵʤΤǤϤޤͤɾλΤΤ implementa-
tion-defined ǤΤǡϰϥå implementation-defined Ǥ
Ǥޤ
  ˤƤ⡢Υץ long ӥåȰʲνϤǤϤɤɾ
Ƥ unsigned long ϰϤĶΤǡǥåФΤŬ
Ǥ礦
  C99 Ǥ #if ηϤνϤκȤʤޤ
    : [0,2]

            [i.35.3]    Multi-character 磻ʸɾ

  磻ʸ multi-character constant ȤΤ¸ߤޤɾλ
ϤϤŪ implementation-defined Ǥб multi-byte
character  multi-character constant ȹäƤɬפޤ
    : [0,2]

        [2.4.36]    Multi-byte character  0x5c Υ

  (Multi-byte | wide) character  encoding  shift-JIS, Big-5, ISO-
2022-* ξϡʸ '\\' Ʊ 0x5c ͤĥХȤФƤ
뤳Ȥ뤿ᡢ鷺路꤬ޤϤϤ escape ʸ
ȤƤ \ (backslash) ȲᤷƤϤޤ󡣣Ĥ (multi-byte / wide)
character ϣĤʸǤꡢĤ single-byte character ǤϤʤ
Ǥ

            [i.36.1]    Multi-byte character  0x5c 
                                escape ʸǤϤʤ

  Multi-byte character ͤ 0x5c ΥХȤäƤ⡢ escape
sequence λϤޤȲᤷƤϤޤ
    : [0,3] encoding ˤĤƳ 1 

            [i.36.2]    # 黻Ҥ multi-byte character 
                                \ ʤ

  # 黻Ҥ operand б 0x5c ͤΥХȤ multi-
byte character ޤޤƤƤ⡢ \ ƤϤޤ󡣤ä
⡢ѥΤ multi-byte character бƤʤ˥ץץ
å \ 뤳ȤбȤˡޤϤޤ
̤μΤȤǤ
  ޤ⤽⤳μ multi-byte character ޤʸʸ
 tokenization ˤ⡢¾ΥƥȤϰäݤ꤬ޤ
  ISO-2022-*  encode 줿 multi-byte character ˤ '\\' ФǤ
 '\'', '"' ȰפͤΥХȤޤޤΤǡøʽ򤹤
tokenization ˼Ԥޤ
    : [0,10]Shift-JIS, Big-5  encoding ˤĤƳ 2 ISO-2022-
JP ˤĤƤϣĤΥץˤĤƳ 2 
  ʤιܤ i_36_*.t Ǥʤ i_36_*.c ƥȤɬפ롣
ʸ󲽤Ǥץץåassert() ޥ
0x5c ΥХȤĴޤʣʸƥȤƱꤹ뤳
Ȥ˼Ԥ뤳Ȥ뤫Ǥ롣i_36_*.c ʸƥ
tokenization ΥƥȤˤʤäƤ롣

        [2.4.37]    Translation limits

  Standard C ǤϡϤȤΤǤƼ translation limits κ
¤ꤵޤεϤʤˤ䤫ʤΤǤʤ
θ³ͤˤĤƤ줾졢򣱤İʾޤץ
Ǥ¹ԤǤʤФʤʤȤΤǤ Validation
Suite Υץ򸫤Ф狼褦ˡΥץϽϤˤȤäƺǤ
ôʤʤ褦ˡñºŪ˽񤯤ȤǤޤ
 translation limits ݾڤ櫓ǤϤʤȤˡդƤ
Translation limits εܰ¤ˤʤȸޤΥץ
ϥץץδط룸 translation limits ΥƥȤ򤹤
Ǥ*1, *2, *3
  ʤΥƥȥץΰϲˤޤ褦˹Ԥޤ֤
ƤޤϤˤäƤϡ³νԤʤˤ
ƥȤ˼Ԥ뤳ȤޤBorland C ˡ³ΥƥȤ
ŪǤϤʤΤǡԤϥǥǹԤĤʤǺƥƥȤƤ


  *1  ANSI C 2.2.4.1 (C90 5.2.4.1) Translation limits ³
  *2  C99 5.2.4.1 Translation limits
      C99 Ǥϡtranslation limits ˳礵Ƥ롣C++ Standard
    ǤϤ礭[3.5] ȡˡ

            [n.37.1]    ޥΣĤΥѥ᡼

  C90 ǤϡޥΥѥ᡼ϣĤޤǤݾڤƤޤ
    : [0,2]

            [n.37.2]    ޥƤӽФΣĤΰ

  Ʊͤ C90 ǤϡޥƤӽФΰϣĤޤǤݾڤƤ
ޤ
    : [0,2]

            [n.37.3]    ʸμ̻̾

  C90 ǤϡTranslation unit Ū identifierʥޥ̾⤳˴ޤ
ˤƬ 31 characters ͭդǤ뤳ȤݾڤƤޤץ
Ϥ31 ХȤ̤̾ɬפޤ*
    : [0,4]

  *  ANSI C 3.1.2 (C90 6.1.2) Identifiers ̻ -- Implementation
    limits ϸ³

            [n.37.4]    Ťξ

  C90 Ǥϡ#if (#ifdef, #ifndef) section ΥͥȤϣŤޤǤݾڤ
Ƥޤ
    : [0,2]

            [n.37.5]    Ť #include

  C90 Ǥϡ#include ΥͥȤϣŤޤǤݾڤƤޤ
    : [0,4]

            [n.37.6]    ŤΥåդ #if 

  C90 Ǥϡ (, ) ΥͥȤϣŤޤǤݾڤƤޤ
 #if ˤŬѤȹͤޤ#if Ǥϰ̤μȰäƤ
ݾڤɬפϤʤȤפ롣#if  long /
unsigned long ɾ뤳Ȥȡ¹ԻĶؤ䤤碌ɬפȤ
¹Ի phase 7 ƱɾλǤʤƤ褤ȤȤ㳰
ȤƵꤵƤơ¾¦̤Ǥ̰ƤʤΤǡʵ
ˤʤäƤȤ⤢ˡ
    : [0,2]

            [n.37.7]    509 ХȤʸƥ

  C90 ǤϡʸƥĹ 509 ХȤޤǤݾڤƤޤ
ĹϥȡĹǤꡢchar ǿǤϤޤξü
" ޤߡ\n ϣХȤȿޤ磻ʸƥǤ L Ȥ
prefix ޤߤޤ
    : [0,2]

            [n.37.8]    509 ХȤ

  C90 ǤϡԤĹ 509 ХȤޤǤݾڤƤޤ
    : [0,2]

            [n.37.9]    1024 ĤΥޥ

  C90 Ǥϡޥ 1024 ĤޤǤݾڤƤޤ
translation limits εǤ⤳줬Ǥ⤢ޤʤΤǤΥץ
Τ褦˺ǤñʥޥФξȡĹʥޥ¿ޤȤǡ
ϤɬפȤ̤Ϥޤäۤʤޤޤ1024 Ĥ˻
ޥޤफɤǤ⡢ƥȥץबäƤޤºݤΥץ
Ǥϡ桼ץǥޥˡɸإå¿Υޥ
ޤεϤޤ礶äѤܰ¤ˤޤ󡣼ºݤθ³
ϥƥ󶡤Ǥ̤ˤäƷޤǤ礦
    : [0,4]

            [n.tlimit]  C99  translation limits

  C99 Ǥ translation limits ˳礵ޤ
    : ʲΤ줾ˤĤ [0,2]

            [n.37.1L]   ޥ 127 ĤΥѥ᡼
            [n.37.2L]   ޥƤӽФ 127 Ĥΰ
            [n.37.3L]   63 ʸμ̻̾
            [n.37.4L]   63 Ťξ
            [n.37.5L]   15 Ť #include
            [n.37.6L]   63 ŤΥåդ #if 
            [n.37.7L]   4095 ХȤʸƥ
            [n.37.8L]   4095 ХȤ
            [n.37.9L]   4095 ĤΥޥ

    [2.5]       ʬΥɥ

  Standard C ˤ implementation-definedʽˤȸƤФʬ
ޤʬλͤϽϤˤäưۤʤޤϤϤλ
ͤɥȤ˵ܤʤФʤʤȤƤޤ*
  Implementation-defined ȤΤˤϡϤΤΤ
ΤΤۤˡCPU ϣӤˤäƷޤʬޤޤƤޤ
ѥξ硢CPU ϣӤȼ¹ԻȤǰۤʤ⤢ޤ
  ʲιܤϥץץ˴ؤ implementation-defined ʬˤĤơ
ϤΥɥȤ˵ܤ뤫ɤåΤǤץץ
Ǥ顢CPU ϣӤϤΤΤǤd.1.* ϥץץ
ͭλͤǤꡢd.2.* ϥѥΤλͤȤطΤΤǤ
#if ǤμɾϡѥΤȤϻͤۤʤäƤ⤫ޤʤ
ȤˤʤäƤޤ
  ʲιܤΤۤˤ⡢#if ɾˤ implementation-defined ¦̤
ĤޤޤʸåȤǤʴʸåȤ ASCII  EBCDIC
ˡޤ encodingʣ͡ˤ⤽
Ǥˡ̾λѴˤäĤʤѴ줿
̤⤽ǤϤޥȣϣӤǷޤΤǤΤ
ΥɥȤ­ꡢϤΥɥȤˤϵܤϤʤ
Ƥ⤫ޤʤȹͤޤäơǤϤɾоݤȤ
ޤ

  *  ANSI C 1.6 (C90 3) Definitions of Terms Ѹڤӵ
     C99 3 Terms, definitions, and symbols

        [d.1.1]     Header-name ۤˡ

  Header-name ȤΤü pp-token Ǥ<, > ޤ ", " ǰϤޤ
 sequence ɤä header-name ȤĤ pp-token ˷礹
 implementation-defined ȤʤäƤޤ ", " ǰϤޤ줿
ʸƥȤ pp-token ȤưФΤǴñʤΤǤ<, >
ǰϤޤ줿ΤϤüäƤޤ<stdio.h>  trans-
lation phase 3  <, stdio, ., h, > ȤĤ pp-token ˤäʬ
줿ǡphase 4 ǣĤ pp-token ˹뤳Ȥˤʤ뤫Ǥ
ʬޥǽ񤫤Ƥϡ̯꤬ޤ*
    : [0,2]ʤλͤϤΥɥȤ˵ܤƤ
 2 ܤƤʤ 0 
  ʤheader-name ʸʸζ̵̤ͭե̾ε§
implementation-defined Ǥ뤬ϣϣӤǷޤ뤳ȤʤΤǡ
ϤΥɥȤˤɬ⵭ܤɬפϤʤȹͤ롣

  *  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
     -- Semantics ̣§
     C99 6.10.2 Source file inclusion

        [d.1.2]     #include ǥإå򤵤ˡ

  #include Ԥ header-name Ф줿塢 header file ɤ
äƤΤ implementation-defined Ǥ", " ǰϤޤ줿 header-
name ξϡޤ implementation-defined ˡǥե뤬졢
Ĥʤä <, > ǰϤޤ줿 header-name Ʊͤ˥뤳
ȤˤʤäƤޤȤθԤޤ implementation-defined ʤΤǤ
ΤʤǤ Standard C ϣӤˤĤ֤
ȤǤʤᡢɽˤʤ餶ʤΤǤ
  ǥ쥯ȥ깽¤äϣӤǤϡԤϥȥǥ쥯ȥ꤫
ѥ򡢸ԤϽϤδΥǥ쥯ȥ򥵡Ȳ򤵤ޤ
ԤǤ include Υե뤫Хѥ򥵡Ϥ⤢ޤ
Implementation-defined Ǥ뤫ˤϡְ㤤Ȥϸޤ󡣤
ˤĤ Rationale ϡȥǥ쥯ȥ꤫Хѥǥ
ͤѰΰտޤǤϤ뤬ϣӤˤĤ֤ȤǤʤΤʸ
ǤʤäƤޤ*1
  ޤԤΥϥݡȤʤƤɤ", " ǰϤޤ줿 header-
name  <, > ȤޤäƱ˰äƤɤˤȤƤޤԤɬ
եǤʤƤ褤ȤƤޤϤȤ߹ߤ header ⤢
ꤦȤȤǤ*2
    : [0,4]ʤ header ܤɥȤ˽ʬ
˵ܤƤ 4 Խʬʵܤʤ 2 ۤȤɵܤ
Ƥʤ 0 

  *1  ANSI C Rationale 3.8.2 Source file inclusion
  *2  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
     -- Semantics ̣§
     C99 6.10.2 Source file inclusion

        [d.1.3]     #include ΥͥȤθ

  #include ΥͥȤɤǤ뤫 implementation-defined Ǥ
ʤȤ C90 Ǥϣ٥롢C99 Ǥ 15 ٥ݾڤʤФ
ޤ*1, *2
    : [0,2]

  *1  ANSI C 2.2.4.1 (C90 5.2.4.1) Translation limits ³
      C99 5.2.4.1 Translation limits
  *2  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
     -- Semantics ̣§
      C99 6.10.2 Source file inclusion

        [d.1.4]     Ƥ #pragma sub-directive

  #pragma Ȥ preprocessing directive Ͻϸͭγĥǽꤹ
뤿ѰդƤ directive ǤץץˤƤ⡢ĥǽ
Ϥ٤ #pragma sub-directive ȤƼʤФʤޤ*
    : [0,4]νϤͭ #pragma sub-directive ˤĤơʥץ
ץΥɥȤǤϾʤȤץץΤΤ٤Ƥ #pragma
sub-directive ˤĤơ˥ɥȤ˽ʬʵܤ 4 Խʬ
ܤʤ 2 ۤȤɵܤʤ 0 ޤ#pragma sub-
directive ʳνϸͭ directive  2 򸺤ʤ
0 ¡Standard C ˺Ǥᤤͤꤹ륪ץˤäƶػߤ
 directive ϴޤޤʤˡ

  *  ANSI C 3.8.6 (C90 6.8.6) Pragma directive ץ饰޻
     C99 6.10.6 Pragma directive

        [d.pragma]  #pragma ǤΥޥŸ

  C90 Ǥϡ #pragma Ԥ pp-token ϥޥŸоݤȤʤޤǤ
C99 Ǥ #pragma  STDC Ȥ token ³ΤϥޥŸ
ݤȤʤޤ󤬡ʳ #pragma sub-directive ޥŸ뤫
 implementation-defined Ȥʤޤ
    : [0,2]

        [d.1.5]     ޥ

  __FILE__, __LINE__, __DATE__, __TIME__, __STDC__, __STDC_VERSION__
C99 Ǥ __STDC_HOSTED__ ˰ʳλޥ implementation-
defined ǤϣĤ _ ʸ³̾ޤϣĤ _ ǻϤ
̾ǤʤФʤޤ*
    : [0,4]Խʬʵܤʤ 2 ¤ȿ̾
ޥ 2 򸺤ʤ0 ¡Standard C
˺Ǥᤤͤꤹ륪ץˤäƶػߤޥɾоݤ
ʤˡ

  *  ANSI C 3.8.8 (C90 6.8.8) Predefined macro names 餫
    ޥ̾
     C99 6.10.8 Predefined macro names

        [d.predef]  C99 λޥ

  C99 Ǥϡ__STDC_IEC_559__, __STDC_IEC_559_COMPLEX__,
__STDC_ISO_10646__ ȤޥˤäƻΤȤ
äƤޤ
  __STDC_IEC_559__, __STDC_IEC_559_COMPLEX__  IEC 60559 ư
˹פǤϤ줾 1 ȤƤޤΣĤư
黻Υ饤֥ˤäƷޤΤǡºݤˤ <fenv.h> 
ΤŬ⤷ޤɬץץåǻɬפϤʤ
ͤޤ
  __STDC_ISO_10646__  wchar_t ʸͤ٤ ISO/IEC 10646
Unicode Ϥ Universal Character Setˤβ餫Υɲ줿Ǥ
ϡ򤹤 ISO/IEC 10646  amendment  corrigendum ޤ᤿
ʤǯɽ 199712L ȤäȤƤޤ
<wchar.h> 뤳Ȥͤ졢ץץåǻɬפ
ʤǤ
  ɤˤƤɥȤƤ뤳ȤɬפǤ
    : [0,6]ĤΤ줾ˤĤƳ 2 

        [d.1.6]    Phase 3  white-spaces 򰵽̤뤫

  Standard C Ǥ translation phase 3  tokenization Ԥޤ
 <newline> ʳ white-space sequence  one space ˰̤뤫
 implementation-defined ȤƤޤ*
  ̾ϥѥ̤ˤϱƶͿʤϤͤ
Τǡ桼ΤɬפϤʤΤǤƬȹ white-spaces ˤ
äƤϡƤ⤫ޤޤ
  ǤϤε̵ѤȸȡĤ⤽櫓ǤϤʤɬפʾ礬
Ĥޤ preprocessing directive Ԥ [VT], [FF] 
ǤˤĤƤ Standard C Ϥ狼ˤλ򤷤Ƥޤ
Ǥ violation of constraint Ȥ¾ǤϾ嵭εߤƤ
ΤǤʤphase 3  [VT], [FF] 򤽤 space, tab ȹ
 one space ˰̤뤳ȤǤξ phase 4 ˤ [VT], [FF]
ϻĤʤ̤ʤäϤ줬Ĥä violation of constraint
ȤʤΤǤ
  ɥȤˤϡ [VT], [FF] ΰ񤫤Ƥнʬȹͤ
ޤ
    : [0,2]

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե 3
     ANSI C 3.8 (C90 6.8) Preprocessing directive  --
    Constraints 
     C99 6.10 Preprocessing directive

        [d.ucn]     ʸ󲽤 UCN  \ Ťͤ뤫

  UCN ޤ pp-token  # 黻Ҥˤäʸ󲽤硢UCN  \ 
ͤ뤫ɤ implementation-defined Ǥ
    : [0,2]

  *  C99 6.10.3.2 The # operator

        [d.2.1]     #if: Single-character character constant ɾ

  ̤ʸͤɾ implementation-defined ǤˤϤ
μޤ

  ʸåȤϲ
  ¿Хʸ磻ʸ encoding ϲ
  ΰϤɤ
  ʣХȤʸɾΥХȥϤɤ

  ΤϥϡɥȣϣӤǷޤΤʤΤǡǤɾоݤ
ޤϣ,,Ǥ
  ХȤ single-character ʸǤ⡢ΰ implemen-
tation-defined ǤޤץץȥѥȤɾäƤ
ɤȤˤʤäƤޤ*
    : [0,2]ɥȤ˵ܤ硢ޤϥѥե
ǤɾˤĤƤεܤ #if ǤƱɾ 2 
ܤʤ 0 

  *  ANSI C 3.1.3.4 (C90 6.1.3.4) Character constants ʸ
     ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ --
    Semantics ̣§
     C99 6.4.4.4 Character constants
     C99 6.10.1 Conditional inclusion -- Semantics

        [d.2.2]     #if: Multi-character character constant ɾ

  'ab' Ȥä multi-character ʸɾˤϡХȥ
ޤ implementation-defined Ǥ
    : [0,2]ɾλ d.2.1 Ʊ͡

        [d.2.3]     #if: Multi-byte character constant ɾ

  ¿Хʸɾ encoding ΰ㤤ΤۤˡΰХȥ
ΰ㤤ꡢϤ implementation-defined Ǥ
    : [0,2]ɾλ d.2.1 Ʊ͡

        [d.2.4]     #if: 磻ʸ character constant ɾ

  磻ʸɾˤ encoding ΰ㤤ΤۤˡΰХȥ
ΰ㤤ꡢϤ implementation-defined Ǥ
    : [0,2]ɾλ d.2.1 Ʊ͡

        [d.2.5]     #if: αե

  ̤αӥåȥեȤӥåȤɤ뤫 implemen-
tation-defined Ǥ CPU λͤˤޤϤμ
ˡˤȻפޤ*
    : [0,2]ɾλ d.2.1 Ʊ͡

  *  ANSI C 3.3.7 (C90 6.3.7) Bitwise shift operators ӥåñ̤Υե
    黻 -- Semantics ̣§
     C99 6.5.7 Bitwise shift operators -- Semantics

        [d.2.6]     #if: ν;

  ̤˱դޤϺդޤǤΡȾ;
η̤ implementation-defined Ǥ CPU λͤˤޤ
ϤμˡˤȻפޤ*1, *2
    : [0,2]ɾλ d.2.1 Ʊ͡

  *1  ANCI C 3.3.5 (C90 6.3.5) Multiplicative operators 黻 --
    Semantics ̣§
      C99 6.5.5 Multiplicative operators -- Semantics
  *2  C99 Ǥϡdiv(), ldiv() Ʊͤ˾ 0 ڤΤƤ뤳
    ˤʤä

        [d.2.7]     ̻ҤͭĹ

  ޥ̾ޤ identifier Ƭ鲿ХȤޤǤͭդǤ뤫
implementation-defined Ǥޥ̾Ū̻ҤˤĤƤϡ
C90 Ǥ 31 ХȡC99 Ǥ 63 ХȤݾڤʤФʤޤ*
    : [0,2]

  *  ANSI C 3.1.2 (C90 6.1.2) Identifiers ̻ -- Implementation
    limits ϸ³
     C99 6.1.2 Identifiers -- General -- Implementation limits

        [d.mbident] ̻ multi-byte character

  C99 Ǥϡidentifier  multi-byte character Ȥ
Ȥˤʤޤ implementation-defined Ǥ*
    : [0,2]

  *  C99 6.1.2 Identifiers -- General


             ʤ׵ᤵƤʤ¦̤ɾ

  ʤϤФ׵ᤷƤʤȤǤäƤ⡢ϤΡʼפɾ
뤿˽פʤȤޤξϤǤϡʼɾ
ΥƥȤ⤷ޤ

    [3.1]       Undefined behavior

  Standard C ˤ undefined behavior Ȥ꤬󤢤ޤ
Undefined behavior Τϡְäץޤϥǡ
뤤ϾʤȤܿΤʤץǤviolation of syntax rule
or constraint ȤϰäơϤϤФƿǥåФȤ
̳դƤޤ󡣤ϡϤϤɤƤ⤫ޤ
ʤΤǤץȤƲ餫 reasonable ʽ򤷤Ƥɤ
ǥåФƥ顼ˤƤɤǥåФ˽
ߤ˽ꤷƤ⵬ʰȿǤϤޤ
  ϤΡʼפɾˤϡundefined behavior Ū
ɤΤǤ뤫ˤʤޤϤϲ餫οǥå
ΤŬǤ礦顼ˤΤǤФΤȡץ
ȤưǤ⥦˥󥰤ФȤץ˰ܿʤ
ȤΤ餻뤿ͭѤǤ˽ΤǤ
  ʲΥƥȤǤϡundefined behavior Фƽ
ŬڤʿǥåФɤåޤǥåϥ
顼Ǥ⥦˥󥰤Ǥ⤫ޤޤ󡣤󡢥˥󥰤ξϲ
 reasonable ʽ򤹤ɬפޤ
  u.1.* ϥץץͭǡu.2.* ̤˶̤Ǥ
    :   ŬڤʿǥåФСʲγƹܤΤä
ΤʤܤˤĤƤ 1 ʿǥåǤǥ
åФʤ 0 

        [u.1.1]     ե뤬 <newline> ǽäƤʤ

  ǤʤեκǸ夬 <newline> ǤʤΤϡundefined
behavior ޤʤäȤ⡢ϣӤˤäƤϥե˲ʸ
Ȥǡ¸ߤեɤ߹˽ϤˤäƼưŪղ
ΤǤˡ*
  u.1.1, u.1.2, u.1.3, u.1.4 Ϥ⥽ե뤬뤷Ƥʤ
ΤǤtranslation unit ΥեǽäƤϡǥ
ФϤ¿ȻפޤϤǤ⡢Υ
뤬 include 줿ΤǤ硢include ΥեϢ³ƽ
뤳ȤǡʥȤưǽޤ
undefined behavior ΰǤꡢְäǤϤޤ󤬡Ϥ
ǥåФΤŬǤ

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     C99 5.1.1.2 Translation phases

        [u.1.2]     ե뤬 <backslash><newline> ǽ

  ե뤬 <backslash><newline> sequence ǽäƤΤϡ
undefined behavior ޤ*

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     C99 5.1.1.2 Translation phases

        [u.1.3]     ե뤬ȤǽäƤ

  ե뤬ȤǽäƤΤϡundefined behavior
ޤϼºݤˤϥȤĤ˺ޤϥȤΥͥ
Ǥ*

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     C99 5.1.1.2 Translation phases

        [u.1.4]     ե뤬ޥƤӽФǽäƤ

  ե뤬뤷ʤޥƤӽФǽäƤΤϡundefined
ȹͤޤ*
  ϥޥΰĤ륫å˺줿ʤɤȯΤǡ
åϽפǤ

  *  ANSI C 3.8.3.4 (C90 6.8.3.4) Rescanning and furthur replacement 
    Ⱥִ
     C99 6.10.3.4 Rescanning and furthur replacement

        [u.1.5]     ѤǤʤȤ character 

  ʸƥ롢ʸheader-nameȰʳΤȤ˽񤱤ʸ
Ϥ¤ƤޤʸȾʸ alphabetε桢
 white space characters ǤǤΤȤǤ*
  Ǥϡwhite space ʳΥȥ륳ɤäΥƥȤ
ޤȥ륳ɤϤȤʸƥǤäƤȹ
ޤϥѥΤǥåϤǤꡢޤ̤
ʸåȤˤ locale-specific ʤ implementation-defined ̤¿
ϰϤɬΤǤϤʤΤǡǤϥƥȤޤ󡣤ޤ嵭
ʳξǤ undefined ȹͤޤƱͤͳǥƥȤޤ

  *  ANSI C 2.2.1 (C90 5.2.1) Character sets ʸ
     C99 5.2.1 Character sets
     C99 Ǥ UCN ɲä줿

        [u.1.6]     ȥ [VT][FF] 

  White space characters ǤäƤ⡢# ǻϤޤ preprocessing directive
ԤǤ [SPACE][TAB] ʳ violation of constraint Ȥʤޤ
 translation phase 4 Ǥäǡ phase 3 Ǥ
 <newline> ʳ sequence of white spaces ȤȤ one space 
̤뤳ȤǤξ violation ȯޤ*
  ϤǤϤꤳˤϿǥåФΤŬǤ礦
ΥƥȤ undefined behavior ΥƥȤǤϤޤ󤬡¾ʬष
üʤΤʤΤǡص夳Ƥޤ

  *  ANSI C 2.1.1.2 (C90 5.1.1.2) Translation phases ե
     C99 5.1.1.2 Translation phases
     ANSI C 3.8 (C90 6.8) Preprocessing directives  --
    Constraints 
     C99 6.10 Preprocessing directives -- Constraints

        [u.1.7]     Ѥ multi-byte character sequence

  ʸƥ롢ʸheader-nameȤǤäƤ⡢multi-
byte character Ȥǧʤ sequence  undefined Ǥ
Multi-byte character ХȤμΥХȤХȤȤƻȤʤ
ΤǤǤ*
    : [0,7]γ encoding ˤĤ 1 ʤi.34 
ȤΤȡ

  *  ANSI C 2.2.1.2 (C90 5.2.1.2) Multibyte characters ¿Хʸ
     C99 5.2.1.2 Multibyte characters

        [u.1.8]     ԤʸǽäƤ

  ʸȤ pp-token ϤԤǴ뤷ƤʤФʤޤ
б ' ʤ '  undefined Ǥ*
  #error ԤˤǤդΥå񤯤ȤǤޤȤƤ
pp-token ¤ӤˤʤäƤʤȤʤΤǡñȤ apostrophy Ϥ
󡣤ΥץǤϡȤΤĤΤȤʸν '
򥵡뤿˿ƤޤǤ礦

  *  ANSI C 3.1 (C90 6.1) Lexical elements  -- Semantics ̣
    §
     C99 6.4 Lexical elements -- Semantics

        [u.1.9]     ԤʸƥǽäƤ

  ʸƥ⤽ԤǴ뤷ƤʤФʤޤñȤ " 
undefined Ǥ*
  ĤƤ UNIX Ϥ¿νϤǤϡԤޤʸƥȤ
ǧƤ褦Ǥޤˤ򤢤Ƥˤ˸


  *  ANSI C 3.1 (C90 6.1) Lexical elements  -- Semantics ̣
    §
     C99 6.4 Lexical elements -- Semantics

        [u.1.10]    Ԥ header name ǽäƤ

  #include ԤǴ뤷ʤ header-name  undefined Ǥ*

  *  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
    -- Semantics ̣§
     C99 6.10.2 Source file inclusion

        [u.1.11]    Header name  ', ", /*, \ 

  Header-name Ȥ pp-token  ', /*, \  undefined Ǥ<,
> ǰϤޤ header-name  " ƱͤǤʸƥ
 header-name Ǥϡᤫ "  pp-token νˤʤäƤޤΤǡ
顼ˡ*
   \ ʳϤ⡢ʸʸƥ롢Ȥʶ
ɤˤǤ뤫Ǥ
  ޤ\  escape sequence ʶ路header-name ˤ escape
sequence ¸ߤʤΤΡ줬 header-name Ȥ狼Τ transla-
tion phase 3 Ǥ tokenization ä phase 4 ˤʤäƤǤΤǡ
ϤϤ϶̤˺ΤǤEscape sequence Τ phase 6
Ǥphase 3 Ǥ \" ʸƥνǤϤʤ escape sequence
Ȳ᤹뤿 escape sequence ǧ뤳ȤɬפǤ
  \  MS-DOS ΣϣӤǤ path-delimiter ǡΣϣ
νϤʸȤưޤʸƥη
header-name ǤκǸʸ \ Ǥ̤ȤơˡUndefined
behavior ⤿餹Τ¿ξϴְäץǤˤ
Ȥ櫓ǤϤޤ󡣤/ ǤȤ虜虜 \ Ƚ񤯤Τϡ
portability ξǴޤ󡣽Ϥϥ˥󥰤ФȤ˾ޤ
¾ΣϣӤǤϥե򥪡ץ󤷤褦Ȥƥ顼ˤʤǤ礦顢
ɬץץ tokenization ǿǤɬפϤޤ

  *  ANSI C 3.1.7 (C90 6.1.7) Header names إå̾ -- Semantics ̣
    §
     C99 6.4.7 Header names -- Semantics

        [u.1.12]    #include ΰ header name Ǥʤ

  #include Ԥΰ header-name ǤʤΤ undefined Ǥʤ
ʸƥηǤʤ<, > ˰Ϥޤ줿ΤǤʤΤɤ餫
ŸޥǤʤǤ

  *  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
    -- Semantics ̣§
     C99 6.10.2 Source file inclusion -- Semantics

        [u.1.13]    #include ΰ;פʥȡ󤬤

  #include Ԥΰ header-name ĤǤʳ;פ pp-
token  undefined Ǥ

  *  ANSI C 3.8.2 (C90 6.8.2) Source file inclusion ե
    -- Semantics ̣§
     C99 6.10.2 Source file inclusion -- Semantics

        [u.1.14]    #line ΰ˹ֹ椬ʤ

  #line ΰ˹ֹ椬ʤΤ undefined Ǥʥե̾ optional
ֹǤʤФʤʤˡ*

  *  ʲ[u.1.18] ޤǤŵϤƱ
     ANSI C 3.8.4 (C90 6.8.4) Line control  -- Semantics ̣§
     C99 6.10.4 Line control -- Semantics

        [u.1.15]    #line Υե̾ʸƥǤʤ

  #line Ǥե̾ʸƥǤʤФʤޤ
  줬磻ʸǤä violation of constraint
ǡ¾ #line δְ㤤Ϥ٤ undefined ȤΤϡХ󥹤礤
Ǥ

        [u.1.16]    #line ΰ;פʥȡ󤬤

  #line ԤˣİʾΰΤ undefined Ǥ

        [u.1.17]    #line ιֹΰ [1, 32767] ϰϤˤʤ

  C90 Ǥϡ#line ιֹ [1, 32767] ϰϤˤʤФʤޤ
ʳǤ undefined Ǥ
  ΥץǤϡ#line ǤλϤϰϤˤΤΡθǥ
ιֹ椬ĶƤޤäȤΥƥȤ⤷ƤޤϤˤ
äƤϡǹֹ椬ۤä wrap round ꤷޤϤꥦ˥
ФΤŬǤ礦
    : [0,2]ĤΥץΤĤޤϣĿǤǤ 1 

        [u.line]  C99: #line ιֹΰϰϳ

  C99 ǤϡϰϤ [1, 2147483647] Ǥ
    : [0,2]ĤΥץΤĤޤϣĿǤǤ 1 

        [u.1.18]    #line ιֹΰʿǤʤ

  #line ιֹϣʿǤʤФʤޤ󡣣ʿʤɤ unde-
fined Ǥ

        [u.1.19]    #if  defined Ÿޥ

  defined 黻ҤǤʤ identifier ʶ路򤷤Ƥ뤳Ȥϡ
ޤޤޤTranslation phase 3 ǤϤä
identifier Ȥ tokenize 졢phase 4 Ǥ줬 #if ˤä
¤äƱ黻ҤȤǧΤǡ#define Ԥ defined Ÿޥ
뤳Ȥ⡢ꤨʤȤǤϤޤ󤽤ơ#if Ԥ˼ºݤˤ
Υޥ줿ϡundefined ǤŸ̤黻ҤȤ
ݾڤϤޤ*
  defined Ȥ̾Υޥ뤳ȤϤ켫Τ undefined Ǥ
[u.1.21] ȡˡºݤˤϸݤޤ󡣤ִꥹ
 defined ȤȡΤޥϡ˸ݤޤϤˤ
äƤϡˤĤüʽ򤷤ƹˡŪʤΤȤưΤ⤢ޤ
ŪʻͤǤϤޤ
    : [0,2]ĤΥץΤĤǤǤ 1 

  *  ANSI C 3.8.1 (C90 6.8.1) Conditional inclusion դ --
    Semantics ̣§
     C99 6.10.1 Conditional inclusion -- Semantics

        [u.1.20]    #undef ΰ defined, __LINE__, etc. Ǥ

  #undef ΰ defined, __LINE__, __FILE__, __DATE__, __TIME__,
__STDC__, __STDC_VERSION__ Ǥ undefined Ǥ*1, *2, *3

  *1  ANSI C 3.8.8 (C90 6.8.8) Predefined macro names 餫
    ޥ̾
      C99 6.10.8 Predefined macro names
  *2  Amendment 1 / 3.3 Version macro
  *3  C99 Ǥϡ__STDC_HOSTED__, __STDC_ISO_10646__, __STDC_IEC_559__,
    __STDC_IEC_559_COMPLEX ɲä줿

        [u.1.21]    #define Υޥ̾ defined, __LINE__, etc.

  #define ޥ̾ defined, __LINE__, __FILE__, __DATE__,
__TIME__, __STDC__, __STDC_VERSION__ Ǥ undefined Ǥ*1, *2, *3
    : [0,2]ĤΥץΤĿǤǤ 1 

  *1  ANSI C 3.8.8 (C90 6.8.8) Predefined macro names 餫
    ޥ̾
  *2  Amendment 1 / 3.3 Version macro
  *3  C99 Ǥϡ__STDC_HOSTED__, __STDC_ISO_10646__, __STDC_IEC_559__,
    __STDC_IEC_559_COMPLEX ɲä줿

        [u.1.22]    ## 黻Ҥˤä pp-token 줿

  ## 黻Ҥˤä pp-token Ϣ뤵줿̤ͭʡñΡpp-token
ˤʤʤФʤޤ󡣤Ǥʤ undefined Ǥ*
  ΥץǤ pp-number Ȥ Standard C ǿꤵ줿 pp-
token ˤƤޤ

  *  ANSI C 3.8.3.3 (C90 6.8.3.3) The ## operator ##黻 -- Semantics
    ̣§
     C99 6.10.3.3 The ## operator -- Semantics

        [u.concat]  C99: ## 黻Ҥˤä pp-token 줿

  //  C99, C++ ǤϥȥޡǤ pp-token ǤϤޤ
## 黻ҤˤäƤ sequence 褦ȤƤ⡢η̤
undefined Ǥ
  ⤽⥳Ȥϥޥ줿Ÿ줿ꤹ a space 
ѴƤΤǡޥˤäƥȤ뤳ȤϤǤޤ

        [u.1.23]    # 黻Ҥˤä pp-token 줿

  # 黻Ҥˤִη̤ͭʡñΡʸƥˤʤʤ
ʤޤ󡣤ʤʤä undefined Ǥ
  Ϥäȯ뤳ȤΤʤǤΥץǤ狼褦ˡ
\ ƥγˤȤ̯ʾΡΤޤüʾ˸¤
ޤΥץ⡢ץץǿǤʤƤ⥳ѥե
ǿǤǤ礦ǽʬǤϤ󤷤ꡢ
ä̤ƤޤäꤹΤϤޤ

  *  ANSI C 3.8.3.2 (C90 6.8.3.2) The # operator #黻 -- Semantics 
    ̣§
     C99 6.10.3.2 The # operator -- Semantics

        [u.1.24]    ޥƤӽФ˶ΰ

  ؿͥޥθƤӽФ˶ΰΤ C90 Ǥ undefined Ǥ*1
  ΰ򣰸ĤΥȡȲᤷ reasonable ʥޥŸԤȤϡ
C99 ǹˡȤʤä褦˽ʬǽǰ̣Τ뤳ȤǤ*2
   undefined ʵ˽ϤͭյͿ뤳ȤΤǤ룱
ǤϤǤäƤ⡢ʤȤ pre-C99 ǤϤ
ˤϰܿʤΤǡ˥󥰤ФΤŬǤ礦
    : [0,2]ĤΥץΤĤޤϣĿǤǤ 1 

  *1  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Semantics ̣§
  *2  C99 6.10.3 Macro replacement -- Semantics

        [u.1.25]    ޥƤӽФ˥ȥΰ

  ؿͥޥθƤӽФʣԤˤޤ뤳ȤǤޤ
ơ preprocessing directive ʶ路Ԥޤޤ뤳Ȥ
ꤨޤη̤ undefined Ǥ*
  ְפϡåפ #if group ˤ pre-
processing directive ԤȲᤵǤ礦

  *  ANSI C 3.8.3 (C90 6.8.3) Macro replacement ޥִ --
    Semantics ̣§
     C99 6.10.3 Macro replacement -- Semantics

        [u.1.26]    Function-like ޥ̾ǽޥŸ

  C90 ǤϡޥŸη̤ function-like ޥ̾ǽΤ
undefined ȤƤޤɲä줿Ǥ̣ʤΤǤ
[1.7.6] 򻲾ȤƤ
   Validation Suite Ǥ V.1.2 ޤǤϤƥȤ˴ޤƤޤ
V.1.3 ޤ

  *  ISO/IEC 9899:1990 / Corrigendum 1
     C99 ǤϤεϺ졢ʣʵ꤬ɲäƤ롣

        [u.1.27]    ̵ʥǥ쥯ƥ

  Ԥκǽ pp-token  # Ǥθˤ pp-token ϡ̾
 # μ preprocessing directive ǤʤФʤޤ# ιԤϤ
ǧƤޤ*1
  Ƭ # ̵ʥǥ쥯ƥ֤䤽¾ pp-token ³
ϡץץ violation of syntax or constraint ǤϤޤ󡣤
ʤ顢[u.1.25] Ǥ狼褦ˡ# ǻϤޤԤ٤ƥץץǥ
ƥֹԤǤʤФʤʤ櫓ǤϤʤǤɤ줬ץץǥ
쥯ƥֹԤǤΤϡʸ̮ˤäƷޤΤʤΤǤ
  ʽϤ undefined ȤƤޤ󤬡ֵꤵƤʤ
Ȥ̣Ǥ undefined ΰǤϤϲ餫οǥå
ФȤ˾ޤޤɬץץǤɬ
Ϥޤ󡣥ץץιԤ򤽤Τޤ޽ϤСѥե
ǥ顼ˤʤϤǤ顢Ǥ⤫ޤޤ󡣥ץץ #
ifdefined  #if defined Ȳᤷƥ顼ˤʤ餺ޤʤɤȤȤ
ʤСϤޤ
  C99 Ǥ # non-directive Ȥ̣ʤΤɲäޤ
Ƥϲ⵬ꤵƤ餺¾ undefined Ǥȸޤ*2

  *1  ANSI C 3.8 (C90 6.8) Preprocessing directives  -- Syntax
    ʸ§
  *2  C99 6.10 Preprocessing directives -- Syntax

        [u.1.28]    directive ̾˥ޥϻȤʤ

  # ǻϤޤԤץץǥ쥯ƥ֤Ǥ뤿ˤϡ pp-token
ȤƤ directive ̾ޤDirective ̾Ϸ褷ƥޥŸ
ޤ
  # μ directive ̾ǤϤʤ identifier ơ줬ޥ̾Ǥ
ϡ¸ߤʤǥ쥯ƥ֤ȿǤ뤫̾ΥƥȤȤߤʤ
ޥŸƽϤ뤫ΡĤνꤨޤԤǤⲿ餫ο
Ǥ˾ޤޤԤǤϥѥեǥ顼ˤʤϤǤ顢
Ǥ⤫ޤޤ󡣥ޥŸΤ򤵤ˡץץץǥ
쥯ƥ֤Ȥƽ뤳ȤϡäƤϺޤ

        [u.2.1]     #if ̤ character escape sequence 

  ʸƥޤʸ character escape sequence  \', \",
\?, \\, \a, \b, \f, \n, \r, \t, \v ꤵƤޤʳ \
ǻϤޤ character sequence  undefined ǤȤ \ ˾ʸ³
sequence ϡ escape sequence ɲä뤿ͽ󤵤Ƥޤ*
  οǤ¿ϥѥեˤޤФߤޤ#if 
ʸˤ줬äϡץץʳ˿ǤԤϤޤ


  *  ANSI C 3.1.3.4 (C90 6.1.3.4) Character constants ʸ --
    Description ­
     C99 6.4.4.4 Character constants -- Description
     ANSI C 3.9.2 (C90 6.9.2) Character escape sequences ʸĥɽ
     C99 6.11.4 Character escape sequences
     C99 Ǥ \uxxxx, \Uxxxxxxxx η UCN (universal-character-name)
    Ȥ escape sequence ɲä줿

        [u.2.2]     #if ˥եȥȤʥӥåȥեȱ黻

  Υӥåȥեȱ黻Ǥϡ operandʥեȥȡˤͤǤ
꺸 operand ηΥӥåȿʾǤäꤷ undefined Ǥ*
  #if Ԥˤ줬äϥץץǤ٤Ǥ礦

  *  ANSI C 3.3.7 (C90 6.3.7) Bitwise shift operators ӥåñ̤Υե
    黻 -- Semantics ̣§
     C99 6.5.7 Bitwise shift operators -- Semantics

    [3.2]       Unspecified behavior

  Standard C ˤ unspecified ȤʡֵꤷʤפȤˤ⤢
ޤϡץǤäƤ⡢νˡϵꤷʤ
ϤϽˡɥȤ˽ɬפʤȤΤǤ
  Ϥޤ¿ϤޤǤ⡢ˡˤäƷ̤˰㤤
ΤϡüʾǤüǤäƤ⡢̤˰㤤
Ф붲ΤΤФƤϥ˥󥰤ФΤ˾ޤȻפޤ
  Unspecified ư˰¸ץη̤ undefined Ǥ
  ץץǤ unspecified ǡ⤽νˤäƷ̤äƤ
ΤϡΣǤΣĤΥƥȤǤϤ줾졢 pp-token 
ƿǥåФ뤫ȤܿʤȤ˥
Ф뤫ɤǤ 2 Ϳ뤳ȤˤޤޤԤξϡ
ޥǤŸǤɤǤɤȤˤޤ
  ʤΤۤ #if Ǥα黻ɾ unspecified Ǥ#if 
ϤˤäƷ̤Ѥ뤳ȤϤʤΤǡƥȤ˴ޤƤޤ

        [s.1.1]     # 黻Ҥ ## 黻ҤɾϻꤵƤʤ

  ĤΥޥ # 黻Ҥ ## 黻Ҥä硢Τɤ
餬ɾ뤫ϵꤵƤޤ*
  Υץ #  ## Τɤ餬ɾ뤫Ƿ̤äƤ
Ǥ⡢## ɾ # ϱ黻ҤǤϤʤñʤ pp-token 
ư졢Ϣη̤ pp-token Ƥޤޤ
ޥˤϰܿʤΤǡϤϥ˥󥰤ФΤŬǤ
    : [0,2]

  *  ANSI C 3.8.3.2 (C90 6.8.3.2) The # operator #黻 -- Semantics 
    ̣§
     C99 6.10.3.2 The # operator -- Semantics

        [s.1.2]     ʣ ## 黻ҤɾϻꤵƤʤ

  ĤΥޥʣ ## 黻Ҥ硢ɾϵꤵ
Ƥޤ*
  ΥץǤϡɾˤäƤ pp-token 
ޤޥˤϰܿʤΤǡϤϥ˥󥰤Ф
ŬǤ
    : [0,2]

  *  ANSI C 3.8.3.3 (C90 6.8.3.3) The ## operator ##黻 -- Semantics
    ̣§
     C99 6.10.3.3 The ## operator -- Semantics

    [3.3]       ˥󥰤˾ޤ¾Υ

  Undefined, unspecified Τۤˤ⡢Ϥ˥󥰤ФȤ˾
ޤĤޤ򤳤˽ޤ
  w.1.*, w.2.* ϵʤǤϤޤäץǤºݤˤϲ餫
δְ㤤Ǥ礬¿ǤפʤΤǤw.1.* ϥץץ˸
ͭǡw.2.* ϥѥեǤα黻Ȥⶦ̤ #if 
ǤǤ
  w.3.*  translation limits Ȥ implementation-defined ¦̤
˴ϢΤǤʤݾڤƤǾ¤ͤĶ transla-
tion limits 뤳ȤϡϤʼ夲뤳ȤǤȤޤ
¾ǡ˰¸ץϰܿ¤ƤޤȤ
ȯޤäơǾ¤ͤĶ translation limits 
ƤϤǤϡΤȤѤץФƥ˥
ФΤ˾ޤȹͤޤ
  ʲΥƥȤǤϡŬڤʿǥåФйʤȤޤw.3.* Ͻ
Ϥ translation limits ʤκǾͤȰפƤơΤᤳ
ץ뤬顼Ȥʤ뤳ȤƤ뤳ȤˤޤǾͤʤ
顼ȤʤΤԹʤǤƤ뤫ɤ n.37.* Ǥ狼ˡ

        [w.1.1]      /* 

  ȤͥȤƤꥳȥޡʤäꤹ륽
Υԥ󥰥ߥϤ褯ޤΤ/* /* */ */ ȤȤΥ
ȡ */  */ Ȥ sequence ϣøˤϤʤΤǡ
ѥեɬ顼ˤʤޤ*/ æƤ
ϼΥȤνޤǤȤȲᤵΤǡ顼ˤʤʤ
Ȥޤϴʴְ㤤Ǥꡢץץ˥󥰤Ф
ȤǤѥեǲ餫Υ顼ˤʤäǤ⡢
ˤϸϤ狼ʤʤäƤޤ
    : [0,4]

        [w.1.2]     ޥκ³Υȡ

  ޥκִꥹȤθΥȡ󤬼ޤ礬
ϡK&R 1st. ǤϰۤλͤǤꡢStandard C ǤϸǧλͤǤ
֤ΤϿҾʥޥǤϤޤ󡣤ȤִꥹȤ¾
function-like ޥƤӽФȾʬΤϡư۾ʥޥ
Ǥºݤˤϥޥδְ㤤Ǥǽ礭˥󥰤
Ȥ˾ޤޤObject-like ޥ function-like ޥ̾Ÿ
Τϼºݤˤޤreadability ΰǤ
  ˤĤƤϵʤΤ꤬ۤޤִꥹǴ뤷
ʤϥ顼violation of constraintˤȤ٤ǤȻפޤ
[1.7.6] ȡˡ
    : [0,4]ĤΥץΤĤǤǤ 2 

        [w.2.1]     #if ̾λѴ̵Ѵ

  դ̵Ȥκ黻˺ݤƤϡ̾λѴפ
졢դ̵ѴޤդǤä
ͤѤޤ󤬡ǤäϤ줬礭Ѵޤ
ϥ顼ǤϤޤ󤬡۾ʤΤǤꡢδְ㤤Ǥǽ
ޤϤ˥󥰤ФȤ˾ޤޤץץǤ
θݤ #if ˸ޤ
    : [0,2]

        [w.2.2]     #if ʤ黻 wrap round

  ̵黻η̤ϰϳȤʤä wrap round 뤳ȤˤʤäƤ
Τǡ褷ƥ顼ˤϤʤޤ󤬡ְ㤤βǽΤǥ˥
ФΤ˾ޤǤ礦
    : [0,1]

        [w.3.1]     31 ĤĶޥѥ᡼
        [w.3.2]     31 ĤĶޥ

  w.3.? Ϥ C90  translation limits ˴ؤƥȤǤƤ
ΤȤǡפʤǤ礦n.37.* ٤ƤߤƤ
    : [0,1]3.1, 3.2 ϣĤΤɤ餫ǤФࡣ

        [w.3.3]     31 ХȤĶĹ identifier

    : [0,1]

        [w.3.4]     8 ٥Ķ #if (#ifdef, #ifndef) Υͥ

    : [0,1]

        [w.3.5]     8 ٥Ķ #include Υͥ

    : [0,1]

        [w.3.6]     #if  32 ٥ĶΥͥ

    : [0,1]

        [w.3.7]     509 ХȤĶĹʸƥ

    : [0,1]ϥץץåǤʤƤ⡢ѥΤ
ǤɤȤޤ

        [w.3.8]     509 ХȤĶĹ

    : [0,1]

        [w.3.9]     1024 ĤĶޥ

   n.37.9 ƱΤˤʤäƤޤTranslation limits ε
Ǥϡ줬Ǥ⤪ޤʤΤʤΤǤ1024 ĤΥޥȤ߹ߥޥ
뤫ɤɸإåޥ뤫ɤǡ
äƤޤΥץǥƥȤޥϥإåեǤ
1024 ܤǤwarns.t, warns.c ˤϤƤޥ
ĤΤǡΥޥϤɤˤƤ 1024 ܤĶ뤳Ȥˤ
ޤϤŬʤȤǥ˥󥰤ФȤԤޤ
    : [0,1]

        [w.tlimit]  C99  translation limits

  C99 Ǥ translation limits ˳礵ޤĶͤ
ĽϤǤ⡢portability ΤˤϵĶ륽ФƤϥ
˥󥰤ФȤ˾ޤޤ
    : [0,8]ƹܤˤĤơ1 ġ3.1, 3.2 Ϥɤ餫
ǤǤФࡣ3.7 ϥѥΤǤʤ顢Ǥġ
  ƥѥץ test-l ǥ쥯ȥˤ롣ʤl_37_8.c ϥץ
ϤǤƤ⥳ѥϤǤʤǤ롣

        [w.3.1L]    127 ĤĶޥѥ᡼
        [w.3.2L]    127 ĤĶޥ
        [w.3.3L]    63 ХȤĶĹ identifier
        [w.3.4L]    63 ٥Ķ #if (#ifdef, #ifndef) Υͥ
        [w.3.5L]    15 ٥Ķ #include Υͥ
        [w.3.6L]    #if  63 ٥ĶΥͥ
        [w.3.7L]    4095 ХȤĶĹʸƥ
        [w.3.8L]    4095 ХȤۤĹ
        [w.3.9L]    4095 ĤĶޥ

    [3.4]       ¾γƼʼ

  ʲˤϡϤλȤ䤹ʼ˴ؤ򽸤Ƥޤq.1.1
ʳϥץץǥƥȤ뤳ȤΤǤʤΤǤ
  q.1.* ư˴ؤΤǤ
  q.2.* ϥץ˴ؤΤǤ
  q.3.* ϲƯ륷ƥ䥷ƥǤθΨ˴ؤΤǤ
  q.4.* ϥɥȤ˴ؤΤǤ
  q.5.* ϳĥǽ˴ؤΤǤ
  ˤϡʤŪɾˤ餶򤨤ʤΤ⤢ޤ
ޤҴŪɾǤΤΡμ٤ǤʤΤ⤢ޤ[5.2]
򻲹ͤˡŬ˺Ƥ

        [q.1.1]      traslation limits

  Translation limits ˤĤƤϡʤǤϺ¤λͤ䤫˵ꤵ
ƤޤºݤνϤϤͤäƤ뤳Ȥ˾ޤޤ
Ȥˡ#if Υͥȥ٥롢#include Υͥȥ٥ˤĤƤϡC90 
㤹ȹͤޤ
  C99 Ǥ translation limits ˰夲Ƥޤޤ
identifier ĹˤĤƤϡ255 Х̤¤ƤΤ
obsolescent featureѻͽεˤȤƤޤ
  q.* ιܤǤϤƥѥץ뤬ѰդƤޤtest-l
ǥ쥯ȥˤ l_37_?.t, l_37_?.c ǡ줾켡Τ褦 translation
limits ƥȤޤ C99 ΤΤ򤵤˾äƤޤʤ
C++ Standard Υɥ饤ȤƤ translation limits ͤϲäƤ
ˡ

    37.1L   :   ޥΥѥ᡼ο    :   255
    37.2L   :   ޥƤӽФΰο        :   255
    37.3L   :   identifier Ĺ               :   255 bytes
    37.4L   :   #if Υͥȥ٥              :   255
    37.5L   :   #include Υͥȥ٥         :   127
    37.6L   :   #if Υͥȥ٥      :   255
    37.7L   :   ʸƥĹ            :  8191 bytes
    37.8L   :   ԤĹ            : 16383 bytes
    37.9L   :   ޥο                  :  8191

  l_37_8.c ϥѥ뤷Ƥ¹ԥץˤϤʤޤ󡣥ץץ
Ǥз̤򸫤Ф狼ޤѥ뤹 cc -c
l_37_8.c Ȥƥ֥ȥեäƤץץ
СѥΤɤĹιԤ뤳ȤǤ뤫
狼ޤ
    : [0,9]ΥץˤĤƳ 1 ѥΤΥƥȤ
ޤޤʤ

        [q.1.2]     ǥåŪΤ

  ǥåФ뤳ȤϽФΤΡ狼ˤäꡢޤ
ꡢθĽ꤬狼ʤäꤹΤ⤢ޤοǥ
ϾܤФ뤬̤μοǤϥԥȤƤȤ⤢
ޤǥåñ "syntax error" ʤɤȤΤǤϤʤʤְ
ǤΤ򼨤Ƥ餤ΤǤĽϹԤ򼨤ơΥ
ŦƤ餤ΤǤ
  ޤ#if section бطΥ顼Ǥϡб٤Ԥ򶵤Ƥʤ
ȡɤ˥顼θΤ狼ޤ
  ƱΥ顼ФƤĤοǥåʣƽФΤϡޤ
ޤ
    : [0,10]

        [q.1.3]     ֹɽΤ

  ץץåѥΤϤֹ椬ƤޤΤϺޤ
Ͽǥå˸ΤǤصΩܤˤƤޤ
κϡޤǤΥץץΥƥȤǹֹ椬Τɽ
ɤǹԤޤˤϹֹϤʤץץå⤢
Ǥ
    : [0,4]

        [q.1.4]     ˽

    : [-20,0] Validation Suite Τɤ줫Υץ˽ꡢ
Ǥ٤ǤʤǤϤˤϡΤ褦˥ޥʥդ롣
˽פȤΤϡ^C Ǥ򤨤ʤʤäꡢꥻåȤ
ʤʤäꡢե륷ƥĤꤹΤǡǡפȤ
ΤϡﳲϤʤΤΡǽλƤޤΤؤ
  n_std.cstrictly conforming programˤ˽ -20 
  n_std.c ǽǤ -10 ǤĽθʬ򤵤
ƥȤ˽顢˽פʬˡ
  ʳΤɤ줫Υץ˽ -10 

        [q.2.1]     Include directory λ

  ɸإåե֤뤤 include directory ϺǤñʾ
ϣĽ˸ꤵƤޤʣ¸ߤ⤷ФФꡢ桼
ꤷʤФʤʤ⤢ޤޤ桼٥Υإåե
ˤĤƤϡȥǥ쥯ȥˤꤢޤ󤬡̤Υǥ
ȥˤäơ줬̤Υإåե include ϡ
Ϥˤäƥǥ쥯ȥ򥵡뵬§ۤʤޤɤˤƤ⡢
include directory ϥץĶѿˤäƥ桼Ū˻ꤹ
ȤǤʤؤǤ-I ץȤϤ¿ˡޤʣ
Υǥ쥯ȥ˥ϡƥǴΥǥ쥯ȥ򳰤
ץʤؤǤ뵬§ΤΤѹ륪ץ
⡢¸ͳޤ
    : [0,4]

        [q.2.2]     ޥץ

  ֥ͥޥ򥽡ǤʤѥǤ륪ץ
ϡͭѤʤΤǤ-D ץȤϤ¿ˡˤäơƱ
ΥäͤΥ֥Ȥäꡢäƥǥ
뤷ꤹ뤳ȤǤޤִꥹȤά 1 
ϤȣĤΥȡϤȤꡢȤϥɥȤΤ
ʤФʤޤ
  Ĥޥ⥪ץǤǤϤ⤢ޤ
  Trigraph ƤϤǤ⡢ΥץǤ줬ȤʤΤ
ҼǤʤκݡޤɾоݤˤϤʤˡ
    : [0,4]

        [q.2.3]     ޥäץ

  ϸͭȤ߹ߥޥäץ⡢äۤɤǤ
礦Τ褦ʼबޤ
  -U ȤäץǣĤΥޥäΡ
  ϸͭȤ߹ߥޥ礷̵ˤ륪ץ
  Standard C ǶػߤƤȤ߹ߥޥ_ ǻϤޤʤ unix 
礷̵ˤ륪ץ
    : [0,2]ΣޤϣΥץ󤬤 2  d.1.5 
ǤɾƤΤǡǤоݤȤʤ

        [q.2.4]     Trigraphs ץ

  Trigraphs ɬפʴĶǤϾѤΤǤ礦¿δĶǤɬפ
ΤǤۤȤɻȤޤ󡣤ϥѥΥץͭˤ̵
ˤǤۤɤǤ
    : [0,2]

        [q.2.5]     Digraphs ץ

  Digraphs  trigraphs ƱͤˡѥΥץͭˤ
̵ˤǤۤɤǤ礦
    : [0,2]

        [q.2.6]     ˥󥰻ꥪץ

  Violation of syntax rule or constraint ǤϤʤΤФ륦˥
ϡʤ٤¿Ū˽ФƤ줿ۤΩޤˤäƤϤ
뤵Ȥ⤢ޤ˥󥰤Υ٥ꤹ륪ץ󡢤ޤϼ
ऴȤ˥˥󥰤ͭˤ̵ˤꤹ륪ץϡߤ
ΤǤ
    : [0,4]

        [q.2.7]     ¾Υץ

  ץץˤϤΤۤˤͭѤʥץ󤬤Ĥꤨޤ䤿
˥ץ¿ΤѻǤʤȲλؤʤΤ⤢ޤ
Ū褯ΤϡֹϤʤץ-P ¿ˤǡ
ϣøʳŪ˻ȤΤȻפޤȤ˽Ϥ
Τ⤢ޤϣӤΥޥɥץåˤäƤϡǥåΥ
쥯ȤϤΤۤǼ¸ɬפΤ⤢ޤޤץ
ΩץǤϤʤ룱ѥѥǤϡץ
ץνϤꤹ륪ץ󤬤ߤȤǤ
  C90 (C95), C99, C++ ̤륪ץɬפʤΤǤ
C99  C++ θߴ夲C++ Υץץ C99 ΤΤ˶Ť
ץͭѤǤ礦
  Makefile 뤿Ρեΰ¸طҹԤϤ륪
ץäƤץץå⤢ޤ
    : [0,8]

        [q.2.8]     #pragma ˤĥ

  Standard C Ǥϡϸͭ preprocessing directive Ϥ٤ #pragma
 sub-directive ȤƼ¸뤳ȤˤʤäƤޤץץϤ
 #pragma 򤽤ΤޤޥѥϤޤ #pragma ϼʬ
ޤץץ #pragma ¿Ϥޤ
  #pragma once Ƚ񤤤Ƥإåեϲ #include Ƥ٤
ɤޤʤȤΤޤ¿ include 򤱤뤿
ʤ®٤夲뤿ͭʤΤǤ#pragma once Ȥ鷺ˡ
åեΤ㤨

#ifndef __STDIO_H
#define __STDIO_H
    ...
#endif

ȤäǤޤƤȡưŪˤ򼡲ϥʤ褦ˤ
Ϥ⤢ޤ
  إåե "pre-preprocess" ơ¿Υإåեܤˤ
ȤƤޤȤȤΤǤ #pragma directive ⤢ޤʤ
#include Ǽޤإå򤤤äץץƽϤ˸
줿 #define directive ޤȤƽϤɲäȤǽǤ
ΥѥǤϤ include ­ޤ pre-preprocess
إåեϡȤ #if ʤʤΤǥʤꡢ
ޥƤӽФʤʤޤե⣱ĤǤߤޤ
Ȥƥץץ®ʤޤ
  إå pre-compile ȤǽĽϤ⤢ޤϼȤ
C++ ǵʥإåե뤿˹ͤ줿ΤΤ褦Ǥ
pre-compiled header ΥΥإåեιפ礭ʤ뷹
ꡢʤȤ C Ǥ®ٸθ̤Ϥޤʤ褦ǤPre-
compiled header Ƥ compiler-proper ͤ˰¸Ƥơ桼
ˤϸʤ black box ˤʤȤ⡢Ǥ
  ɤˤƤ⡢ʾϤ٤ƥץץ®뤿ΤΤǡ
ΰ̣Ϥޤ󡣤äơεǽϤǤɾ[q.3.1]
ɾ뤳Ȥˤޤ
  Multi-byte character  encoding ꤹ #pragma ĽϤ⤢
ޤץץå䥳ѥ˥ʸ encoding ˡ
ƤϡʤΤǤ
  ʳ #pragma ǥץץǽΤϡޤꤢޤ
#pragma debug Ȥä directive ǡץץȥ졼
ХåϤ롢ȤΤޤ̾ΥǥХåǤϥץץ
ΥǥХåϤǤʤΤǡϥץץåǤǤʤפʵǽ
Ǥεǽϥץǻꤹ #pragma ȤۤǥХ
ĽǤΤǻȤ䤹ʤޤ
  顼䥦˥󥰤ΥȥλΤ褦ˡ̾ϥѥ
ץǻꤹ뤳Ȥ #pragma ǼƤϤ⤢ޤ#pragma
 Standard C νϤǤ portability ꤬ʤȤȡ
ξꤷƻǤȤĹ꤬ޤѹ
ؤ뤳ȤˤʤȤû⤢ޤʤ顢ѥ
ץǤƤ餤ΤǤ
    : [0,10]

        [q.3.1]     ®

  ΤȿǤŪΤȤϺǤפʤΤǤ®٤®ˤ
ȤϤޤ
  ®ٸΤ #pragma 䥪ץươ̤ȤƤɤ®
٤ˤʤ뤫򸫤ޤ
    : [0,20]ϤϤ˥ԡΡ⤷ʤץ®
٤ 20 ȤŪˤɤ٤ˤäդ롣Ū
ʼ٤ [5.2] 򻲹͡Ū®٤Ϥϡɥˤäư
ΤǡƱ٤ΥϡɥȤӤ롣ޤƱץ
Ƥ⡢ɤ߹ޤϤɸإå̤ˤäƽ֤äƤ
롣MCPP ȤӤΤɤ
  ֤¬ˤϡUNIX ϤǤ time ޥɤȤbash, tcsh ǤȤ߹
ߥޥɤǤ)DOS/Windows ϤǤϡCygWIN Ȥʤ顢Ϥ bash
 time ޥɤ롣ޤWindowsNT Ρ֥꥽åȡפ TimeThis
ȤƱͤΥޥɤ (*)餬ȤʤĶǤϡtool/clock_of.
c 򥳥ѥ뤷ƻȤʤʤΤǤ뤬ˡ

  *  WindowsNT Υ꥽åȤΥץˤ WindowsXP ǤϻȤ
    ȻȤʤΤȤ뤬TimeThis ϻȤ褦Ǥ롣ޤDOS μ
    ԥץФƤ⡢WindowsNT, WindowsXP Ǥ TimeThis Ȥ
    ȤǤDOS ư륪Сإåɤ礭ΤǡΤˤʤ
    ˡ

        [q.3.2]     

  ̤Ͼʤ˱ۤȤϤޤ󡣤Ȥ˥ƥͿ
̤˸¤ϡڼ¤Ȥʤޤ
  ץץϥѥΰǤΤǡºݤˤϽΤΥ
̤ȤʤޤץץΩץץåˤäƹԤ
ϡ̾ϥѥΤΤۤ򿩤Τǡץץå
̤ϤޤˤʤʤǤ礦ޥ¿
ʤɡץץåΤۤ out of memory ˤʤ뤳Ȥ⤢ޤ
̤ˤϥץ礭ФǤϤʤǡꥢλ̤ޤޤ
ޤ
    : [-20,6]̾λѤ out of memory ȯΤˤϥޥʥ
դ롣ǡ¬Ǥʤϥץॵɾ
롣UNIX ϤǤ file, ldd ޥɤ⻲ͤˤ롣tcsh  time ޥɤ
Ϥ⻲ͤˤʤ롣

        [q.3.3]     ܿ

  ץץåΤΤΥΰܿϡϤδ¸Υץץå
ȼؤ褦Ȥ䡢ʬȤ򥢥ץǡȤꥫޥꤷ
褦ȤˡȤʤޤΤ褦ɾоݤȤʤǤ礦
  Ƥ뤫ʸƤʤ 0 ˡ
  ¿νϡϣӤбƤ뤫
  ܿǤϡϣӤϰϤϤɤɤ郎󤵤Ƥ

  ܿ䤹
  ܿΤΥɥȤƤ뤫
    : [0,20]䤬ɤΤϣȾ餤ˤʤ
į᤿Ǥ롣äơκϤƤäݤǤ롣

        [q.4.1]     ɥȤʼ

  d.* Ǥ Standard C ΡֽפˤĤƤΥɥȤ뤫
ʤ򸫤ޤǤϥɥȤΤ¾ʼɾޤ
  ɥȤȤƤϽΤۤˡ¡ΤΤɬפǤ
礦
  Standard C ȤΰƱ
  ץλ͡
  ǥåΰ̣
  ΤۤStandard C ʬޤ᤿ץץΤλͤβ⤢
С˱ۤȤϤޤ
  ˤĤơΤɤߤ䤹ɾоݤȤʤ
Ǥ礦ܿΤΥɥȤ q.3.3 ɾ˴ޤޤ
    : [0,10]

    [3.5]       C++ Υץץ

  ýϤ C++ ϤȤä󶡤뤳Ȥ¿ʤäƤޤ
ξϥץץåϣä C++ ȤƱΤȤƤ褦Ǥ
ΤξԤΥץץϤۤȤƱʤΤǡ虜虜̤Υץץå
ѰդɬפϤʤǤ礦ξԤϤޤäƱǤϤޤ
  C++ Standard  C90 ٤ȡC++ Υץץ C90 Υץץ
˼λͤդäΤˤʤäƤޤ

  Basic source character set ˴ޤޤʤ character ϡtranslation
phase 1  \Uxxxxxxxx η Unicode Σ sequence Ѵ롣
ơ translation phase 5 Ǽ¹ԻʸåȤ˺Ѵ롣*1
  // ޤǤ򥳥ȤȤ롣*2
  ::, .*, ->* 򤽤줾죱Ĥ pp-token Ȥư*3
  #if Ǥ true, false  boolean literal Ȥơ줾 1, 0 
ɾ롣*4
  ISO C : Amendment 1 (1995) Ǥɸإå <iso646.h> ǥޥȤ
 11  identifier  operator ϡ٤ƥޥǤϤʤ
token Ǥ̵̣ʻ͡ˡ(*3) Ʊͤˡnew, delete  operator Ǥ
롣*5
  ޥ __cplusplus  199711L  pre-define Ƥ롣*6
  .__STDC__ 뤫ɤȤФɤ뤫
implementation-defined Ǥʵդ C99 Ǥ __cplusplus 
undefined Ǥˡ*6
  Translation limits ϼΤ褦˳礵Ƥ롣
ϥɥ饤Ǥꡢ׵ǤϤʤϤ translation limits ɥ
ȤʤФʤʤ*7
    ԤĹ            :   65536 Х
    ʸƥ롢ʸheader name Ĺ    :   65536 Х
    Identifier Ĺ               :   1024 ʸ
    #include Υͥ               :   256 ٥
    #if, #ifdef, #ifndef Υͥ   :   256 ٥
    #if ΥåΥͥ          :   256 ٥
    ޥΥѥ᡼ο          :   256 
    Ǥޥο            :   65536 
  Header name  '.' Ĺˡʵʤˤ¤Ϥʤʤä*8

  C99 ǤϤΤƱͤˤʤäƤޤ¾ϰۤʤޤޤ
C99 ǤϤˡư p+, P+ Ȥ sequenceidentifier 
 multi-byte character ȤθǧѰޥι
ˡ #pragma ԤΰΥޥŸġ_Pragma() operator#if  long
long ʾǤɾܤ wide-character-string-literal  character-
string-literal  wide-character-string-literal ȤƤϢääơ
㤬ȯƤޤUCN  C99 Ǥ translation phase 5 ε
ˤʤޤUCN ˴ؤ constraint ⾯㤷Ƥޤ
Translation limits  C99 Ǥ C90 ˳礵줿ΤΡC++
Standard ۤɶüǤϤʤǤ㤤ФƤƤޤ
  ۤ礭ʰ㤤ǤϤʤȤޤǤ⤳㤦ȡä
C++ ƱץץǤޤ櫓ˤϤޤ󡣣äˤĤƤ⡢C90 (C95)
 C99 ȤƱΥץץǴ֤˹碌뤳ȤϤǤޤ
  ʤC++  __STDC__ ƤΤϴְ㤤ΤȤǤꡢޤ
ȤǤϤޤ
  __cplusplus ˤĤƤϡ -D ץϤ⤢ޤ
Ǥϥ桼ޥΣĤˤʤäƤޤΤǡŬڤǤ
  ::, .*, ->* 򣱤Ĥ token ȤưɤϡץץǤϤۤ
ˤʤʤȤǤ˱ۤȤϤޤ
  ȤǡC90 (C95), C99, C++ δ֤ǥץץå̤ˤ뤿
ˤϡ¹ԻץǻԤ̤˱ƾ嵭νѤ
ȤΤޤȤʼȻפޤ

  ʤMCPP ǤϾ嵭λͤΤΣϡѤ٤Ƽô
뤿ᡢбƤޤ󡣼ѾϤǤۤȤʤȻפ


  Translation phase 1 Ǥ UCN ؤѴϼƤʤC++
Standard Ǥϡɬ UCN ѴʤƤ⡢Ʊ̤ˤʤʤ
ȤƤ롣ѾϤȤ⤫̩ˤϡѴ˾Ʊ
ˤʤϤϤʤΤǤ롣#if Ǥ UCN  multi-byte-character Ȥʸ
ӤͤФ狼롣# 黻Ҥˤʸ󲽤Ǥ⸷̩˸С
꤬롣*9
  ޥκѥ᡼ 255 ĤޤǤǤʤ

  MCPP ǤϤޤ-+ -V199901L ץ C++ ץץåȤƵư
 __cplusplus  199901L ʾͤˤȡ[1.8] ΣˤĤƤ
ʳ C99 Ʊͤ˳ĥޤʣϥץʤǤƱ
롣 MCPP ѥμˤˡ

  ʲˡC90 Υץץղä C++ ȼΥץץ
ؤŬΥƥȤ򼨤ޤ
  ե̾ *.cc ȤʤäƤʤ C++ ΥȤǧʤ
ϤǤϡ*.cc ˥ԡƥƥȤޤ
  Translation limits ˤĤƤ test-l ǥ쥯ȥˤΰʾΥ
ץѰդƤޤC++ Ǥ translation limits ϥɥ饤ˤ
ʤȤȤ⤢ꡢǤɾоݤȤޤ󡣤ޤheader name 
Ĺ OS ʤΤǡƥȤоݤȤޤ

  *1  C++ 2.1 Phases of translation
  *2  C++ 2.7 Comments
  *3  C++ 2.12 Operators and punctuators
  *4  C++ 2.13.5 Boolean literals
    ʤC99 Ǥ <stdbool.h>  bool, true, false,
    __bool_true_false_are_defined ޥȤƤ줾 _Bool, 1, 0, 1
    뤳ȤˤʤäƤ롣
  *5  C++ 2.5 Alternative tokens
  *6  C++ 16.8 Predefined macro names
  *7  C++ Annex B Implementation quantities
  *8  C++ 16.2 Source file inclusion
    C90 6.8.2 Ǥϡheader name  '.' 麸ˤϣʸޤǤݾڤ
    ƤʤäC99 6.10.2 ǤϣʸǤ롣C++ ǤϤ
    Ƥ롣
  *9  C99 Ǥϡ# 黻Ҥˤä UCN ʸ󲽤줿硢\ Ťͤ뤫
    ɤ implementation-defined Ǥ롣C++ ˤϤεϤʤ
    Ťͤϡ UCN ϤϤ multi-byte character ʤΤǡ
    ŤͤʤۤɤǤ롣C++ εǤϡŤͤʤΤ
    ְִä׼ˤʤäƤޤ

        [3.5.n.ucn1]    UCN ǧ
    : [0,4]

        [3.5.n.cnvucn]  Multi-byte character  UCN ؤѴ
    : [0,2]

        [3.5.n.dslcom]  // 
    : [0,4]

        [3.5.n.bool]    true, false  boolean literal
    : [0,2]

        [3.5.n.token1]  ::, .*, ->* ϥȡ
    : [0,2]ƥȤ츫褦Ǥ⡢äǽƤƱ褦ˡ
Υ˥󥰤Ф˥ȡϢ뤬פƤޤΤǤϡԲġ

        [3.5.n.token2]  Operator إȡ
    : [0,2]

        [3.5.n.cplus]   ޥ __cplusplus
    : [0,4]__cplusplus < 199711L ξ 2 

        [3.5.e.operat]  identifier-like operator ϥޥ̾˻Ȥʤ
    : [0,2]ĤȤ⥦˥οǥåФ 2 

        [3.5.u.cplus]   #define, #undef __cplusplus
    : [0,1]˥οǥåФ 1 

        [3.5.d.tlimit]  Translation limits Υɥ
    : [0,2]


                    åץץμա

  åץץåεʽ٤ʼȤ̤ˡºݤ˥ץץå
Ȥ˽в񤦼դ򡢰ʲ˼夲Ƥߤޤ

    [4.1]       ɸإå

   Valadation Suite ΥץǤϡĤɸإå include
ƤޤΥإå񤫤ƤʤȡץץåΤ
ΤΥƥȤΤˤǤޤ
  ʲˡɸإåμ䤹Ȥ򸫤Ƥޤ

        [4.1.1]     Ū

  ɸإåϵꤵƤؿ䷿ޥ򤹤٤ƴޤǤ
ʤФʤʤΤϤǤ˼Τ褦ʾʤ
ʤʤȤˤʤäƤޤ

  ꤵƤ餺ͽ󤵤Ƥ⤤ʤ idendifier 
ꤷƤϤʤǤϰϤɸإåˤäƷޤäƤʽ
ʣ롢뤤϶̤ϰϤ⤢ˡ*1
  äơĤɸإå̤ɸإå include Τ
Ϥʤ
  ʣɸإåɤΤ褦ʽ include Ƥ⡢Ʊ̤ˤʤ
ʤФʤʤ*2
  Ʊɸإåʣ include Ƥ⡢<assert.h> ʳƱ̤
ʤʤФʤʤ*2
  Ÿ object-like ޥȤƵꤵƤΤ
٤ #if ǤʤФʤʤ*3

  ͽ󤵤 identifier ϰϤϵꤵƤꡢʳ identifier 
桼˲ƤʤФʤޤ'_' ĤޤϣĤǻϤޤ̾
٤Ʋ餫λѤΤͽ󤵤ƤΤǡϤɸإåǻȤ
ȤǤޤʵդ˥桼 '_' ĤޤϣĤǻϤޤ̾Ƥ
ʤˡ
  ϾʵǤʳŪ̾Ϥ٤ '_' ǻϤޤ
Τѹʤ Standard C ǤϻȤʤȤȤˤʤޤStandard C
Υ饤֥ɸإåενȯȤʤä POSIX Ǥ⡢Standard C 
ʳ̾

    #ifdef  _POSIX_SOURCE
        ...
    #endif

ǰϤळȤˤƤޤʤȤ⤳ʬȤϽϤ Standard
C ǤϤʤʤäƤޤޤ
  ⡢㤨 open(), creat(), close(), read(), write(), lseek() 
ؿ̾ɸإåˤϸƤʤƤ⡢fopen(), fclose(), fread(),
fgets(), fgetc(), fwrite(), fputs(), fputc(), fseek(), etc. δؿ
open(), etc. ȤäƼƤСŪ˥桼֤̾򿯳
뤳Ȥˤʤޤäơɽ open(), etc.  _POSIX_SOURCE
ʬ <unistd.h> ̥إåˤꤷƤ⡢̣ޤ
  ֥ƥॳؿפ '_' ǻϤޤ̾ѹ뤫
Ȥ¾ɬܤΤΤ Standard C ˼뤫ɤ餫Ԥ
ޤ

  ϵƤ뤳ȤǤϤޤ󤬡ɸإå¾ɸ
å include ȡ̾ϤɸإåǤʤ̾
̤ˤʤΤǡˤҤäޤ<stddef.h> ɸإå
include ꤹΤȿ§Ǥ򤱤뤿ˤ <sys/_defs.h> Ȥ
ä̤̾ɸǤϤʤإåѰդơɸإå<stddef.h> 
Ȥˤ include 褦ˤɤΤǤơǻȤ
̾Ϥ٤ '_' ǻϤޤΤˤ뤳ȤǤ*4, *5

  ϼºݤȤʤ뤳ȤϤʤǤ礦

  ϸŤϤǤΤäȤǤߤνϤǤϤۤȤ
бǤƤ褦Ǥ

#ifndef _STDIO_H
#define _STDIO_H
    ...
#endif

ȤäɸإåΤ򤯤ˡŪǤΤۤ#pragma
once Ȥäĥ directive Ȥˡ⤢ޤ

  ȤʤΤϡsizeof 䥭㥹ȤȤäޥɸإå˽
ƤϤ뤳ȤǤStandard C Ǥϡ#if  sizeof 䥭
ȤϻȤޤ󡣼ºݤɸإåΥޥ sizeof 䥭㥹ȤȤäƤ
ϤǤϡ#if Ǥ sizeof 䥭㥹ȤȤ褦ǤTurbo C,
Borland CˡϳĥͤΤĤʤΤǤ礦
  桼ʬΥץ #if Ԥ sizeof 䥭㥹ȤȤʤ¤ꡢ
portability ꤬ȯ뤳ȤϤʤ¾ȯ뤳Ȥϼºݤˤ
ޤʤǤ礦Υץץμ Standard C Ρֳĥ
ǤϤʤְæפȸ虜򤨤ޤ󡣤ʤʤ顢Standard C Ǥ #if 
Τ translation phase 4 Ǥꡢ phase Ǥ keyword ¸
ʤΤǤKeyword  phase 7 ǽǧޤPhase 4 Ǥ
keyword Ʊ̾Ϥ٤ñʤ identifier Ȥư졢#if ԤǤϥޥ
ȤƤʤ identifier Ϥ٤ 0 ɾΤǡsizeof
(int)  0 (0) ȡ(int)0x8000  (0)0x8000 Ȥʤꡢviolation of syntax
rule ȤʤޤФƽϤϿǥåФʤФʤ
󡣿ǥåФʤΤϡStandard C ΡֳĥפǤϤʤְæ
Ǥޤ⤽ phase 4 ǰ keyword ǧȤΤϡ
ץȤ̵ꡢcompile phase (translation phase 7)
 "pre"process phase ȤƤΰ̣𤵤ΤȤޤ*6
  ɴäƤֳĥ͡פȤǧȤƤ⡢ʤȤ sizeof 
㥹Ȥޤ #if ԤФƤϥ˥󥰤Ф٤Ǥ礦

  *1  ANSI C 4.1.2.1 (C90 7.1.3) Reserved identifiers ͽѤ߼̻
      C99 7.1.3 Reserved identifiers
  *2  ANSI C 4.1.2 (C90 7.1.2) Standard headers ɸإå
      C99 7.1.2 Standard headers
  *3  ANSI C 4.1.6 (C90 7.1.7) Use of library functions 饤֥ؿ
    ˡ
      C99 7.1.4 Use of library functions
  *4  ܤǤϤˡȤƤ롣ܤϤȤ˽ϤμˤȤ
    ơͤȤʤ¿
        P. J. Plauger "The Standard C Library", 1992, Prentice Hall
  *5  GNU  glibc ΥƥǤϡɸإåȤˤä <stddef.h> 
    ¾ɸإåʣɤ߹ޤ褦ˤʤäƤ뤬λ
    Τͽ󤵤줿ϰϤ̾Τ褦Ǥ롣ϵʰȿȤϸ
    ʤɸإå readability »ʤƥʥ󥹤
    ˤΤǡɤˡǤϤʤ<sys/_defs.h> ȤäեȤ
    ۤɤ
  *6  [1.3], [2.4.14] ȡ

        [4.1.2]     <assert.h>

  ˸ġɸإå򸫤ƤޤĤνϤ°ɸإ
򸫤ȡǤ¿Τ <assert.h>  <limits.h> Τ褦Ǥ
ĤϺǤñʥإåʤΤǤStandard C ǿꤵ줿ΤǤ
뤿ᤫְ㤨뤳Ȥ褦ǤΣĤˤĤƤϡȤ
⾯ޤ

  ޤ <assert.h> Ǥ*1, *2
  ¾ɸإåȰäƤϡ include ƤƱȤ櫓
ϤޤNDEBUG Ȥޥ桼뤫ʤˤäơ
include 뤿Ӥ˷̤ѤޤʤΥإåɬפ˱Ƥ


    #undef      NDEBUG
    #include    <assert.h>
        assert( ...);

ȤȤ򤹤ΤǤơǥХåΤȤ

    #define     NDEBUG
    #include    <assert.h>
        assert( ...);

ȤƤޤNDEBUG ƤСassert( ...); ˻Ĥ
ƤƤ⡢ޥŸȾäƤޤޤ... ѤļǤ
äƤ⡢ɾʤΤǡѤȯʤȤաˡ
  ȤǤ뤿ˤϡ<assert.h> 

    #ifndef _ASSERT_H
    #define _ASSERT_H
        ...
    #endif

ʤɤȤǤǤϤޤ#pragma once ʤɤ⡢񤤤
Ϥޤ
  ޤΤȤ狼褦ˡassert() ϥޥǤꡢNDEBUG ˤ
ƤѤޤ<assert.h> Ϥ #undef assert Ȥǡ
NDEBUG ˱ assert ޥʤɬפޤ
  assert( expression) ȤƤӽФǤϡNDEBUG ƤʤС
expression Ǥв⤻ǤФλݤɸ२顼Ϥ
ޤϡexpression 򤽤Τޤ޻̤ɽʥޥ
ƤŸˡΥΥե̾ȹֹɽޤϥץ
å # 黻Ҥ __FILE__, __LINE__ ޥƤС
ñ˼¸Ǥޤ
  ºݤˤϾŤϤǤϡ# 黻ҤƤʤäꡢ
<assert.h> ְ㤨ƤΤޤ Validation Suite
Υץˤ <assert.h>  inlcude ƤΤ¿ޤ
<assert.h> 񤫤ƤʤȥץץåȤΥƥȤΤˤ
ޤ <assert.h> ϴñ˽񤱤Τǡ°ΤΤ
нľƤۤɤǤ礦ΤΤ C89 Rationale 4.2.1.
1 㼨ƤΤǤ󤳤Ǥ⡢# 黻Ҥ
ʤΤʷ̤ˤϤʤޤ󤬡ϥץץåʤΤǡ
򤨤ޤ

#undef  assert
#ifndef NDEBUG
#   define  assert( ignore)     ((void) 0)
#else
    extern void __gripe( char *_Expr, char *_File, int _Line);
#   define  assert( expr)   \
        ((expr) ? (void)0 : __gripe( #expr, __FILE__, __LINE__))
#endif

  __gripe() ȤؿϼΤ褦˽񤱤ޤʤ__gripe Ȥ̾
 '_' ǻϤޤΤʤ鲿Ǥ褤ˡ

#include    <stdio.h>
#include    <stdlib.h>

void    __gripe( char *_Expr, char *_File, int _Line)
{
    fprintf( stderr, "Assertion failed: %s, file %s, line %d\n",
            _Expr, _File, _Line);
    abort();
}

  __gripe() δؿȤ鷺 fprintf() 뤤 fputs()  abort() 
ľ <assert.h> ˽񤤤ƤϤ⸫ޤäƤǤʤ
ǤϤޤ󤬡ΤˤϤδؿɬפǤFILE 
stderr ɬפǤ<stdio.h>  include 櫓ˤϤ
ΤǡʤäǤ̴ؿְۤ㤤ޤ
  ޤʤȤǤ٤ƤޥǼ¸ϡƤӽФΤ
Ӥʸƥ뤬ʣޤʣʸƥ򣱤Ĥ
ޡŬϤʤϡɥξǤǤϤ
ޤ

  *1  ANSI C 4.2 (C90 7.2) Diagnostics <assert.h> ǵǽ<assert.h>
      C99 7.2 Diagnostics <assert.h>
  *2  C99 Ǥϡassert() ޥɤδؿƤӽФ줿ɽ뤳
    ȤˤʤäӤΤˡ__func__ Ȥ̻Ҥꤵ
    Ƥ롣

        [4.1.3]     <limits.h>

  ɸإåϰɽޥ񤤤ƤΤǤ
ΥޥνϡͤȹפƤ뤳ȤϤǤ
˼ξƤɬפޤ*1

  #if directive ǻȤǤ뤳ȡ
  б뷿Υ֥Ȥ integral promotion ̤ηƱ
μǤ뤳ȡ

  㥹ȤȤäƤϤޤ#if directive Ǥ sizeof 䥭
㥹Ȥ Standard C ϰϤˤʤȤϡ[4.1] ޤ⤽⡢
<limits.h> ꤵ줿̣ϡ㥹Ȥ sizeof Τ褦ʼ¹Ի
˴ؤȲ򡢥ץץåɬפʤ褦ˤ뤳Ȥˤޤ
  㤨С

#if (int)0x8000 < 0

Ȥ

#if sizeof (int) < 4

ȤȤˡ

#include    <limits.h>
#define VALMAX  ...
#if INT_MAX < VALMAX

ȤΤǤ#if Ǥ <limits.h> ΥޥȤС㥹Ȥ sizeof 
ȤɬפϤʤϤǤ

  <limits.h> Υޥְ㤨ƤϡޤϤ
ץץåλͤ餯ΤǤϤʤ<limits.h> 񤯿ͤ嵭Σ
 integral promotionĥˤ usual arithmetic conversion
̾λѷѴˤε§ȡɾε§Τɤ줫
ǰ뤳Ȥ鵯ΤΤ褦Ǥ
  㤨СΤ褦򤷤ƤΤޤ

    #define UCHAR_MAX   255U

  unsigned char ͤϡCHAR_BIT  8 ǤСˤ٤ int ϰϤˤ
ޤΤǡunsigned char Υǡ֥Ȥͤ integral promotion
ˤä int ˤʤޤä UCHAR_MAX  int Ȥɾ
ΤǤʤФʤޤ󡣤Ȥ255U Ǥ unsigned int ˤʤäƤޤ
ޤ

    #define UCHAR_MAX   255

ȤʤФʤʤΤǤ
  ɤǤѾʤΤǤϤʤȻפ⤷ޤ󤬡ɬ
ǤϤޤ̵ηޤ黻ϡ̾λѴפ
Ʊդη̵ؤѴޤΤᡢ
Ӥη̤äƤΤǤ

    assert( -255 < UCHAR_MAX);

ȤƤߤȡ狼Ǥ礦
  δְ㤤ˤϡintegral promotion  usual arithmetic conversion ε
§ Standard C ǤϤޤǤ¿νϤǺѤƤΤѹ
줿Ȥ𤬴طƤޤK&R 1st. ˤ unsigned char, unsigned
short, unsigned long ȤϤޤǤθ塢¿ν
˼褦ˤʤꡢƤνϤ¿Ǥϡ̵Ͼ
̵Ѵ뤳ȤˤʤäƤޤ
  Standard C  integral promotion Ǥϡunsigned char, unsigned
short Ϥ줾줹٤Ƥͤ int ϰϤˤޤ¤ int  promote
졢Ǥʤ unsigned int  promote ޤޤ
unsigned int  long Ȥδ֤ usual arithmetic conversion Ǥϡunsigned
int Τ٤Ƥͤ long ϰϤˤޤΤǤ long ˡǤʤ
 unsigned long Ѵޤ"unsigned preserving rules" 
"value preserving rules" ؤѹȸƤФΤǤΤۤľŪ
ճʤȤΤεͳȤƤޤ<limits.h> 
ϡε§դɬפǤ*2

  ʲǤϤ٤ơshort ϣӥåȡlong ϣӥåȤȤޤ
USHRT_MAX ͤ 65535 Ǥν int ӥåȤξȣ
ӥåȤξȤǰäƤޤ

    #define USHRT_MAX   65535U      /* int ӥåȤξ   */
    #define USHRT_MAX   65535       /* int ӥåȤξ   */

  unsigned short  int ӥåȤξ int ϰϤˤޤʤ
ǡunsigned int  promote ޤäơUSHRT_MAX  unsigned
int ȤɾΤǤʤФʤޤ65535 Ǥ long Ȥɾ
Ƥޤޤ 'U' ɬפʤΤǤ¾ int ӥåȤξ
 unsigned short ͤϤ٤ int ˤޤΤǡint  promote 
ޤä USHRT_MAX  int ȤɾΤǤ뤳Ȥɬפ
'U' դƤϤޤ󡣤Ȥ줬դˤʤäƤ㤬


    #define USHRT_MAX   0xFFFF

  ʤ顢int ӥåȤǤ⣳ӥåȤǤɾޤ
Standard C ǤϡU, u, L, l ȤҤɤդʤʤޤϣ
ȡϡint, unsigned int, long, unsigned long νǡ
ǤͤɽǤ뷿ɾޤʤ0xFFFF  int 
åȤʤ unsigned int  65535int ӥåȤʤ int  65535 ɾ
ΤǤФơҤդʤȡϡ
int, long, unsigned long νɾޤ65535  int ӥåȤ
 longint ӥåȤʤ int ɾ뤳Ȥˤʤޤ*3

  C99 Ǥϡ long long / unsigned long long ɲäޤ0  1 
ͤʤ _Bool Ȥɲäޤ¾η⥪ץ
ǼǤ褦ˤʤޤInteger promotion Υ롼礵졢
unsigned long ɽǤʤȡ long long / unsigned long
long ɾ뤳Ȥˤʤޤ
  ޤǧ줿Τȼäơ羮
ط狼ˤʤäᡢinteger conversion rankѴ󥯡
ȤǰƳޤγǰϤʣǤѾϵˤɬ
פϤޤɸǤϥ󥯤羮طϼ̤Ǥ

    long long > long > int > short > char > _Bool

  ǡȤ long  int Ȥ 32 ӥåȤȤ褦ʥƱ
ǤäƤ⡢󥯤羮϶̤ȤȤݥȤǤ *
4, *5

  *1  ANSI C 2.2.4.2.1 (C90 5.2.4.2.1) Sizes of integral types <limits.h>
    礭<limits.h>
      C99 5.2.4.2.1 Sizes of integer types <limits.h>
  *2  ANSI C 3.2.1 (C90 6.2.1) Arithmetic operands ѥڥ
      C99 6.3.1 Arithmetic operands
  *3  ANSI C 3.1.3.2 (C90 6.1.3.2) Integer constants 
      C99 6.4.4.1 Integer constants
  *4  C99 6.4.4.1 Integer constants
  *5  C99 Ǥ integer types νϤˤۼ뤿 <stdint.
    h>  <inttypes.h> ȤɸإåɲäƤ롣64 bits 
    ƥоˤä integer types μबơбط狼
    ˤʤäƤᡢlong Ȥ short Ȥ̾ΤۤˤĤη
    ̾ typedef 褦ȤΤǤ롣η̾ 26 ⤢ꡢ
    б͡Ǿͤɽޥ 42 б fprintf()
     format specifier Ѵޥ 56 Ʊͤ fscanf() 
    format specifier Ѵޥ 56 ˤ롣Ϥô
    ޤʤȤϸѻơɾΤ褦ʰݤʤ
    Ϥʤ

            [4.1.3.1]   INT_MIN

  <limits.h> ΥޥΤǺǤ⺮θΤɽ
ĥƥǤ INT_MIN  LONG_MIN ǤǤ int ӥåȤ
long ӥåȤνϤǤ INT_MIN 嵭򤹤٤ƸƤ
ǡäˤʬƼ夲Ƥߤޤ
  ξ硢int ϰϤ [-32768,32767] Ǥ뤳ȤϸޤǤ⤢ޤ
ơINT_MAX ˤĤƤϤɤνϤ 32767 뤤 0x7FFF ȤƤơ
ꤢޤ󡣤ȤINT_MIN Τ褦Ƥ򸫳ݤ


    #define INT_MIN     (-32767)

  ʤΤ褦ʼºݤȰ㤦򤷤ƤΤǤ礦
  ¾ǡˤƤϤϸޤ

    #define INT_MIN     (-32768)

  -32768  -, 32768 ΣĤΥȡ󤫤äƤޤơ32768 
int ɽǤϰϤˤޤ󡣤ǡ long ɾޤ
äơ-32768  - (long) 32768 ΰ̣ˤʤäƤޤΤǤ
  ˤϡƤΤ⤢ޤ

    #define INT_MIN     ((int)0x8000)

  㥹ȤȤäˤĤƤϡȤϷ֤ޤ0x8000 
Ǥ (unsigned) 32768 ΰ̣ˤʤΤǡϤԲĤǤ

  ǤϡɤС㥹ȤȤ鷺 (int) -32768 ɾΤ
礦

    #define INT_MIN     (-32767-1)

  ɤΤǤ32767  INT_MAX Ǥ 0x7FFF Ǥ⤫ޤޤ󡣤
ˤϰȤ黻ޤޤƤޤꤢޤʤ⤽
ñ - 黻ҤǤˡ*1, *2

    #define INT_MIN     (~INT_MAX)
    #define INT_MIN     (1<<15)

  Ǥ

    #define INT_MIN     (-32767)

  ϱ黻򤹤Ȥۤ⤫Фʤäˡͤ뤳
Ȥ򤢤᤿Τȿ¬ޤ

  Ǥϡ-32767 Ȥϴְ㤤Ǥ礦Ȥ⡢
ʤΤǤ礦
  Сϴְ㤤ȹͤޤ
  INT_MIN  int κǾͤɽޥȵꤵƤޤ⤷ INT_MIN 
-32767 ȤȡϤạ̈ΤʤΤǤ礦
ơINT_MIN-1 ϤäʤΤǤ礦뤤 ~INT_MAX  1<<15
ϲǤ礦
  ξ INT_MIN-1 ˤĤƤϡư黻ΡפΤ褦ϰ
ɽӥåȥѥȤͤ褦Ǥ
  ˴ؤ Standard C εȾȤ餷碌ȡβ
Ω;Ϥޤ󡣤ޤˤĤƤΥӥåȱ黻η̤ϡop1
<< op2  op1 >> op2  op2 ͤǤ뤫 op1 ηΥӥåȿʾ
礬 undefined Ǥʳˤ undefined ʾϤʤ٤
ΰդ֤ͤޤ~op  op  int ǤСη̤ int 
ꡢop1 & op2, op1 | op2, op1 << op2, op1 >> op2  op1, op2 Ȥ
int ǤСη̤ int Ǥäơ~INT_MAX  1<<15 
 int ʤΤǤ1<<15  overflow Ȼפ⤷ޤ󤬡Ǥ
ޤ󡣥ӥåȱ黻Ǥϥӥå򤷤̤Υӥåȥѥб
֤ͤΤǡoverflow ȯ褦ʤΤǤ
  äǤϰ̤α黻Ϥ褯Ƥơundefined ʬϤ
ƾʤΤǤȤ˥ӥåȥѥͤȤδطϡ
ͤɽ 0 ˣĤΥӥåȥѥ󤬤ʳϡ˰а
Ƥޤ K&R 1st.  Standard C ޤǰӤΤǤޤ
ӥåȥѥ󤽤ΤΤɽˡϣäˤϤʤפɽ褦
 (-32767-1) Ƚ񤯤ޤ󤬡ϸƤ̤ int ͤ
ΤǤC89 Rationale ϤĤκ󤲤ơˤϡ̵
Ȥפɽӥåȥѥ¸ߤ;ϤΤʤȤ餫
Ƥޤ*3, *4
  ȤǡɽǤ ~INT_MAX  INT_MIN ͤǤꡢ
礭 INT_MIN ϴְ㤤ȸ虜򤨤ޤ

  *1  䤬ƸΤϡP. J. Plauger "The Standard C
    Library" Ǥ롣ǶνϤˤϤή limits.h ¿ʤäƤ
    褦Ǥ롣
    ܤ limits.h ˤְ㤤ΤǤ롣int ӥåȤ
    long ӥåȤνϤΤΤ褦ˤʤäƤ롣
        #define UINT_MAX    65535
        #define USHRT_MAX   65535
    Ǥ long ɾƤޤϤǤ롣
        #define UINT_MAX    65535U
        #define USHRT_MAX   65535U
  *2  ǶνϤǤ *_MIN  (-*_MAX - 1) ȤŪˤ
    ꡢְ㤤ϾʤʤäƤ롣ޤ˴ְ㤤롣
    Visual C++ .net 2003  Vc7/inlude/limits.h, Vc7/crt/src/include/
    limits.h ˤϼΤ褦ʤΤ롣
        #define LLONG_MIN   0x8000000000000000
    0x8000000000000000  unsigned long long ɾ롣ηϺǹ
    ̥󥯤ǤΤǡinteger promotion η̤ƱǤ롣ޥʥ
    ͤˤϷ褷Ƥʤʤäơ
        #if LLONG_MAX > LLONG_MIN
    ϴԤ̤ˤϤʤʤ

    LCC-Win32 V.3.2  include/limits.h  LLONG_MIN ϤʤäƤ롣
        #define LLONG_MIN   -9223372036854775808LL
    9223372036854775808LL ϤΥȡͤǤ signed long long 
    ϰϤ overflow Ƥ violation of constraint Ǥ롣
        #define LLONG_MIN   -9223372036854775808LLU
    Ȥ 9223372036854775808LLU  unsigned long long ˤʤ뤬
    ̵ unary - 黻ܤƤ⡢̤ηѤʤΤǡunsigned
    long long ɽǤʤͤȤʤꡢundefined Ǥ롣

    Visual C++  LCC-Win32 ¾ *_MIN Ϥ٤ (-*_MAX - 1) 
    ʤäƤΤǤ뤬LLONG_MIN ְäƤΤϤɤȤǤ
    
        #define LLONG_MIN   (-LLONG_MAX - 1LL)
    ȤвϤʤ
  *3  C89 Rationale 3.1.2.5 Types
      C99 Rationale 6.2.6.2 Integer types
  *4  C99 ǤϡΥӥåȥѥ㳰 "trap
    representation" ȤưȤ⡢Ϥ˵뤳ȤˤʤäƤ롣
    ºݤˤɤϤΤϡΤʤ

        [4.1.4]     <iso646.h>

  ISO C 9899:1990 / Amendment 1 Ǥϡiso646.h Ȥɸإåɲä
ޤ &, |, ~, ^, ! ޤ黻Ҥ ISO 646  invariant
character set ɽ spelling 󶡤ΤǤ|, ~, ^ 
trigraphs Ǥ spelling 󶡤Ƥޤtrigraphs 
readability ˷礱Τǡiso646.h Ϥäƣα黻Ҥȡ
ñ̤ǥޥƤޤ
  μϤƴñǡΤ褦ʤΤǽʬǤץץǥޥ
ŸΤǡϤˤȤäƤⲿݤϤޤ*

/* iso646.h     ISO 9899:1990 / Amendment 1 */

#ifndef _ISO646_H
#define _ISO646_H

#define and     &&
#define and_eq  &=
#define bitand  &
#define bitor   |
#define compl   ~
#define not     !
#define not_eq  !=
#define or      ||
#define or_eq   |=
#define xor     ^
#define xor_eq  ^=

#endif

  *  C++ Standard Ǥϡ identifier  operator ϥޥǤϤʤ
    token ȤƤ롣ϤˤȤäƤϤäʡ̵̣ʻͤǤ롣


               ƼץץåΥƥȷ̡

    [5.1]   ƥȤץץå

  ƥȤϤȼ¹ˡϼ̤Ǥ
  Ϥϥ꡼줿ν¤٤Ƥޤ
  ¹Իץ C95 (C90), C99, C++98 Τ줾Ǿİۤʤ
 ץץå֤ƻȤ硢°Υѥ饳ǥ
͡ǤϤˡΤʤץ⤢ΤǡLSI C-86 / lcc Ǥϥ
˼ơǤդΥץץץåϤ褦ˤƻȤäƤ
ޤ
  C++ ΥƥȤξ硢GNU C  LCC-Win32 Ǥ *.cc Ȥäե̾
ʤ C++ ΥȤǧʤΤǡʤȤ lang-c++ Ȥäץ
դƤˡξ *.cc Ȥե̾˥ԡƥƥȤ
ޤ
  ° <assert.h>, <limits.h> ꤬ϡľ
ƤƥȤƤޤ

ֹ      ϣ                        ¹ԥץǿ
          ¹Իץ
          

1   :   Linux       /                       / DECUS cpp
        C95:    cpp
    Martin Minow ˤ DECUS cpp Υꥸʥ (1985/01) DEC
    γƼ亮ƥࡢUNIX, MS-DOS ΤĤνϤ˰ܿƤ뤬
    ΥƥȤǻȤäΤϡkmatsui ꥸʥǤ˼ä Linux /
    GNU C ǥѥ뤷ΡTranslation limits ʤ٤򥯥
    褦ޥ񤭴
2   :   MS-DOS      / LSI C-86 V.3.30c    / cpp (V.1.5)
        C95:    cpp
                lcc
        C99:    cpp -B
    cpp  1989/04 ΤΡ
3   :   MS-DOS      /                       / Ream's cpp (V.5.3)
        C95:    cpp -x -s \lsic86\include
        C99:    cpp -s \lsic86\include
    CUG Υǥ #319  PDS (1989/08)
4   :   MS-DOS      /                       / JRCPPCHK (V.1.00B)
        C95:    jrcppchk -Y\lsic86\include
        C99:    jrcppchk -Y\lsic86\include -B
    J. Roskind ˤ UNIX, OS/2, MS-DOS  JRCPP  MS-DOS - OS/2 ѻ
     (1990/03)Shift-JIS Ϥ 8 bits character ˤбƤ
    
5   :   WIN32       / Borland C++ V.4.02J   / cpp32
        C95:    cpp32 -A -w -i250
                bcc32 -A -w -i250
    1993 ǯܸǤ 1994/12 ΤΡTrigraph  cpp  bcc 
     trigraph.exe ȤѴץबѰդƤ롣
    ֵʽפȾΤ뤿ΥХǤ롣Borland C Ǥϡ
    ȤäͽѴץǥƥȤʴŤƥȡˡȤ
    trigraph.exe  <backslash><newline> ˤ³ޤǽƤޤ
    Τᡢֹ椬q.1.2 ΤۤǸˡ
6  :    DJGPP V.1.12 maint4 / GNU C V.2.7.1  / cpp
        C95:    cpp -D__STRICT_ANSI__ -lang-c89 -trigraphs -$ -pedantic
                                                                -Wall
                gcc -ansi -pedantic -$ -Wall
    GNU C V.2.7.1 / cpp1995/12ˤ DJ Delorie  DOS extender Ǥ
    GO32 ˰ܿΡܸǤؤΰܿ˺ݤ Shift-JIS б
    롣cpp ΥɥȤȤƤ GNU  cpp.info ¸ߤʤ
7  :    MS-DOS      / LSI C-86 V.3.30c    / cpp (¤ beta13)
        C95:    cpp -T
                lcc -PT
        C99:    cpp -T -B
    LSI C-86 / cpp Τˤ¤ (1996/02)ûɥ
    뤬 LSI C-86 ΥɥȤ­Ȥߤʤ
8  :    FreeBSD 2.2.7   / GNU C V.2.7.2.1   / cpp (V.2.0)
        GO32        / DJGPP V.1.12          / cpp (V.2.0)
        WIN32       / BC 4.0                / cpp (V.2.0)
        MS-DOS      / BC 4.0, TC 2.0        / cpp (V.2.0)
        MS-DOS      / LSI C-86 V.3.3        / cpp (V.2.0)
        OS-9/6x09   / Microware C/09        / cpp (V.2.0)
        C95:    cpp -23 (-S1 -S199409L) -W15
                gcc -ansi -Wp,-2,-W15
        C99:    cpp -23 (-S1) -S199901L -W15
        C++:    cpp -23+ -S199711L -W15
    kmatsui ˤ free software (1998/08)MCPP ȸƤ֡DECUS cpp 
    ȤƽľΡ
    OS-9/09 Ǥ MS-DOS ǤǤ translation limits ΰꥢǤʤ
    MCPP 򥳥ѥ뤹Ϥ long long Ƥʤϡ#if
     long ǤɾǤʤ
    κϡlong long  32 bits ƥνϤǥѥ
    ǤȤäΤΤǤ롣
9  :    WIN32       / Borland C++ V.5.5J    / cpp32 (2000/08)
        C95:    cpp32 -A -w
                bcc32 -A -w
        C99:    cpp32 -A -w
        C++:    cpp32 -A -w
    Trigraph ˤĤƤ V.4.0 Ʊ͡Free νϤȤʤäΤ
    ɥȤ help Ȥʤä
10 :    Vine Linux 2.6, FreeBSD 4.4, CygWIN 1.3.10
                        / GNU C V.2.95.3 (2001/03)  / cpp0
        C95:    cpp0 -D__STRICT_ANSI__ -std=c89 -$ -pedantic -Wall
                gcc -ansi -pedantic -Wall
        C99:    cpp0 -std=c9x -$ -Wall
        C++:    g++ -E -trigraphs -$ -Wall
    GNU C  portable ʥǤΤǡΥƥ˰ܿΤ
    ͤϰܿԤѰդ٤Ǥ뤬ȼΥɥȤ󶡤
    Ƥʤcpp ΥɥȤȤƤϤϤ GNU  cpp.info ¸
    ߤʤ
11 :    Vine Linux 2.6, FreeBSD 4.7 / GNU C V.3.2R (2002/08)    / cpp0
        C95:    cpp0 -D__STRICT_ANSI__ -std=iso9899:199409 -$ -pedantic
                                                                -Wall
                gcc -std=iso9898:199409 -pedantic -Wall
        C99:    cpp -std=c99 -$ -Wall
        C++:    g++ -E -trigraphs -$ -Wall
     kmatsui ѥ뤷Ρ--enable-c-mbchar Ȥ
    ץդ configure Ƥ롣
12 :    Vine Linux 2.6 /                    / ucpp (V.1.3)
        C95:    ucpp -wa
        C99:    ucpp -wa
    Thomas Pornin ˤ free software (2003/01)Portable ñΥץ
    åLinux / GNU C ǥѥ뤷ƥƥȤ
13 :   WIN32        / Visual C++ .net 2003  / cl
        C95:    cl -Za -E -Wall -Tc
        C99:    cl -E -Wall -Tc
        C++:    cl -E -Wall -Tp
    -E ץǤϥȤ <backslash><newline> 
    ΤǡѥˤƥȤʻ (2003/04)
14 :    WIN32       / LCC-Win32 V.3.2       / lcc
        C95:    lcc -A -E
                lcc -A
        C99:    lcc -A -E
        C++:    lcc -A -E
    Jacob Navia  C. W. Fraser & Dave Hanson  free software Ǥ
    lcc 򸵤˽񤤤糫ȯĶ (2003/08) sharewareץץ
    ʬΥ Dennis Ritchie  Plan 9 Τ˽񤤤Ρ
15 :   FreeBSD, Linux, CygWIN, DJGPP    / GNU C         / cpp (V.2.4.1)
   :   WIN32, MS-DOS       / BCC, LCC-Win32, LSI C, ... / cpp (V.2.4.1)
        C95:   cpp -23 (-S1 -V199409L) -W31
               gcc -ansi -Wp,-2,-W31
        C99:   cpp -23 (-S1) -V199901L -W31
        C++:   cpp -23+ -V199711L -W31
    MCPP  V.2.4.1 (2004/03)

    [5.2]       ɽ

                    D   L   R   J   B   D   K   M   B   G   G   u   V   L   M
                    E   S   e   R   C   J   i   C   C   C   C   c   C   C   C
                    C   I   a   C   4   G   d   P   C   C   C   p   2   C   P
                    U   C   m   P   C   1   a   P   5   2   3   p   0   W   P
                    S   3   5   P   P   1   |   2   5   9   2   1   0   i   2
                    C   3   3   C   P   2   b   0   C   5   R   3   3   n   4
                    P   0       H   3   M   1       P   3               3   1
                    P   c       K   2   4   3       P                   2

        min max     1   2   3   4   5   6   7   8   9  10  11  12  13  14  15

[C90: Processing of strictly conforming sources] (102 items)
n.1.1     0   6     0   0   0   6   6   6   6   6   6   6   6   6   6   6   6
n.1.2     0   2     0   0   0   2   2   2   2   2   2   2   2   2   2   2   2
n.1.3     0   2     0   0   0   2   2   2   2   2   2   2   2   2   2   2   2
n.2.1    -4   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.2.2    -2   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.2.3    -2   0    -2   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.2.4     0   2     2   0   2   0   2   2   2   2   2   2   2   2   2   2   2
n.2.5     0   2     0   0   0   0   2   2   2   2   2   2   2   2   2   2   2
n.3.1     0   6     6   6   0   6   6   6   6   6   6   6   6   6   6   6   6
n.3.3     0   4     4   4   0   4   4   4   4   4   4   4   4   4   4   4   4
n.3.4     0   2     0   0   0   2   0   2   0   2   0   2   2   0   2   2   2
n.4.1     0   6     0   0   0   0   0   6   0   6   0   6   6   6   6   0   6
n.4.2     0   2     0   0   0   0   0   2   0   2   0   2   2   2   2   0   2
n.5.1     0   6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.6.1   -10   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.6.2     0   6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.6.3     0   2     0   2   0   2   0   2   2   2   0   2   2   2   2   2   2
n.7.1     0   6     6   6   4   6   6   6   6   6   6   6   6   6   6   6   6
n.7.2    -4   0     0   0  -4   0   0   0   0   0   0   0   0   0   0   0   0
n.7.3     0   4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.8.1     0   8     0   8   8   8   8   8   8   8   8   8   8   8   8   8   8
n.8.2     0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.9.1     0  10    10  10   2  10  10  10  10  10  10  10  10  10  10  10  10
n.10.1    0  10    10  10   2  10  10  10  10  10  10  10  10  10  10  10  10
n.10.2   -6   0    -6   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.11.1    0   8     8   8   0   8   8   8   8   8   8   8   8   8   8   8   8
n.11.2    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.12.1    0   6     0   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.12.2    0   4     0   0   0   4   4   4   0   4   4   4   4   4   4   4   4
n.12.3   -2   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.12.4   -2   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.12.5   -2   0    -2   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.12.6    0   6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.12.7   -4   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.13.1   -2   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.13.2   -2   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.13.3   -4   0     0   0   0  -4   0   0   0   0   0   0   0   0   0   0   0
n.13.4   -2   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.13.5    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.13.6    0   6     0   0   0   6   6   6   0   6   6   6   6   4   6   4   6
n.13.7   -6   0     0  -6   0   0   0   0  -6   0   0   0   0   0  -2   0   0
n.13.8   -2   0    -2   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.13.9   -2   0     0   0  -2   0   0   0   0   0   0   0   0   0  -2   0   0
n.13.10  -2   0     0   0   0   0   0   0   0   0   0   0   0   0  -2  -2   0
n.13.11  -2   0    -2   0   0   0   0   0   0   0   0   0   0   0  -2  -2   0
n.13.12  -2   0    -2   0  -2   0   0   0   0   0   0   0   0   0   0  -2   0
n.13.13   0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.13.14   0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.15.1   -6   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.15.2   -6   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.18.1  -30   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.18.2  -20   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.18.3  -10   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.19.1    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.19.2    0   4     2   2   4   4   4   4   4   4   4   4   4   4   4   4   4
n.20.1    0   6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.21.1    0   6     0   0   0   6   0   6   0   6   0   6   6   6   0   6   6
n.22.1    0   4     0   0   0   4   0   4   4   4   0   4   4   4   4   4   4
n.22.2    0   2     0   0   0   2   0   2   2   2   0   2   2   2   2   2   2
n.22.3    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.23.1    0   6     2   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.23.2    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.24.1    0   6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.24.2    0   4     0   0   0   4   4   4   4   4   4   4   4   4   4   4   4
n.24.3    0   6     0   0   6   6   0   6   6   6   0   6   6   6   6   6   6
n.24.4    0   2     0   0   2   2   2   0   2   2   2   2   2   2   2   2   2
n.25.1    0   4     2   0   4   4   4   4   4   4   4   4   4   4   4   4   4
n.25.2    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.25.3    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.25.4    0   6     0   0   0   6   6   6   6   6   6   6   6   6   6   6   6
n.25.5    0   4     0   0   0   4   0   4   4   4   4   4   4   4   4   4   4
n.26.1    0   2     2   0   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.2    0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.3    0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.4    0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.5    0   2     2   0   2   2   2   2   2   2   2   2   2   2   2   2   2
n.27.1   -6   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.27.2   -4   0     0   0  -4   0   0   0   0   0   0   0   0   0   0   0   0
n.27.3    0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.27.4    0   6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.27.5    0   2     2   0   2   2   2   2   2   2   2   2   2   2   0   2   2
n.28.1    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.2    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.3    0   4     0   2   2   2   4   4   2   4   4   4   4   2   4   4   4
n.28.4    0   4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.5    0   4     0   0   4   4   4   4   0   4   4   4   4   4   4   4   4
n.28.6    0   4     0   0   0   0   0   4   0   4   0   4   4   2   0   0   4
n.28.7    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.29.1  -10   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.29.2    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.30.1    0   6     6   0   6   6   6   6   6   6   6   6   6   6   6   6   6
n.32.1   -2   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
n.32.2    0   2     2   2   0   2   2   2   2   2   2   2   2   2   2   2   2
n.37.1    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.2    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.3    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.37.4    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.5    0   4     4   0   4   4   4   4   4   4   4   4   4   4   4   4   4
n.37.6    0   2     2   0   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.7    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.8    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.9    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
stotal -158 288   150 180 172 266 250 286 246 288 254 288 288 280 268 268 288

[C90: Processing of implementation defined portions] (8 items)
i.32.3   -2   0     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
i.32.4    0   2     2   2   0   2   2   2   2   2   2   2   2   2   2   2   2
i.33.1    0   7     0   0   0   0   0   0   0   1   0   0   0   0   0   0   7
i.34.1    0   7     0   0   0   0   0   1   0   1   0   0   0   0   0   0   7
i.35.1   -2   0     0   0  -2  -2   0   0   0   0   0   0   0   0  -2   0   0
i.35.3    0   2     0   0   0   0   2   0   0   2   2   2   2   0   2   0   2
i.36.1    0   3     0   1   0   0   1   0   1   1   1   0   0   0   2   0   3
i.36.2    0  10     0   0   0   0   2   2   2   2   2   0   0   0   4   0  10
stotal   -4  31     2   3  -2   0   7   5   5   9   7   4   4   2   8   2  31

[C90: Diagnosing of violation of ssyntax rule or constraint] (50 items)
e.4.3     0   2     2   0   0   2   1   2   0   2   1   2   2   2   2   2   2
e.7.4     0   2     0   0   0   2   2   2   0   2   2   2   2   2   2   2   2
e.12.8    0   2     0   0   0   0   0   2   0   2   2   2   2   2   2   0   2
e.14.1    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.14.2    0   4     2   2   2   4   2   4   2   4   2   4   4   2   2   4   4
e.14.3    0   2     2   2   2   2   2   2   2   2   2   2   2   1   2   2   2
e.14.4    0   2     2   2   2   2   2   2   2   2   2   2   2   1   2   2   2
e.14.5    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.14.6    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.14.7    0   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.14.8    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.14.9    0   2     2   2   0   2   2   2   2   2   2   2   2   2   2   2   2
e.14.10   0   4     0   0   0   0   2   0   0   4   2   0   0   0   0   0   4
e.15.3    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.15.4    0   2     2   0   0   2   1   2   0   2   1   2   2   2   1   2   2
e.15.5    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.16.1    0   2     2   0   0   2   1   2   0   2   1   2   2   2   1   2   2
e.16.2    0   2     2   0   0   2   1   2   0   2   1   2   2   2   1   2   2
e.17.1    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.17.2    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.17.3    0   2     2   0   2   2   2   2   0   2   2   2   2   2   2   2   2
e.17.4    0   2     2   0   0   2   2   2   0   2   2   2   2   2   2   2   2
e.17.5    0   2     0   0   0   0   2   2   0   2   2   2   2   2   2   2   2
e.17.6    0   2     0   0   2   0   2   2   0   2   2   2   2   2   2   2   2
e.17.7    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.18.4    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.18.5    0   2     2   2   2   2   2   2   2   2   2   0   2   2   2   2   2
e.18.6    0   2     0   0   2   2   2   2   0   2   2   2   2   2   2   2   2
e.18.7    0   2     0   0   0   0   2   2   0   2   2   2   2   2   2   2   2
e.18.8    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.18.9    0   2     0   0   0   2   0   2   0   2   0   2   2   2   2   0   2
e.19.3    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
e.19.4    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
e.19.5    0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
e.19.6    0   2     0   0   0   2   2   2   0   2   2   2   2   2   2   2   2
e.19.7    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.23.3    0   2     0   0   0   2   2   2   2   2   2   2   2   2   2   0   2
e.23.4    0   2     2   0   0   2   2   2   2   2   2   2   2   2   2   0   2
e.24.5    0   2     2   0   0   2   2   2   2   2   2   2   2   2   2   0   2
e.25.6    0   4     0   2   4   4   0   4   0   4   0   4   4   4   4   4   4
e.27.6    0   2     0   2   2   2   2   2   2   2   2   2   2   2   0   2   2
e.29.3    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.29.4    0   2     2   0   0   0   1   2   0   2   1   2   2   2   1   2   2
e.29.5    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.31.1    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.31.2    0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
e.31.3    0   2     2   0   0   2   0   2   0   2   0   2   2   2   2   2   2
e.32.5    0   2     0   0   0   0   2   2   0   2   2   2   2   0   2   0   2
e.33.2    0   2     0   0   0   0   0   0   0   2   0   0   2   0   2   0   2
e.35.2    0   2     0   0   0   0   1   2   0   2   1   2   2   0   2   0   2
stotal    0 112    74  60  66  92  90 106  64 112  92 104 108  98 100  92 112

[C90: Documents on implementation defined behaviors] (13 items)
d.1.1     0   2     0   0   0   2   0   0   0   2   0   0   2   0   0   0   2
d.1.2     0   4     2   4   0   4   4   4   4   4   4   4   4   0   4   0   4
d.1.3     0   2     0   0   0   2   0   0   0   2   0   0   2   0   0   2   2
d.1.4     0   4     0   4   0   4   4   4   4   4   4   4   4   0   4   4   4
d.1.5     0   4     2   0   0   4   4   2   0   4   4   2   4   4   4   4   4
d.1.6     0   2     0   0   0   2   0   0   0   2   0   0   2   0   0   0   2
d.2.1     0   2     0   0   0   2   2   2   0   2   2   2   2   2   0   0   2
d.2.2     0   2     0   0   0   0   2   0   0   2   0   0   2   0   0   0   2
d.2.3     0   2     0   0   0   0   2   0   0   2   0   0   0   0   0   0   2
d.2.4     0   2     0   0   0   0   0   0   0   2   0   0   0   0   0   0   2
d.2.5     0   2     0   0   0   0   2   0   0   2   0   0   0   0   2   0   2
d.2.6     0   2     0   0   0   0   2   0   0   2   2   0   0   0   2   0   2
d.2.7     0   2     0   0   0   2   2   0   0   2   2   0   2   0   2   0   2
stotal    0  32     4   8   0  22  24  12   8  32  18  12  24   6  18  10  32

[C90: Degree of Standard C conformance] (173 items)
mttl90 -162 463   230 251 236 380 371 409 323 441 371 408 424 386 394 372 463

[C99: Conformance to new features] (20 items) 
n.dslcom  0   4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.ucn1    0   8     0   0   0   0   0   0   0   0   0   0   6   8   6   0   8
n.ucn2    0   2     0   0   0   0   0   0   0   0   0   0   0   2   0   0   2
n.ppnum   0   4     0   0   0   0   0   0   0   4   0   4   4   4   0   0   4
n.line    0   2     0   0   0   0   2   2   0   2   2   2   2   2   2   0   2
n.pragma  0   6     0   0   0   0   0   0   0   6   0   0   6   6   0   0   6
n.llong   0  10     0   0   0   0   0   0   0   0   0  10  10   8  10   0  10
n.vargs   0  10     0   0   0   0   0   0   0   0   0  10  10  10   0   0  10
n.stdmac  0   4     0   0   0   0   0   0   0   0   0   0   4   4   0   0   4
n.nularg  0   6     0   0   0   0   0   6   0   6   0   6   6   6   2   0   6
n.tlimit  0  18     0   8   6  12  14  18  10  18  14  18  18  17  18  14  18
e.ucn     0   4     0   0   0   0   0   0   0   0   0   0   0   2   0   0   4
e.intmax  0   2     0   0   0   0   0   0   0   0   0   2   2   2   0   0   2
e.pragma  0   2     0   0   0   0   0   0   0   2   0   0   2   2   0   0   2
e.vargs1  0   2     0   0   0   0   0   0   0   0   0   0   2   1   0   0   2
e.vargs2  0   2     0   0   0   0   0   0   0   2   0   0   0   0   0   0   2
d.pragma  0   2     0   0   0   0   0   0   0   2   0   0   2   2   0   0   2
d.predef  0   6     0   0   0   0   0   0   0   0   0   0   6   6   0   0   6
d.ucn     0   2     0   0   0   0   0   0   0   0   0   0   0   0   0   0   2
d.mbident 0   2     0   0   0   0   0   0   0   0   0   0   2   2   1   0   2
mttl99    0  98     0  12  10  16  20  30  14  46  20  56  86  88  43  18  98

[C++: Conformance to new features not in C90] (9 items)
n.dslcom  0   4     0   4   4   4   4   4   4   0   4   4   4   4   4   4   4
n.ucn1    0   4     0   0   0   0   0   0   0   0   0   0   4   4   2   0   4
n.cnvucn  0   4     0   0   0   0   0   0   0   0   0   0   0   1   0   0   0
n.bool    0   2     0   0   0   0   0   0   0   2   0   0   2   0   0   0   2
n.token1  0   2     0   0   0   0   0   0   0   2   0   0   2   0   2   2   2
n.token2  0   2     0   0   0   0   0   0   0   0   0   0   2   0   2   0   2
n.cplus   0   4     0   0   0   0   2   2   0   2   2   2   2   0   4   0   4
e.operat  0   2     0   0   0   0   0   0   0   0   0   0   2   0   0   0   2
d.tlimit  0   2     0   0   0   0   0   0   0   2   0   0   2   0   1   0   2
mttl++    0  26     0   4   4   4   6   6   4   8   6   6  20   9  15   6  22

[C90: Qualities / 1 : diagnosis of undefined behaviors] (29 items)
u.1.1     0   1     0   0   0   1   0   1   0   1   0   1   1   0   0   0   1
u.1.2     0   1     0   0   0   1   0   1   0   1   0   1   1   0   1   0   1
u.1.3     0   1     0   0   1   1   1   1   0   1   1   1   1   1   1   1   1
u.1.4     0   1     0   0   1   0   0   1   0   1   1   1   1   1   1   1   1
u.1.5     0   1     1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
u.1.6     0   1     0   0   1   1   0   1   0   1   0   1   1   0   0   1   1
u.1.7     0   7     0   0   0   0   0   1   0   1   0   0   0   0   0   0   7
u.1.8     0   1     1   0   0   1   0   1   0   1   0   1   1   0   0   0   1
u.1.9     0   1     1   0   1   1   0   1   0   1   0   1   1   1   0   1   1
u.1.10    0   1     1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
u.1.11    0   1     1   0   0   1   0   0   0   1   1   0   1   1   1   1   1
u.1.12    0   1     1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
u.1.13    0   1     0   0   0   1   1   1   0   1   1   1   1   1   1   1   1
u.1.14    0   1     0   1   0   1   1   1   1   1   1   1   1   1   1   1   1
u.1.15    0   1     0   0   0   1   1   1   0   1   1   1   1   1   1   1   1
u.1.16    0   1     0   0   0   1   1   1   0   1   1   1   1   1   1   1   1
u.1.17    0   2     0   0   0   0   0   1   0   2   0   1   1   0   0   1   2
u.1.18    0   1     0   0   0   1   0   1   0   1   0   1   1   1   0   0   1
u.1.19    0   2     0   1   0   2   0   0   0   2   0   0   1   1   0   0   2
u.1.20    0   1     0   0   0   1   1   1   0   1   1   1   1   1   1   0   1
u.1.21    0   2     0   1   0   2   1   0   1   2   1   0   1   2   2   2   2
u.1.22    0   1     0   0   0   1   0   0   0   1   0   0   1   1   0   1   1
u.1.23    0   1     1   0   1   1   0   0   1   1   0   0   1   0   0   0   1
u.1.24    0   2     0   1   0   2   0   0   1   2   0   0   0   0   0   0   2
u.1.25    0   1     0   0   0   0   0   0   0   1   0   0   1   0   0   0   1
u.1.27    0   1     1   1   1   1   1   0   1   1   1   0   1   1   1   1   1
u.1.28    0   1     1   1   1   1   1   0   1   1   1   0   1   1   1   1   1
u.2.1     0   1     1   0   0   0   0   1   0   1   1   1   1   0   1   0   1
u.2.2     0   1     0   0   0   0   0   0   0   1   1   0   1   1   0   0   1
stotal    0  39    10   9  10  26  12  19   9  33  16  18  27  20  17  18  39

[C90: Qualities / 2 : Diagnosis of unspecified behaviors] (2 items)
s.1.1     0   2     0   0   0   0   0   0   0   2   0   0   0   2   0   0   2
s.1.2     0   2     0   0   0   0   0   0   0   2   0   0   0   0   0   0   2
stotal    0   4     0   0   0   0   0   0   0   4   0   0   0   2   0   0   4

[C90: Qualities / 3 : Diagnosis of suspicious cases] (12 items)
w.1.1     0   4     4   0   0   4   0   4   0   4   0   4   4   0   0   0   4
w.1.2     0   4     0   0   0   0   0   0   0   4   0   0   0   0   0   0   4
w.2.1     0   2     0   0   0   0   0   0   0   2   1   0   0   0   0   0   2
w.2.2     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.1     0   1     1   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.3     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.4     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.5     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.6     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.7     0   1     0   0   0   0   0   0   0   1   0   0   1   0   0   0   1
w.3.8     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
w.3.9     0   1     0   0   0   0   0   0   0   1   0   0   0   0   0   0   1
stotal    0  19     5   0   0   4   0   4   0  19   1   4   5   0   0   0  19

[C90: Qualities / 4 : Other features] (16 items)
q.1.1     0   9     0   1   2   4   6   9   1   9   6   9   9   8   7   4   9
q.1.2     0  10     6   4   2   8   4   8   4  10   4   8  10   4   4   4  10
q.1.3     0   4     4   4   0   4   2   4   4   4   2   4   4   4   4   4   4
q.1.4   -20   0   -10 -20   0 -10 -10   0   0   0 -10   0   0   0 -10   0   0
q.2.1     0   4     2   4   2   4   2   4   4   4   2   4   4   4   4   2   4
q.2.2     0   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
q.2.3     0   2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
q.2.4     0   2     2   0   0   2   0   2   2   2   0   2   2   0   0   0   2
q.2.5     0   2     0   0   0   0   0   0   0   2   0   0   0   0   0   0   2
q.2.6     0   4     0   2   0   4   2   4   2   4   2   4   4   2   4   2   4
q.2.7     0   8     4   2   2   2   2   8   2   6   4   8   8   4   4   4   8
q.2.8     0   8     0   0   0   6   2   2   0   6   2   2   2   0   6   4   8
q.3.1     0  20    10  10   6   4   8  14   8   8   8  14  12   8  10  10   8
q.3.2   -20   6     6   6   4 -20   4   2   6   6   4   2   2   4   2   6   4
q.3.3     0  20    10   6   6   0   0  10   6  16   0  10  12   8   0  10  16
q.4.1     0  10     2   2   2   6   6   4   2   8   6   4   6   2   4   6   8
stotal  -40 113    42  27  32  20  34  77  47  91  36  77  81  54  45  62  93

[C90: Qualities] (59 items) 
mttl90  -40 175    57  36  42  50  46 100  56 147  53  99 113  76  62  80 155

[C99: Qualities of new features] (3 items)
u.line    0   2     0   0   0   0   0   0   0   0   0   1   1   0   0   0   2
u.concat  0   1     0   0   0   1   0   0   0   1   0   0   1   0   0   0   1
w.tlimit  0   8     0   0   0   0   0   0   0   8   0   0   1   3   2   0   8
mttl99    0  11     0   0   0   1   0   0   0   9   0   1   3   3   2   0  11

[C++: Qualities of features not in C90] (1 item)
u.cplus   0   1     0   0   0   0   1   0   0   0   1   0   0   0   1   0   1
mttl++    0   1     0   0   0   0   1   0   0   0   1   0   0   0   1   0   1

[Overall] (265 items) 
gtotal -202 774   287 303 292 451 444 545 397 651 451 570 646 562 517 476 750

                    D   L   R   J   B   D   K   M   B   G   G   u   V   L   M
                    E   S   e   R   C   J   i   C   C   C   C   c   C   C   C
                    C   I   a   C   4   G   d   P   C   C   C   p   2   C   P
                    U   C   m   P   C   1   a   P   5   2   3   p   0   W   P
                    S   3   5   P   P   1   |   2   5   9   2   1   0   i   2
                    C   3   3   C   P   2   b   0   C   5   R   3   3   n   4
                    P   0       H   3   M   1       P   3               3   1
                    P   c       K   2   4   3       P                   2

        min max     1   2   3   4   5   6   7   8   9  10  11  12  13  14  15


    [5.3]       ƥץץåħ

1   :   Linux       /                           / DECUS cpp
  ANSI draft ΤΤΤǡȤʤäƤϵʽ٤㤯ʤäƤ
ǥåϤޤޤǤɥȤϤۤȤɤޤ󡣤
ʤΤäꤷץǡꤷƤޤ
   portability ι⤤ΤǡĤνϤ˰ܿƤޤ
ܤΤ褦ɤߤ䤹ǡɤǤٶˤʤޤ䤬
MCPP Υ١ˤΤϤΥǤ

2   :   MS-DOS      / LSI C-86 V.3.30c          / cpp (V.1.5)
  ANSI draft ΤΤΤǡʸϥС󥢥åפƤʤ
褦Ǥʽ٤㤤ۤǤȤ˥ޥŸˡθŤ̿Ū
ǥåȥɥȤϼǤ
  Ƥޤư̤줿ΤǡΥѥȤ
ðŪǤɤߤ䤹Ȥϸޤ

3   :   MS-DOS      / Turbo C ѤΥ        / Ream's cpp (V.5.3)
  ANSI draft ΤΤΤǤʽ٤ DECUS cpp Ʊ٤ǡ
㤤ΤǤǥåϼǡɥȤϤۤȤɤޤ
ɤνϤΥѥɥ饤ФˤбƤޤ
  ƤꡢΥޥŸ롼ϸͤΨ
ϤΤΡͤˤʤޤ

4   :   MS-DOS      /                           / JRCPPCHK
  ANSI C ꤫֤ʤ˽ФΤǤʽ٤Ϥƹ⤯
GNU C / cpp  Borland C ΣǯСɤŨޤб
®Τ϶ðŪǤǥåƱΥ顼Фƽʣƽ
뤳Ȥ¿Τ˭٤ǤɥȤƤޤʽɤ
ɤ߹Ǥ뤳Ȥ狼ޤ
   MS-DOS ǤǤϴñ out of memory ˤʤ뤳ȤǤ顼
ǥޤϥҥ塼ǥǥѥ뤷Ƥ褦Ǥ¾Υץץ
åοܤΥ񤷤ޤǤϡMS-DOS Ǥϡ˼Ѥˤʤޤ
  ®٤Ϥʤ٤ۤǤޤѥɥ饤Ф System V ΤΤ
бƤʤΤǡMS-DOS ǤǤϤޤȤƻޤ󡣤ˡ
ӥåȥɤȽǤƤޤΤǡܸޤॽˤϻ
ޤ
  Shareware  JRCPP ϤäȷڤʤäƤ뤽ǤꤷƤ

  ǰʤ顢θ塢Сϼˤޤ
  ϸƤޤ

5   :   WIN32       / Borland C++ V.4.02J       / cpp32
9   :   WIN32       / Borland C++ V.5.5J        / cpp32
  C90 εʽ٤Ū⤯ä shift-JIS ˤޤȤб
ƤޤɥȤäƤޤe_* ǤϿǥåϤ
ƤФޤ֤˹碌ŪʤΤ¿ɤޤ
  ֵʳʼפϼǡȤĥǽ⤢ޤUndefined 
ʬФƤϿǥåϤޤФ˽ޤʤб
դȤʤäƤޤä褦Ǥ
  ®٤ Turbo C Ȱäơ®ۤǤϤʤʤޤǤˣѥ
ѥΥåȤϤʤʤäƥǥåȤĤäƤȻפޤ
ĤޤǤή³Ƥ椯ΤǤ礦
  BC 5.5 Υץץå BC 4.0 ٤ơۤξƤ
ޤFree ˤʤäȤˤäơդ˥ɥȤ­֤Ȥʤ
Ƥޤ

7   :   MS-DOS      / LSI C-86 V.3.30c      / Kida ¤ cpp (beta13)
  LSI C-86 / cpp 򤭤¤ΤǤȤ˥ޥŸ롼
˽ؤ졢ѾϤۤԼͳΤʤ٥ãƤޤ
ǥåȥɥȤ LSI C ϼʤΤۤܤΤޤްѤ
Ǥޤ
  ˤĤƤ LSI C / cpp ƱȤޤܿϰʤ
ǤLSI C ʳΥѥɥ饤ФˤбƤʤΤǡʬ
ܿ褦ȤȡϫǤ礦

6   :   GO32        / DJGPP V.1.12 maint4       / cpp
10  :   Vine Linux 2.6, FreeBSD 4.4 / GNU C V.2.95.3        / cpp0
  C90, C95 εʽ٤Ϥʤ⤯ǥåŪΤǤDJGPP 
ܸǤ shift-JIS ˤɤбƤޤưϤۤܰꤷƤꡢ
Ĥƹ®Ǥ˭٤뤯餤˭٤ʥץħǤMCPP 
⡢ΥץΤĤޤͤƤޤ
  Τͥ줿ץץåǤĤƤϤĤˤХ⤢
ޤ줬С󤬿ۤɾʤȤ¤ʤȤԻ׵
ǡFreeBSD / GNU C V.2.6.2 / cpp  DJGPP V.1.12 (GNU C V.2.6.0) / cpp
٤Ƥ⡢#line ΰ # 黻Ҥˤʸ󲽤νʤ餫˰
ʤäƤޤn_7.t, n_24.t Ǥ internal compiler error ȯ
FreeBSD ؤ porting äΤˡΥХ V.2.7 ǥꥢ
졢V.2.95 ǤϥХϤۤȤɤʤʤäƤޤ
  ĤϡC99, C++98 οͤ¿̤Ǥ뤳ȡǥå
ޤޤ­ʤȡɥȤʤ­Ƥ뤳ȡ#pragma
Ȥʤʰȿγĥǽ¿ȡPre-Standard  obsolete ʻ
¿Ƥ뤳ȡmulti-byte character encoding ؤбȾü
ѥ٥ãƤʤȡǤ
  cpp.info ȤɥȤ GNU C / cpp  Standard C ץץ
ΤβȤͥ줿ΤǤʬΥɥȤ
DJGPP, CygWin, FreeBSD, Linux Τɤˤ¸ߤʤΤϻǰǤְܿ
ȤΤϥץǤϤʤϤǤ
  ϤĤϤ餱ɤߤˤĥץȤΩƤŤޥ
ץåι¤äƤޤ GNU C ϤΤͥ
Ƥ뤿ᡢ¿Υƥ˰ܿƤޤȤ free UNIX Ǥϣý
ϤϤ줬ɸȤʤäƤޤ

11  :   Vine Linux 2.6, FreeBSD 4.7 / GNU C V.3.2R          / cpp0
  GNU C V.3 Ǥϥץץ V.2 饽쿷ޤƱ˥
Ȥ쿷ޤToken-based ʸ§Ű줵졢pre-Standard
ʻͤϤޤƤʤ⥦˥󥰤Ф褦ˤʤꡢundocumented 
ͤƤޤΤȤƤϻδԤ˲ɤƤ
ץ๽¤쿷줿Ȥǡβɤ⤷䤹ʤäΤȻ
ޤ
  ǥåɥȡC99 бmulti-byte character ؤб
ϤޤԽʬǤ塢ɤƤ椯ȤǤ礦®٤Ϥ٤ʤ
ޤǤޤ®ۤǤ
  إåե뤬ʣ include directory Υ
ʣˤʤäƤƤΤϡäǤޤŤץ󤬻Ȥ
ʤʤäƤ¿οץƤꡢʤʤ
ؿʤߤޤV.3 ǤϥץץѥΤ˰βޤ
ץץʬȥѥʬȤŪ interface ʤʣ
ʤΤˤʤäƤΤ⡢ǰʤȤǤ

12  :   Vine Linux 2.6 /                        / ucpp (V.1.3)
  C99 бƤ뤳ȡץ󥽡 portable Ǥ뤳ȤħǤ
ʽ٤Ϥʤ⤯ʤäƤޤUCN  UTF-8 бƤ뤳Ȥˤ
äƤޤϤԽʬǤǥåϤϼǤ
Ȥ⤫ʤ­Ƥޤ

13  :   WIN32       / Visual C++ .net 2003  / cl
  Ǥ⿷СǤC99 λͤϤޤۤȤɼƤޤ
C90 λͤˤ⤤ĤΥХĤäƤޤTranslation phase 
𤷤Ƥ뤳ȤǤ⺬ŪǤ˸ŤʬŪ˼
ʤС󥢥åפ򷫤֤ƤƤ뤳Ȥޤ
  ǥåϤԥȤΤ줿ΤФиޤ顼
ȽǤƤޤȤ¿Τ⡢ȤˤǤɥ
ϼ٤ƹʤ٤Ƥ褦Ǥ
  Translation limits 礭Ȥ #pragma Ū¿ȤȤꤨȸ
ޤȤ #pragma setlocale ʤΤǤC90 Ǥ #
pragma ԤޥŸ뤳ȡˤ⤫餺 #pragma sub-directive 
桼֤̾ȤäƤΤǤ
  źդƤ륷ƥإåˤϡ㳰ϤޤΤȤƤϾ
ʤ褦Ǥ

14  :   WIN32       / LCC-Win32 V.3.2           / lcc
  ץץʬ Dennis Ritchie  Plan9 ѤΥ Jacob Navia
äΤǤǥХå­Ƥꡢ#if ɾʤɤˤʤ
ΥХޤC95 ʹߤλͤˤбƤޤ󡣥ɥȤ­
Ƥޤ

8   :   FreeBSD, DJGPP, WIN32, MS-DOS, OS-9/09 / / MCPP (V.2.0)
15  :   FreeBSD, Linux, CygWIN, DJGPP, WIN32, MS-DOS    /
                                                / MCPP (V.2.4.1)
  䤬ʬǺäƼʬǥƥȤƤΤʤΤǡʽ٤ǹ
ǤΤʥץץåΤϤǤǥå˭٤Ū
ɥȤξܺ٤ǤͭѤʥץ #pragma ̤
äƤޤC99 λͤˤ⤹٤бƤޤ
  ΰܿɤ֤Ǥ礦ܿμӤ¤Ƥ뤳Ȥ
Ǥ󡢤ꤤޤ

    [5.4]       ɾ

  ¿ΥץץåƥȤƤߤȡǶǤ C90 ʽ
٤Ϥʤ⤤Τ¿ʤäƤƤ뤳Ȥ狼ޤƽ
Ȥޤޤ¿äƤޤʤMCPP ϤۤȤɤιܤ
ʤΤǡ졹ڤޤ

  n_* Υץ˴ؤƤΤƤꡢJRCPPCHK, GNU
C 2.7/2.9/3.2, BC (Borland C) 4.0/5.5, Kida  cpp , LCC-Win32 3.2, ucpp
1.3, Visual C++ .net 2003 ϼѾϤޤΤʤ٥ãƤޤ
ɤνϤˤճʥХޤ
  ǤäΤϡn_13_7.t (n_13_7.c)  division by 0 Υ顼ˤʤä
ޤϤ Visual C ޤƤФи뤳ȤǤ&&, || 䣳
黻ҤǤΡɾǤڤפȤäδŪʻͤƤʤΤǤ
BC 4.0, 5.5  n_13_7.c Ǥϥ˥󥰤ˤȤɤƤޤe_14_9.c 
 division by 0 ǤƱ˥󥰤ФޤTurbo C Ǥ
 0 Ǥɾ򥹥åפʬǤɤƱ顼ȤʤäƤ
ޤBorland C Ϥοǥå򥦥˥󥰤˳ʲ
ΤǤνϤΡִ֤˹碌ǥåפΰǤ
  Standard C ǿꤵ줿ͤǤϡ# 黻Ҥˤʸ󲽤μ
ְäƤΤΩޤʸƥʸäơ
 escape sequence ΤΤϡޤ˰ܿݾڤ
ʤäƤޤ󡣤üΤ褦˻פ뤫⤷ޤ󤬡assert()
ޥȤȡŤʸ󲽡פФȯΤǡۤüʤ
ȤǤϤޤ
  ΤۤƽϤȤ˥ХΰĤĤɬФޤ
  Amendment 1, Corrigendum 1 ɲä줿ͤϡټƤ
 GNU C / V.2.7, 2.9, 3.2, ucpp, Visual C .net Ǥ
  C99 λͤϡucpp ܼۤƤޤ// Ȥ¿ν
ƤޤΤۤ GNU C / cpp  long long 
translation limits ˤʤ;͵ꡢޥΥŬڤ˽
ޤѰޥȼλͤΤΤäƤޤ2.95 Ǥ C99 
ͤΤΤޤ3.2 Ǥ _Pragma() ޤUCN 
ucpp ƤޤGNU C 3.2 ʸƥ뤪ʸ
 UCN Ƥޤ
  C++98 Ǥ UCN ʳλͤ GNU C 3.2 ƤꡢVisual C .net 
ȾʬƤޤ
  C99, C++98 λͤϡ¾νϤǤϤޤۤȤɼƤޤ

  i_* νʬνǤϡ#if  wide character 򰷤ʤ
¿褦Ǥwide character ˸¤餺 #if ʸȤ
ȤϡʤˤϤΤΤۤȤɰ̣ΤʤȤʤΤǡȤʤȤ
ƺ뤳ȤϤʤǤ礦̵̣ʤΤϵʤλͤ٤
Ǥ
  Multi-byte character ˤĤƤϡVisual C ¿ι encoding Խ
ʬʤбƤޤ¾νϤϼǤGNU C ϼȾüǡ
ѥ٥ãƤޤ
  Shift-JIS ȤƥǤϡƥ tokenization  # 黻Ҥˤ
ʸ󲽤դɬפǤDJGPP 1.12, BC 4.0/5.5, Visual C Ϥˤ
ޤбƤޤKida  cpp Ϥ˷꤬ޤܸǤΤʤ
ϤϡˤбƤޤ

  e_* ФǥåǤϡʤ violation of syntax rule or
constraint ռƤϤȰռƤʤϤȤκϤä
ФƤޤԤ JRCPPCHK, GNU C, BC, Visual C, LCC-Win32, ucpp Ǥ
  #if  overflow ФǥåνФΤϾʤBC, ucpp
ٿǤǤ

  ʬΥɥȤǤϡϤ구ʤռƤ JRCPPCHK,
BC 4.0, GNU C 3.2 ޤޤΥ٥ǡ¾Ϥɤ⤪Ǥ

  u_* ˤĤƤ JRCPPCHK Ƥͤ˿ǤƤΤܤޤGNU
C 3.2 ޤޤǤ¾ϤǤUndefined Ϥϲ⤷ʤ
ɤȤΤǤϤʤȻפޤ

  s_*, w_* ˤĤƤϤɤνϤۤȤн褷Ƥޤ󡣥ȤΥ
ȤФ륦˥󥰤ФΤʤΤϡճǤ

  ֤¾γƼʼפǤϡGNU C ˭٤ʥץ󡢿ǥå
ŪΤ®ܿȤȴФƤޤ

  礹ȡGNU C / cppȤ V.3 ΤΤʽ٤ι⤵Ȥ
ɤޤ礭ʷΤʤǡǤͥƤޤ
  MCPP ®٤ΤΡ¾ΤۤȤɤ̤Ǥ
Ƥ뤳ȤϸޤǤ⤢ޤ

  ơ̤ΥƥȤäƤޤƻפΤϡƥ
ץȤΤ˽פȤȤǤMCPP ϤΥץκ
¹ԤƥǥХåʤƤΤǤʬʥץ뤬ʤХ
¸ߤˤʤʤդޤ󤫤顢ǥХåɤǤϤޤ
  ʤˤ⤳Ūʥƥѥץ뤬źդ褦ˤʤȡƽ
ϤʼŪ˸夹뤳ȤǤ礦ޤդˡŪʥƥѥ
ץ뤳Ȥϡʤ⤭Ħˤ뤳Ȥˤʤޤƥ
ץϵʤΥ饹ȥ졼ʤΤǤ

    [5.5]       ƥȤո

   Validation Suite ˤĤƤΤո䡢ȤäƼϤΥץ
ץΥƥԤƤޤcomp.std.c, fj.comp.lang.c 
newsgroup ޤϥ᡼Ǥꤤޤ
  ץץåξܺ٥ƥȤԤäϡ[5.2] ɽڤäơ
˽񤭹Ǥ꤯η׻ˤ tool/total.c 򥳥ѥ
ƻȤޤɽ cpp_test.old Ȥȡ

    total 16 cpp_test.old cpp_test.new

Ȥȡstotal (sub-total), mtotal (mid-total), gtotal (grand-total)
γ󤬽񤭹ޤ cpp_test.new ˽Ϥޤ"16" ΤȤϽ
οꤷޤ
  GNU C ξϡڥåȤ testsuite Ǥˤ뼫ưƥȤǤޤ
ƼС GNU C Υƥȷ̤꤯ե (gcc.
sum, gcc.log) äƤȡǥåΥСˤ㤤
ڥåȤ testsuite Ǥ˺Τ뤳ȤǤޤ

  ޤValidation Suite  MCPP γȯ CVS repository ǿʤƤ
ޤȯ˻äƤߤ褦Ȥϡҥ᡼򤯤

                                                                   [eof]
