                        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 prerelease 1      2002/08     Updated according to C99 Standard.
                                                                kmatsui
V.1.3 prerelease 2      2002/12     Slightly modified.
                                                                kmatsui
V.1.3 release   2003/02     Finally released.
                    Added porting to GCC / testsuite.
                                                                kmatsui
V.1.3 patch 1   2003/03     Made the testsuite edition applicable to
                    GCC 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
V.1.5       2005/03     Moved tests of multi-byte character encoding to
                    quality matters.
                Changed point allocation of the test items.
                Added a few testcases for macro expansion.
                Updated a few testsuite testcases to cope with GCC
                    3.3 and 3.4.
                Removed test results on older preprocessors (DJGPP,
                    compiler systems on MS-DOS except Borland C 4.0).
                                                                kmatsui
V.1.5.1     2006/07     Updated the test results of some preprocessors.
                                                                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]     GCC / 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.35]    #if  multi-character ʸ
        [2.4.37]    Translation limits
    [2.5]       ʬΥɥ

ꤵƤʤ¦̤ɾ
    [3.1]       Multi-byte character encoding
    [3.2]       Undefined behavior
    [3.3]       Unspecified behavior
    [3.4]       ˥󥰤˾ޤ¾Υ
    [3.5]       ¾γƼʼ
        [3.5.1]     ư˴ؤʼ
        [3.5.2]     ץȳĥǽ
        [3.5.3]     ¹ԸΨ
        [3.5.4]     ɥȤʼ
    [3.6]       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 äΤ
ޤưƥȤΥץϡGCC / 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
  θ MCPP ȸڥåȤϤ˲ɤκȤ³Ƥޤ2005/
03 ˤϤ줾 V.2.5, V.1.5 ꡼ޤڥå V.1.5 Ǥ
ѹʤɤޤ2006/07 ˤϤ줾 V.2.6, V.1.5.1 
ޤڥå V.1.5.1 ǤϳƽϤοСΥץץ
åΥƥȷ̤ɲä줿ʳˤ礭ѹϤޤ

  øεʤȤƤ 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 (2001)
        ibid.   Technical Corrigendum 2 (2004)
  C++:
    ISO/IEC 14882:1998(E)
    ISO/IEC 14882:2003(E)

  ANSI X3.159 ˤ "Rationale"ͳˤ°Ƥޤ ISO
C90 ˤϤʤѤޤǤ ISO C99 Ǥ褷ޤ
"Rationale" ޤ˿ƻȤޤ
  C++  1998 ǯǤΤȤ 2003 ǯǤꤵޤʸν
ǤʤȤץץˤĤƤѹϤޤ󡣤ǡ
ʸǤ 2003 ǯǤޤ C++98 ȸƤӤޤ
  C99, C++ εʽ PDF ǥեޥåȤ줿饤ǤΤȤ
Ǥޤ

    C99, C++98, C++03
        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://www.open-std.org/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/

    MCPP V.2.3  V.2.5 ޤǤϼΤȤ֤Ƥ

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

    2006/04 ˼ΤȤ˰ܤä

        http://mcpp.sourceforge.net/

    cpp V.2.2 Ӹڥå V.1.2 ϥ٥ҤΥȤμΤȤ
    롣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/ ǤƱ
    Ǥ롣

    Υ֥եΥƥȥեϡVector ΤΤ
    DOS/Windows Ϥ˹碌ơԥɤ [CR]+[LF] shift-JIS
     encode Ƥ롣SourceForge ΤΤ V.2.5 ޤǤ UNIX Ϥ˹
    Ʋԥɤ [LF] EUC-JP Ǥ롣V.2.6  [CR]+[LF]
    / shift-JIS  zip Ǥ[LF] / EUC-JP  tar.gz ǤΣΥ
    ֥ե֤褦ˤ


           ӣ  ץץħ

  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 5 Ǥ¹Իʸ
    åȤ˺ѴȤΤǤ롣C++ Standard ǤۤƱͤǤ롣
    ͤޤǤ뤦ˡϤˤȤäƤô礭ȤǤ롣
    ʤȤ 1999/01 draft  phase 1 νϺ졢C99
    ǤǤ⤽̤Ȥʤä
  *3  MCPP ǤϡSJIS_IS_ESCAPE_FREE Ȥޥ FALSE ƥ
    ѥ뤷Ƥȡshift-JIS ǧʤѥΤΤˡ
    phase 4ʤޤ 6ˤäƤ顢ʸƥ뤪ʸ
    shift-JIS ΣХܤ 0x5c (\) ǤäϤˤ⤦
    0x5c 롣big5  iso2022-jp Ȥ encoding ˤĤƤ⡢Ʊ
    ν򤹤롣[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 Ȥʤˡ
  Ȥƻ϶ˤüʤΤǤܺ٤˸ƤɬפϤޤ󤬡
 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

        [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 ϣХȤȤ롣
    longlonglong long ǤϤʤˤޤ quadra 򣸥ХȤȤ롣
    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 ¿ν
˰ܿ뤳ȤŪȤƤΤǡ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
Rationale 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 Ǥǧ
ޤ

  Amendment 1  multi-byte character, wide character Ӥʸ
饤֥ؿɲä濴ǡȼä <wchar.h>,
<wctype.h> ȤɸإåɲäޤޤISO 646 ʸå
˴ޤޤʤʸ䤽Ȥä token, pp-token ɽˡȤơ
trigraph ¤֤⤦ĤȤ <iso646.h> Ȥɸإå
digraph ε꤬ɲäޤ<iso646.h> ϤĤ operator ޥ
뤴ñʥإåǡäϤޤ*2
   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  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 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) ƳϥץˤȤɤ롣

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

  α黻̤ϤηɽǤϰϤˤʤФʤʤȤ
constraint 뤬Ϥ٤ƤŬѤΤʤΤɤ
Ǥ롣㳰ϵܤƤʤȤߤȡʸξǤϤ٤Ƥ
ŬѤȲ᤹뤷ʤStandard C ΰտޤϡɬפʤ
ǤϡפȤȤǤΤˤ٤Ǥ롣ޤ¾ǡʤ
Ϸ褷 overflow ʤפȤ⤢ꡢʤ黻ϰ
Ķ˿ǥåФ٤ɤϡȤˤޤǤ
ϥѥɾǤΤǤΤǡǥåФΤŬ
Ȼפˡ

  ϥץץͭǤϤʤΤǡʾޤ
  ޤC90 Ǥ /, % 黻Ҥˤγ껻ˤĤơʬ졦ʬҤ
ޤξη̤ implementation-defined ȤҤɤ꤬
ޤC99 Ǥ div(), ldiv() ƱͤεȤʤޤ

  *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://www.open-std.org/jtc1/sc22/wg14/


            ֣ ӣ ⡡

    [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 Ȥǥ쥯ȥˤ 183 ܤΥץƥȤäƤޤ
Τ 30 ܤϥإåե롢145 ܤϺڤΥץƥȤǡ8 
ϺڤΥץƥȤޤȤ᤿եǤإåեʳϰ
 *.cc Ȥ̾ǤȤϤ٤ *.t Ȥ̾ĤƤޤ
ϥѥեȤϴطʤץץեƥȤ
ΤǤäơɬäץηˤϤʤäƤޤ
󡣥ץץƥѤΥץƥȤȸ٤ΤǤ
  Standard C νϤϥץץȥѥȤ򰵽̤ƽ뤳
ǤΤǡϤˤäƤϥץץڤΥƥƥȤ뤳
Ǥޤ󡣤 *.t Υץ뤽ΤΤ Standard C ˽äƤʤ
ޤץץڤΥƥƥȤǤϤ¿
ꡢǤʤڤΥƥƥȤۤͤΤˤʤޤ
 *.t ΥץϤΤΤΤǤ
  C++ ΥץϡϤˤäƤ *.c, *.t Ȥ̾Ǥ C++ Υ
ȤưʤΤ⤢Τǡ*.cc Ȥ̾ΤΤѰդƤޤ
Ƥб *.t ƱǤ
  ץƥȤΥեˤ̾ n_ ǻϤޤΡnormal ΰաˡ
i_ ǻϤޤΡimplementation-dependent ΰաˡm_ ǻϤޤ
multibyte character ΰաˡe_ ǻϤޤΡerroneous ΰաˤ

  n_ ǻϤޤΤϡץץ˴ؤƤϴְ㤤 undefined ư
Τ implementation-defined ʬޤޤʤץǤ
Standard C Υץץåϡ򥨥顼ˤǤ
Фʤޤ
  i_ ǻϤޤΤϡʸåȤ˴ؤ implementation-defined ʻͤ
¸륵ץǡASCII ʸåȤȤƤޤASCII ʸ
åȤ Standard C νϤΥץץåϡ򥨥顼ˤ
ǤʤФʤޤ
  e_ ǻϤޤΤϡ餫 violation of syntax rule or constraint
ʤ顼ޤॵץǤStandard C Υץץåϡ
ƨȤʤǤǤʤФʤޤ
  n_, i_, m_, e_ θ˿³Τ C90 Υץץ,  C90
 C99 ζ̤ΥץץͤƥȤ륵ץǤإåե
Τpragmas.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 ⥪ޥǤm_ ǻϤޤΤϡmulti-byte character, wide
character Ȥƿ encoding ĤΤѰդƤޤǤС¿
 encoding 뤳Ȥ˾ޤޤm_* ϵʽΥƥ
ǤϤʤu_* Ʊͤʼɾܤ°Ƥޤ
  misc.t, recurs.t, trad.t ϥޥΥޥǤΣĤϥץץ
åɾоݤȤϤޤmisc.t ϵʽ䤽¾νҤ˺ܤäƤ
ΡɽˤäƷ̤ۤʤƥȡtranslation phase 5,
6 ˴ؤƥȡĥǽΥƥȡ򽸤᤿ΤǤrecurs.t ü
ʺƵŪޥΥץǡtrad.t ϸŤ "Reiser model cpp" ΤΥ
ץǤ
  test-c Ȥǥ쥯ȥˤ 132 ܤΥե뤬äƤꡢΤ
26 ܤϥإåե24 ܤ test-t ΤΤƱˡ101 ܤϺڤΥ
ץ륽ǡ3 ܤϺڤΥץ륽ޤȤ᤿ե롢¾ 2
ܤϼưƥȤ˻ȤեǤΤ 31 ܤϥޥΥץ륽
ǤإåեʳΥϤ٤ *.c Ȥ̾ĤƤ
ϣäΥץηˤʤäƤޤ
  Ϥꡢn_, i_, m_, e_ ǻϤޤ̾ĤƤޤn_ ǻϤޤΤϡ
Standard C Ǹ strictly conforming program ʴְ㤤ϰ¸ʬ
ʤץˤǤϤϤ򥨥顼ˤѥ
¹ԤǤʤФʤޤ¹ԤǤϤ줾

    started
    success

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

    <End of "n_std.c">

ȤäλΥåФޤǤʤϲ餫μԤΥ
Фޤi_ ǻϤޤΤ ASCII ȤʸΥץǡ
ASCII ʸåȤĽϤϡ n_ ǻϤޤΤƱͤ
ѥ뤷¹ԤǤʤФʤޤe_ ǻϤޤΤˤĤƤϡ
Ϥϥѥʥץץ˻ǤǤʤФʤޤ
  ѥ뤢뤤ϼ¹ԤˤƥȤϺǤΥƥˡǤ
ˡǤϽϤ˴ְ㤤뤳ȤϤ狼äƤ⡢ɤ˴ְ㤤Τ
ˤʤʤ礬ޤ *.c եץץåˤ
ơη̤ܤǸƥƥȤ뤳ȤǤΤǡϤ¤ꤽ
ۤΤɾǤޤ*.t եΤۤüŪǤˡ
  ?_std.c Ȥ̾ΥեϺڤեޤȤ᤿ΤǤ
  u_*.c Ȥ̾Υեϥޥǡundefined behavior ΥƥȤ
ڤΥեǤundefs.c ϤܤˤޤȤ᤿ΤǤ
unspcs.c  unspecified behavior ΥƥȤ򤹤Τǡwarns.c ϰʾ
ɤˤƤϤޤʤϤ˥󥰤ФΤ˾ޤƥȤ
ܤեǤunspcs.c, warns.c ⥪ޥǤm_ ǻϤޤ륵
ˤϿ multi-byte character encoding бΤޤ
  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 Ȥǥ쥯ȥˤΤϡGCC / 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] ȡˡ
  Multi-byte character νϼ¹ԻĶˤäƽϤưͤѤ
礬Τǡm_* ΥƥȤˤդɬפǤ[3.1] ȡˡ

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

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

  󤳤ˤϵҴŪʴϤޤ󡣤 Validation
Suite ϻ䤬˷᤿Τǡ礷Ϥޤ󡣤Ǥ⡢
Ϥεʹ٤ҴŪɾ뤿ܰ¤ˤϤʤǤ礦
  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, *2, *3

  cpp_test λȤ Visual C++ 2005 ˤȤȡ̤Ǥ

    cpp_test VC2005 "cl -Za -TC -Fe%s %s.c" "del %s.exe" < n_i_.lst

  ʲϤ줾 "  " ǰϤɬפޤ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 ؤνϤϿޤơVC2005.sum ˤκ̤
˽񤭹ޤޤȸäƤ⡢Σκޤ

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

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

  ˡΤ褦ˤޤ

    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  m_36_*.c  0x5c ('\\') ͤΥХȤ encoding ΥƥȤǤ
     encoding ̾ϻȤʤƥ⤢ΤǡǤϽ
    롣

        [2.2.3]     GCC / testsuite ˤ뼫ưƥ

            [2.2.3.1]   TestSuite Ȥ

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

  ڥåȤ cpp-test ǥ쥯ȥ test-t, test-l ǥ쥯ȥ GCC
/ testsuite бƽľΤǡcpp-test  test-t, test-l
γƥǥ쥯ȥ꤬ޤ
  m_*, u_1_7_*  multi-byte character γƼ encoding б
ΤǤGCC 3.3 ޤǤΥСǤϴĶѿ encoding ˱
Ѥ뤳ȤɬפǡѥδĶѤ뤳Ȥ testsuite Ǥ
ǤʤΤǡcpp-test ˤϴޤƤޤ*
  GCC / cpp λͤѹ testsuite λͤѹޤǤˤ
ꡢ줫⤢ͽۤޤˤäƤϸڥåȤΰ
ɬפˤʤޤȤ˿ǥåɲä줿ѹ줿ꤷϡ
testcase ˤɬפޤΤȤ GCC ΥС
󤬤ҤɤŤʤ¤ꡢʽɬפʤȻפޤcpp-test
 testcases  GCC 2.95.3, 3.2, 3.3.2, 3.4.3, 4.0.2 γ cpp (cpp0, cc1,
cc1plus)  MCPP ưΤƤޤ
  testsuite Ǥϼ¹ԻץϤˤäѤ뤳ȤϤǤޤ
ʣεʤ¾ʻ¸Ƥ븽ߤξǤ std= Ȥץǵ
ΥСɬפޤΥץ GCC θŤС
ˤ¸ߤޤ󡣤äơ testsuite ŬϰϤ GCC 2.9x
ʹߤ MCPP V.2.3 ʹߤȤȤˤʤޤ

  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 ˱ơ¿
ΥġŬڤʥСΤΤäƤʤФʤޤ󡣤
θڥåȤȤǤ⡢ȤʤƱǤ

  *  ºݤˤϴĶѿꤷƤ GCC ưʤ

            [2.2.3.2]   TestSuite ؤΥ󥹥ȡȥƥ

  GCC / testsuite ǻθڥåȤȤˤϡΤ褦ˤޤ
  ޤ cpp-test ǥ쥯ȥ GCC  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 ȤΤ GCC 3, 4 ΤΥץǤGCC 2 ˤϤ
ΥץϤʤΤǡGCC 2 ǥƥȤϤΥץϤ
Фʤޤ󡣤ΤˡΣĤ testcase ˤĤƤ *_run.c.
gcc2, *_run.c.gcc3 ȤΥեѰդƤޤŬʤۤ
 *_run.c ˥󥯤ƻȤäƤ

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

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

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

    make bootstrap

Ȥ GCC Υ򥳥ѥ뤷ǡ

    make -k check

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

    make check-gcc RUNTESTFLAGS=cpp-test.exp

  Testsuite  log  ./testsuite ǥ쥯ȥ gcc.log, gcc.sum ˵Ͽ
ޤ
  make check ϡĶˤäƤ GCC Υ INSTALL/test.html
褦ˡDEJAGNULIBS, TCL_LIBRARY ȤĶѿ꤬ɬ
Ǥ
  ޤGCC 3 ǤϴĶѿ LANG, LC_ALL  C ȤƱѸĶˤʤ
ʤޤ
  GCC Υѥ make check ǻȤΤϡǤ˥󥹥ȡ뤵
Ƥ gcc, cc1 ǤϤʤgcc ǥ쥯ȥ줿 xgcc, cc1,
cc1plus, cpp0 Ǥ뤳ȤդƤ
  cpp-test ˤƥȤϼΤ褦ˤƤǤޤ

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

ξϡ¹Ԥǥ쥯ȥǤդǤϥȥǥ쥯ȥ
ϤޤƥȤΤϡǤ˥󥹥ȡ뤵Ƥ gcc, cc1,
cpp0 Ǥcpp-test  testsuite ɬפʤΤϡGCC ѤγƼե
 (config.*, *.exp) ˤ뤫Ǥ
   runtest --tool gcc ǻꤹ 'gcc' Ȥ̾ϤΤȤǤʤ
Фʤޤ󡣤⤷ºݤ˻Ȥѥ餬Ȥ cc, gcc-3.4.3 
gcc ʳ̾ξϡܥå󥯤ä gcc Ȥ̾ǸƤ
Ф褦ˤƤޤ
  ʤcpp-test ˤϥץץå˥󥰤ФΤ˾ޤȹ
륱ˤĤƤΥ˥󥰤 testcases ¿ޤޤƤޤ
GCC ΥץץåϤȾʬʲ PASS ޤ󤬡̤ʤ
ȤäơưְäƤȤץץåѥ뤵
ʤȤȤȤǤϤޤ󡣤ְäƤ뤫
ϤʤץץåΡʼפʤΤǤ

            [2.2.3.3]   MCPP μưƥ

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

    make check-gcc RUNTESTFLAGS=cpp-test.exp

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

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

  MCPP  GCC 3, 4 Ǽ¹Ԥ硢cpp-test  testcases 
٤Ƥ PASS ϤǤGCC 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 ΥƥȤϤǤޤ

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

            [2.2.3.4]   TestSuite ȸڥå

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

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

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

  Testsuite ڥåȤ򤳤ΣĤΥץץåŬѤ̤
˺ܤƤޤ2006/05 Υƥȡˡ
  GCC 3.3.2 ǥץץå MCPP V.2.6 ֤Ƽ¹ԤϤ
ʤޤ

                === gcc Summary ===

# of expected passes            264
# of unexpected failures        1
# of expected failures          4
/usr/bin/gcc version 3.3.2

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

                === gcc Summary ===

# of expected passes            215
# of unexpected failures        52
# of unexpected successes       2
# of expected failures          2
/usr/bin/gcc version 3.3.2 20031218 (Vine Linux 3.3.2-0vl8)

  FAIL ¿ϡ˥󥰤ФƤۤȤǽФƤʤȤ
ΤǤ
  GCC 4.0.2 / cc1 ۤȤѤޤ

                === gcc Summary ===

# of expected passes            214
# of unexpected failures        53
# of unexpected successes       2
# of expected failures          2
/usr/bin/gcc version 4.0.2 20050901 (prerelease) (SUSE Linux)

  GCC 2.95.3 / cpp0 ǤϤʤޤ

                === gcc Summary ===

# of expected passes            181
# of unexpected failures        87
# of unexpected successes       3
# of expected failures          1
gcc version 2.95.3 20010315 (release)

  GCC 3, 4 / cc1 ⤵˥˥󥰤ʤԥȤγ줿ǥ
å⤤ĤޤC99, C++98 οͤȾʬ̤Ǥ
  GCC ΥСˤäƷ㤦ΤϡĤ testcase ʣ
FAIL ȯ뤳Ȥ뤫Ǥ

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

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

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

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

  ΤΥץȥǡΤΤ 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] 
̤ˤȤꤢޤ

  *1  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  C++98 Ǥ C90, C99 ȤѸ줬ʤäƤ뤬ݤä˰
    

    [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 ѴǤɬפ
ޤ
    : 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 񤯤ȤǤޤ
    : 2

            [n.1.3]     Trigraphs ϣĤ¸ߤʤ

  Trigraphs Ͼ嵭ΣĤʤΤǡʳ ?? ǻϤޤ sequence 
¾ʸѴ뤳ȤϤʤ?? åפ뤳Ȥ⤢ޤ
Trigraph ȤǤʤ ? ޤ sequence ߤƤ⡢ץץ
Ǥɬפޤ
    : 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ʤǤ 4 Ǥʤ 0 

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

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

            [n.2.3]     ʸƥ

  ʸƥ <backslash><newline>  K&R 1st. ΤΤǤ
    : 2

            [n.2.4]     ̻Ҥ

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

            [n.2.5]     Trigraph ˤ <backslash>

  <backslash>  \ Ǥʤtrigraph ˤ ??/ ⤢ޤ
 ??/  translation phase 1  \ ѴƤޤ顢phase 2 Ǥ
 \ ΤΤǤ
    : 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 ǤϥȡϢˤ ## 黻ҤȤޤ
    : 6

            [n.dslcom]  // 

  K&R 1st.  C90 ˻ޤǡȤ /* ǻϤޤ */ ǽΤ
*1
  C99 Ǥ C++  // ⥳ȤȤưȤˤʤޤ*2
    : 4
  C90 ǤϤϥȤǤϤʤñʤ / Ȥ pp-token Ĥ sequence
Ȥƽ٤ΤǤ뤬C99  // 򥳥ȤȤƽ
ϤŪǤäMCPP Ǥ 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 νͤƤߤСΤȤǤ
    : 4

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

  <backslash><newline> ȥȤˤäƤĤʪԤˤޤ
 pp-directive Ԥ¸ߤޤTranslation phase Ƥʤ
ץץåǤϡ뤳ȤǤޤ
    : 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 ȤƤ⡢ʸ
黻ҤȤƤȤޤ
    : 6

            [n.4.2]     Digraph spelling ʸ

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

            [n.ucn1]    UCN ǧ 1

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

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

            [e.ucn]     UCN θ

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

            [e.4.3]     ʸ

  äΥȡη򤷤Ƥʤ sequence Ǥ⤿Ƥ pp-token Ȥǧ
ޤäơץץ tokenization ǥ顼Ȥʤϡ
ޤꤢޤ
  Τۤ undefined behavior Ȥʤ礬Ĥޤ[3.
2] ȡˡ
  ʸϥץץ #if ԤǤ⥳ѥǤ⡢violation of
syntax rule Ǥ*
    : 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.2]  [u.1.6] ȡˡ
    : 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ĤΥץʤΤ 4 

            [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 ˤϡʤηĤĤƥȤϴޤޤƤ

    : 6

            [n.6.3]     ޥˤ header-nameΣ

  ĤޤʤȤǤޥɬ⣱ĤǤɬפϤޤ
    : 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

            [n.7.2]     ե̵̾Ƥɤ

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

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

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

            [n.line]    ֹϰ

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

            [e.7.4]     ե̾磻ʸƥ

  Filename ΰʸƥǤʤФʤ餺ĤޤʤȤǤ
磻ʸƥǤ violation of constraint Ȥʤޤʤʳ
pp-token ǤϤʤ undefinedХ󥹤ʵǤˡ
    : 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 Ǥ*
    : 8ޥŸƽΤ 2 λ뤫ɤ
ʤ

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

            [n.8.2]     å̵Ƥɤ

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

        [2.4.9]     #pragma, _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 Ϥ٤ƤΤޤޥѥΤϤȤˤʤ
ޤ
    : 10#pragma 򥨥顼ˤƤϤʤ˥󥰤Ф
Ϥޤʤץץϥ顼ˤʤΤ˥ѥΤ顼ˤ
ȤΤϤʤǤ⤷äƤץץδְ㤤ǤϤʤ
Τ 10 Ϳ롣ץץåΩƤʤϤǤζ
̤Ĥʤϡص塢0 Ȥ롣

            [n.pragma]  _Pragma() operater

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

            [e.pragma]  _Pragma() ΰʸƥ

  _Pragma() operator ΰʸƥǤʤФʤޤ
    : 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 ȸƤӤޤ
    : 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

        [2.4.11]    #if defined

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

            [n.11.1]    #if defined

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

            [n.11.2]    defined ñ黻

  defined ϱ黻ҤΣĤǤꡢ1  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 ɾ
Τ⤢ޤܤΥץϸԤå뤿ΤΤǤ
    : 6

            [n.12.2]    unsigned long  #if 

  C90  #if Ǥ unsigned long ɾǤʤФʤޤ
    : 4

            [n.12.3]    ʿ

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

  *  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 ɾȤäƤޤ
    : 4ʿǧ뤬ɾꥪСեꤹ
Τ 2 ʿǧʤΤ 0 

            [n.12.5]     L, l

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

            [n.12.6]     U, u

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

            [n.12.7]    

  #if ǤοⰷʤФʤޤK&R 1st. λͤǤ
    : 4

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

  C90 Ǥϡ#if ˸ȡͤ long ޤ unsigned
long ɽǤϰϤˤʤ violation of constraintʿ
顼Ȥʤޤ #if ˤĤľܵꤵƤ뤳ȤǤϤ
󤬡̤ˤĤƤε꤬ꡢ#if 㳰ǤϤʤȹͤ
*
  ʤʸ overflow ˤĤƤϡe.32.5, e.33.2, e.35.2 ǥƥ
ޤ
    : 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 ȤҤɲäޤ*
    : 10
  ĤΥץˤĤơǤФ줾 2 

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

            [e.intmax]  黻η̤ intmax_t ϰϳ

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

        [2.4.13]    #if α黻

  #if ΰǤ̤٤ȼΤ褦ʰ㤤
Ǥ
  C90 Ǥ int  longunsigned int  unsigned long Ʊɽ
ĤΤ褦ɾ롣C99 Ǥ int, long  intmax_tunsigned int,
unsigned 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

            [n.13.2]    ^, |, &

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

            [n.13.3]    ||, &&

  ǤʤϤϤʤǤ礦
    : 4

            [n.13.4]    ? :

  ǤʤϤϤʤǤ礦ʤȻפ줿ºݤˤϤʤ
ˡ
    : 2

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

  ¿Σ黻ҤǤξդη򤽤뤿 usual arithmetic conversion
̾λѴˤԤޤK&R 1st. Ǥϥեȱ黻ҤǤ⤳줬Ԥ
뤳ȤˤʤäƤޤStandard C ǤϹԤʤȤˤʤޤ
դͤϾ˾Ǥ뤳ȡʳɽǤϡ
Ѵ줿ΤǤϥӥåȥѥѤäƤޤäƤΤ狼
ʤʤäƤޤȤͤȡʵǤ礦*
    : 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 ȯޤ
    : 6ĤΥƥȤ򣱤Ǥ뤴Ȥ 2 
  ɾ§ K&R 1st. ǤƱʤΤǤ뤬Υץ 0U Ȥ
ȡ U ҤȤäƤΤǡK&R 1st. νϤǤϽǤ
ξϡ 0U ʤɾ뽽ʬ礭ͤǡ -
1 ʤѴͤ礭ʤͤǽؤơƥȤ
ľɬפ롣Pre-ANSI νϤǤʤ #if ˡΤ
Τ⤢롣

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

  ||, && 黻ҤǤɾޤäƤꡢդɾǷ̤ꤹ
դɾޤ? : Ǥ operand ɾ̤ˤä軰
Τɤ餫ɾ졢¾ɾޤ*
  äơɾʤˤϤȤ 0 ˤäƤ⥨顼
Ϥʤޤ
    : 6ĤΥץΤԤĤ뤴Ȥ 2 İ
ʤΤ 0 ְäǥåФΤ 2 

  *  ? : 黻ҤǤϤ 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

            [n.13.9]    ? : Υ롼ײ

  黻 ? : ϱ麸ط礵ޤ
    : 2

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

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

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

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

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

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

            [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] ȡˡ
    : 4

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

            [n.13.14]   ĤΥȡŸޥ

  ĤΥȡŸޥޤ #if ҾʤΤǤϤޤ
󤬡ϤϤꤽΥޥȤŸ˾ɾ٤
礦
    : 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 Ǥꡢݥ󥿤ϻȤʤΤǡʸƥϻȤ
ޤ
    : 2

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

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

            [e.14.3]    뤷ʤ

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

            [e.14.4]    #if defined Υå

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

            [e.14.5]    ʤ

  #if ǼʤΤϤ violation of syntax rule Ǥ
    : 2

            [e.14.6]    ޥŸȼʤʤ

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

            [e.14.7]    Keyword ǧʤsizeof

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

            [e.14.8]    Keyword ǧʤ̾

  e.14.7 Ʊͤˡ(int)0x8000  (0)0x8000 ȤʤꡢϤ violation of
syntax rule Ȥʤޤ
    : 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 ϤǤʤФʤ
󡣤¾ǼΤ褦ʵ⤢ޤ

ANSI 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 ˤѤƤޤ
*
    : 2

  *  C99 5.1.1.3 Diagnostics

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

  C90 Ǥϡ#if ͤ long / unsigned long ɽǤϰϤˤʤ
ʤޤ
    : 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

            [n.15.2]    #ifndef ˤޥΥƥ

    : 6

            [e.15.3]    ̻ҤǤʤ

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

            [e.15.4]    ;פʰ

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

            [e.15.5]    ʤ

  ʤΤ⡢ violation of syntax rule Ǥ
    : 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 ιԤˤ¾Τɤʥȡ⤢äƤϤޤ
    : 2

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

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

#if     MACRO
#else   ! MACRO
#endif  MACRO

ǤϤʤ

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

Ƚ񤭤ޤ礦
    : 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 Ǥ
    : 2

            [e.17.2]    #if Τʤ #else

  б #if Τʤ #else ְ㤤Ǥ
    : 2

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

  #else θˤޤ #else ФƤΤ⡢󤤤ޤ
    : 2

            [e.17.4]    #else θ #elif

  #else θ #elif ФƤƤ⤤ޤ
    : 2

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

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

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

    : 2

            [e.17.7]    #endif Τʤ #if

  #endif ˺뤳Ȥϼºݤˤ褯ޤϤϤФ
ƿǥåФʤФʤޤ
    : 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ĤΥޥΤΣĤǤʤ 10 

            [n.18.2]    Function-like ޥ

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

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

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

            [n.vargs]   Ѹİޥ

  C99 ǤϲѸİޥƳޤ
    : 10

            [e.18.4]    ̾ʤ

  #define ԤκǽΥȡϤ identifier ǤʤФʤޤ
    : 2

            [e.18.5]    ʤ

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

            [e.18.6]    Υѥ᡼

  Υѥ᡼ violation of syntax rule Ǥ*
    : 2

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

            [e.18.7]    ѥ᡼̾νʣ

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

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

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

  ޥΥѥ᡼ identifier ǤʤФʤޤ*
    : 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
    : 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 ϤʳΤȤ˻ȤäƤϤޤ
    : 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 οäƤϵޤ
    : 4

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

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

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

  ִꥹȤΥȡ󤬰ۤʤ violation of constraint Ǥ
    : 4

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

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

            [e.19.5]    ѥ᡼λȤ㤦

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

            [e.19.6]    ѥ᡼̾㤦

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

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

  ޥ̾ϰĤ֤̾°Τǡfunction-like ޥ object-
like ޥȤƱ̾ȤȤϤǤޤ
    : 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]    ̾Ϥ٤ŸоݤȤʤ

    : 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 ʬΥϤɬפޤ
    : 4

            [n.21.2]    ޥΥޥʬΥ

  ޥΰ˥ޥä⡢Ÿִ̤ꥹ
 pp-token ȤäĤƤޤäƤϤޤ
    : 2

        [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 Ȥ
ƤƤ⡢Ÿ뤳ȤϤޤ
    : 4

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

  Pp-number  digit ޤ . ǻϤޤޤ
    : 2

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

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

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

  C99 Ǥϡư򣱣ʤɽ뤿ˡpp-number  P ޤ
 p  + ޤ - ³ sequence ɲäޤ
  ʤprintf() ư򣱣ʤɽˤ %a, %A Ȥ
conversion specifier Ȥޤ*
    : 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 ޥǤ
    : 6

            [n.23.2]    Pp-number 

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

    : 2

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

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

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

   function-like ޥִꥹ ## 黻Ҥ pp-
token ΤʤǤ
    : 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 бξü "  " ǰϤޤʸ󲽤
ޤ
    : 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 Ϻޤ
    : 4

            [n.24.3]    \ 

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

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

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

            [n.24.5]    ޥŸη̤ token separator Ĥʤ

  ̤˥ޥŸǤϤη̤ pp-token ȤäĤƤޤʤ
˲餫 token-separator 뤳ȤԤޤ[2.4.21]
ȡˡޥŸη̤ʸ󲽤ϡϺʤ
Фʤޤ
  ʤ token-based ʽ§Ȥʤ character-oriented ʬ
äƤ뤿ˡ䤳꤬ȯޤ
    : 2

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

  # 黻Ҥ operand ϥѥ᡼̾ǤʤФʤޤ
    : 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]    ΥޥŸ

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

            [n.25.2]    ĤΥȡŸ

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

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

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

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

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

            [n.25.5]    # 黻Ҥ operand Ÿʤ

  # 黻Ҥ operand Ǥѥ᡼б⡢ޥŸ

    : 4

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

  ΥޥŸϤΰǹԤޤ뤷ʤޥ
violation of constraint ǤFunction-like ޥ̾ϤǤϥ
ƤӽФǤϤޤ󤬡 ( ³ȡ줬ޥƤӽФ
sequence γϤȤʤޤϤ줿Ǹ塢 ( б ) ʤ
Фʤޤ*
    : 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 ǤϡŤ˰۾ʥޥˤĤ
Υƥȹܤ n.27.6 ޤ󡣡ָ³ȡμߡפ
ޥŸΰ۾ʵ꤬뤳Ȥ򡢴ԤȻפޤ*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 ޥľܺƵǤ
    : 2

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

  Object-like ޥδܺƵǤ
    : 2

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

  Function-like ޥľܺƵǤ
    : 2

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

  Function-like ޥδܺƵǤ
    : 2

            [n.26.5]    κƵŪޥ

  Standard C ˤϡְٺִػߤ줿ޥϡ̤ʸ̮Ǻ
ƤִʤפȤ̣ʵ꤬ޤŪˤ˳
ΤϰΥޥοƥޥΰǤ˺ƵŪޥ
äϡ٤ִޤ󤬡ϿƥޥκǤִ
ޤ
    : 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

            [n.27.2]    Function-like ޥΥͥ

   K&R 1st. ǤƱǤ
    : 4

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

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

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

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

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

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

            [n.27.6]    ִƱ̾ޥ

  Ǥϰ̤Ʊ̾ΥޥϺִޤ󤬡ִ⤢
ޤͥȤ줿ޥƤӽФǺִꥹȤθΥ
pp-token ߡƱ̾ޥȤ۾ʾǤ
[2.4.26] 򻲾ȡˡ
    : 2

            [e.27.7]    ˰οʤ

  Function-like ޥθƤӽФǤϰοѥ᡼οȰפƤ
ʤФʤޤ󤬡ִꥹȤκȯ줿 function-like 
Ǥ⡢ƱͤǤ , ǶڤΤʤΤǡ
åʥޥǤϰοľŪˤ狼ˤȤޤ
    : 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 ǤѲޤ
    : 4"n_28.t" ȤʸƥǤʤ n_28.t Ȥäñʤ̾
ˤʤΤ 0 

            [n.28.2]    __LINE__

  ץץΥեιֹɽޤ
ֹϣϤޤޤֹʪԤֹǤ
    : 4ֹ椬 0 ϤޤΤ 2 

            [n.28.3]    __DATE__

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

    : 410 ̤ξ dd Σܤ 0 ȤʤΤ 2 

            [n.28.4]    __TIME__

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

            [n.28.5]    __STDC__

  C90, C99 νϤǤ 1 ޤ
    : 4

            [n.28.6]    __STDC_VERSION__

  C90 / Amendment 1:1995 бϤǤϡ줬 199409L 
ޤ*1
    : 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 

    : 4 2 

            [n.28.7]    󥯥롼ɤ줿ե __LINE__ 

  __FILE__, __LINE__  translation unit ǤϤʤեоݤ
Τǡinclude 줿ǤϤ include ե̾ȹֹ
ˤʤޤ
    : 4ֹ椬 0 ϤޤΤ 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

            [n.29.2]    Ƥʤޥ #undef

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

            [e.29.3]    ̾ʤ

  #undef Ԥˤ identifier ɬפǤ
    : 2

            [e.29.4]    ;פʥȡ󤬤

  #undef ԤˤϣĤ identifier ʳΤΤäƤϤޤ
    : 2

            [e.29.5]    ʤ

  #undef Ԥ˰ʤΤ violation of syntax rule Ǥ
    : 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]    ޥƤӽФʣԤˤޤ뤳ȤǤ

    : 6

            [n.nularg]  ޥƤӽФΥ

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

        [2.4.31]    ޥƤӽФΥ顼

  ϥޥƤӽФΤĤΥ顼Ǥ

            [e.31.1]    ¿

  οѥ᡼οȰäƤΤ violation of constraint Ǥ
Undefined ǤϤޤ*
    : 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 ǤϥǧޤϰβᾮȤϰۤʤޤ
ʬΥ ',' ǡƤƤϤޤ
    : 2

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

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

            [e.vargs2]  Ѱޥΰʤ

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

        [2.4.32]    #if ʸ

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

  *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 ΥƥȤŵƱǤ롣

            [n.32.1]    Character octal escape sequence

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

            [n.32.2]    Character hexadecimal escape sequence

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

            [i.32.3]    Single-byte character constant

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

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

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

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

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

        [2.4.33]    #if Υ磻ʸ

  磻ʸ Standard C ǿߤ줿ΤǤͤɾ
single-byte character constant ˤ implementation-defined ǡ
ȤɾƤޤ
  磻ʸˤϳƼ encoding ޤ [3.1] ǤȤꤢ
Ǥ ASCII ʸб磻ʸȤꤢޤ

            [e.33.2]    磻ʸͤϰϳ

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

        [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

            [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 ηϤνϤκȤʤޤ
    : 2

            [i.35.3]    Multi-character 磻ʸɾ

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

        [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.6] ȡˡ

            [n.37.1]    ޥΣĤΥѥ᡼

  C90 ǤϡޥΥѥ᡼ϣĤޤǤݾڤƤޤ
    : 2

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

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

            [n.37.3]    ʸμ̻̾

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

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

            [n.37.4]    Ťξ

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

            [n.37.5]    Ť #include

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

            [n.37.6]    ŤΥåդ #if 

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

            [n.37.7]    509 ХȤʸƥ

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

            [n.37.8]    509 ХȤ

  C90 ǤϡԤĹ 509 ХȤޤǤݾڤƤޤ
    : 2

            [n.37.9]    1024 ĤΥޥ

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

            [n.tlimit]  C99  translation limits

  C99 Ǥ translation limits ˳礵ޤ
    : ʲΤ줾ˤĤ 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 ˹뤳Ȥˤʤ뤫Ǥ
ʬޥǽ񤫤Ƥϡ̯꤬ޤ*
    : 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
    : 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
    : 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 ȤƼʤФʤޤ*
    : 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 Ȥʤޤ
    : 2

        [d.1.5]     ޥ

  __FILE__, __LINE__, __DATE__, __TIME__, __STDC__, __STDC_VERSION__
C99 Ǥ __STDC_HOSTED__ ˰ʳλޥ implementation-
defined ǤϣĤ _ ʸ³̾ޤϣĤ _ ǻϤ
̾ǤʤФʤޤ*
    : 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> 뤳Ȥͤ졢ץץåǻɬפ
ʤǤ
  ɤˤƤɥȤƤ뤳ȤɬפǤ
    : 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] ΰ񤫤Ƥнʬȹͤ
ޤ
    : 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 Ǥ
    : 2

  *  C99 6.10.3.2 The # operator

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

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

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

  ΤϥϡɥȣϣӤǷޤΤʤΤǡǤɾоݤ
ޤϣ,,Ǥ
  ХȤ single-character ʸǤ⡢ΰ implemen-
tation-defined ǤޤץץȥѥȤɾäƤ
ɤȤˤʤäƤޤ*
    : 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 Ǥ
    : 2ɾλ d.2.1 Ʊ͡

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

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

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

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

        [d.2.5]     #if: αե

  ̤αӥåȥեȤӥåȤɤ뤫 implemen-
tation-defined Ǥ CPU λͤˤޤϤμ
ˡˤȻפޤ*
    : 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
    : 2ɾλ d.2.1 Ʊ͡

  *1  ANSI 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 ХȤݾڤʤФʤޤ*
    : 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 Ǥ*
    : 2

  *  C99 6.1.2 Identifiers -- General


             ʤ׵ᤵƤʤ¦̤ɾ

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

    [3.1]       Multi-byte character encoding

  Multi-byte character ˤϳƼ encoding ޤλͤ
implementation-defined ǤǤϽϤɤ¿ͤ encoding
ˤɤޤбƤ뤫ΥƥȤʼפȤƤȤꤢޤ
   Validation Suite Ǥϡm_33, m_34, m_36 ˤĤƤϿ encoding
бץѰդƤޤϤϤΥƥǤɸ
encoding бƤʤФʤʤΤϤǤ¿б
뤿ˤϡ¿ encoding бƤɬפޤ
*
  ƥȤˡϥƥϤˤäưۤʤꡢñǤ
ޤ

  GCC ϴĶѿ LC_ALL, LC_CTYPE, LANG бưѤ뤳Ȥˤʤ
ƤޤȾüǤƤˤǤޤ󡣤ޤGCC ǤεǽȤ
뤫ɤ GCC Ȥ򥳥ѥ뤷 configuration ˤäưۤʤ

   GCC V.3.4 Ǥ multi-byte character νѤޤ
ץץκǽˡtranslation phase 1 ˡ˥
 encoding  UTF-8 ѴƤޤޤʤȡ#if 
ʸ UTF-8 ǤʤɾǤ encoding ȤϴطʤʤäƤ
ޤޤ
  C++98 εʤˤƱ꤬ͤꡢtranslation phase 1  multi-byte
character  UCN ѴƤޤΤǡ#if ʸ UCN ȤƤ
ʤɾǤʤȤˤʤޤ
  ʤȼΤ𤷤ȡ̤ #if ʸȤ
Τ portability ̵Ọ̵̇̄Ƨޤơ Validation Suite 
 V.1.5  #if  multi-byte/wide character ʸΥƥ
ɾоݤϤޤm.33, m.34, m.36.1ˡ

  Visual C++ ˤ #pragma setlocale Ȥʥǥ쥯ƥ֤Τǡ
줬ȤޤWindows ǤϡϰȸΥץפˤäƻѸ
ѹǤ뤳ȤˤʤäƤޤȾüǤäǤ#pragma
setlocale  Windows 򤤤餺˻ȤΤǡץޤˤȤäƤ
ΤǤVisual C++ ȤɤޤƤ뤫̤Ǥ
ˡ
  ΥƥȤ¾νϤǤϺΤȤνϤǤΥǥեȤ
encoding ˤбƤʤ褦Ǥ饤֥ setlocale() δؿ
ĽϤ¿ޤϥΥץץ䥳ѥˤ
طޤ󡣤ɬפʤΤϡϼȤ encoding ǧ
ǽϤʤΤǤ

  *  C99 Ǥϡ\u, \U ǻϤޤ Unicode  sequence Ƴ졢multi-
    byte / wide character ȤδطƤ狼ˤʤäƤޤäƤ
    롣C++ Standard ǤϤʣǤ롣

        [m.33.1]    磻ʸɾ

  磻ʸˤĤƤϡ[2.4.33] 򻲾ȤƤ
    : ʤ

        [m.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 

    : ʤΥƥȤϸҤ u.1.7 ΥƥȤȹ碌ȽǤɬ
פ롣ñʸͤɾǤǤϡ encoding ǧƤ
ȤˤϤʤʤu.1.7  multi-byte character  encoding ǧ
ϰϤ˼ޤäƤ뤫ɤΥƥȤǤ롣m.34 ʸͤɾ
ǡ u.1.7 ŬڤʿǥåФƽƤ
encoding ǧƤȸ롣

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

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

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

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

    [3.2]       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 further replacement 
    Ⱥִ
     C99 6.10.3.4 Rescanning and further 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 ХȤμΥХȤХȤȤƻȤʤ
ΤǤǤ*
    : 7γ encoding ˤĤ 1 ʤm.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 ¤ӤˤʤäƤʤȤʤΤǡñȤ apostrophe Ϥ
󡣤ΥץǤϡȤΤĤΤȤʸν '
򥵡뤿˿ƤޤǤ礦

  *  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 ꤷޤϤꥦ˥
ФΤŬǤ礦
    : 2ĤΥץΤĤޤϣĿǤǤ 1 

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

  C99 ǤϡϰϤ [1, 2147483647] Ǥ
    : 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 ȤȡΤޥϡ˸ݤޤϤˤ
äƤϡˤĤüʽ򤷤ƹˡŪʤΤȤưΤ⤢ޤ
ŪʻͤǤϤޤ
    : 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
    : 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 ǤϤ
ˤϰܿʤΤǡ˥󥰤ФΤŬǤ礦
    : 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.3]       Unspecified behavior

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

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

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

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

    [3.4]       ˥󥰤˾ޤ¾Υ

  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 ϣøˤϤʤΤǡ
ѥեɬ顼ˤʤޤ*/ æƤ
ϼΥȤνޤǤȤȲᤵΤǡ顼ˤʤʤ
Ȥޤϴʴְ㤤Ǥꡢץץ˥󥰤Ф
ȤǤѥեǲ餫Υ顼ˤʤäǤ⡢
ˤϸϤ狼ʤʤäƤޤ
    : 4

        [w.1.2]     ޥκ³Υȡ

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

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

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

        [w.2.2]     #if ʤ黻 wrap round

  ̵黻η̤ϰϳȤʤä wrap round 뤳ȤˤʤäƤ
Τǡ顼ˤϤʤޤ󤬡ְ㤤βǽΤǥ˥󥰤
Τ˾ޤǤ礦
    : 1

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

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

        [w.3.3]     31 ХȤĶĹ identifier

    : 1

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

    : 1

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

    : 1

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

    : 1

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

    : 1ϥץץåǤʤƤ⡢ѥΤ
ɤȤޤ

        [w.3.8]     509 ХȤĶĹ

    : 1

        [w.3.9]     1024 ĤĶޥ

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

        [w.tlimit]  C99  translation limits

  C99 Ǥ translation limits ˳礵ޤĶͤ
ĽϤǤ⡢portability ΤˤϵĶ륽ФƤϥ
˥󥰤ФȤ˾ޤޤ
    : 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.5]       ¾γƼʼ

  ʲˤϡϤλȤ䤹ʼ˴ؤ򽸤Ƥޤq.1.1
ʳϥץץǥƥȤ뤳ȤΤǤʤΤǤ

  q.1.* ư˴ؤΤǤ
  q.2.* ϥץĥǽ˴ؤΤǤ
  q.3.* ϲƯ륷ƥ䥷ƥǤθΨ˴ؤΤǤ
  q.4.* ϥɥȤ˴ؤΤǤ

  ˤϡʤŪɾˤ餶򤨤ʤΤ⤢ޤ
ޤҴŪɾǤΤΡμ٤ǤʤΤ⤢ޤ[5.2]
򻲹ͤˡŬ˺Ƥ

        [3.5.1]     ư˴ؤʼ

            [q.1.1]      translation 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 Ȥƥ֥ȥեäƤץץ
СѥΤɤĹιԤ뤳ȤǤ뤫
狼ޤ
    : 9ΥץˤĤƳ 1 ѥΤΥƥȤϴޤ
ʤ

            [q.1.2]     ǥåŪΤ

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

            [q.1.3]     ֹɽΤ

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

            [q.1.4]     ˽

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

        [3.5.2]     ץȳĥǽ

            [q.2.1]     Include directory λ

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

            [q.2.2]     ޥץ

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

            [q.2.3]     ޥäץ

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

            [q.2.4]     Trigraphs ץ

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

            [q.2.5]     Digraphs ץ

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

            [q.2.6]     ˥󥰻ꥪץ

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

            [q.2.7]     ¾Υץ

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

            [q.2.8]     #pragma ˤĥ

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

#ifndef __STDIO_H
#define __STDIO_H
    ...
#endif

ȤäǤޤƤȡưŪˤ򼡲ϥʤ褦ˤ
Ϥ⤢ޤ
  MCPP ˤϥإåե "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 ˡ
ƤϡʤΤǤ
  MCPP ϥץץȥ졼ǥХåϤ #pragma ä
ޤ̾ΥǥХåǤϥץץΥǥХåϤǤʤΤǡϥ
ץåǤǤʤפʵǽǤεǽϥץǻꤹ
 #pragma ȤۤǥХåĽǤΤǻȤ䤹
ʤޤ
  顼䥦˥󥰤ΥȥλΤ褦ˡ̾ϥѥ
ץǻꤹ뤳Ȥ #pragma ǼƤϤ⤢ޤ#pragma
 Standard C νϤǤ portability ꤬ʤȤȡ
ξꤷƻǤȤĹ꤬ޤѹ
ؤ뤳ȤˤʤȤû⤢ޤʤ顢ѥ
ץǤƤ餤ΤǤ
  ʳ #pragma ǥץץǽΤϡޤꤢޤ
  Ȥǡ#pragma sub-directive  implementation-defined Ǥ뤿Ʊ
̾ sub-directive Ϥˤäưۤʤ̣Ķ줬ޤ
̾ξͤ򤱤빩פ˾ޤޤGCC 3 Ǥ #pragma GCC poison Ȥ
դ GCC Ȥ̾ǻϤޤޤɤˡǤMCPP  V.2.5
Ϥޤͤ #pragma MCPP debug Ȥդ MCPP Ȥ̾ǻϤ
褦ˤޤ
    : 10

            [q.2.9]     ĥǽ

  ĥǽ #pragma Ǽ뤳ȤˤʤäƤޤȤ̤˥ץ
οͤƤȤ #pragma ǤϤʤǥ쥯ƥ֤
⤢ޤ
  Linux ΥƥإåǤ GCC  #include_next ȤƤޤ
ϥƥإå̵ѤʣƤ뤳ȤˤΤǡ
ȤǤϤޤGCC / cpp ˤϤΤۤˤ #warning, #assert 
ʳΥǥ쥯ƥ֤ޤ⤢ޤɬδʤ
ΤǤGCC 3.2 ǤΤĤ obsolete Ȥ줿ΤɤȻ
ޤ
  Wave ȤץץåǤϥޥͭϰϤꤹǥ쥯
֤ꡢбƥޥƤӽФεˡˤ C++ Υ׻
ˡѤƤޤ¸ȤƤ϶̣ΤΤǤ
  GCC / cc1 Ǥɸ⡼ɤưΤۤ traditional ⡼ɤλͤΥ
󤬤ޤMCPP ˤ¿ͤưͤΥץ󤬤ޤ
ߤˤϤʤΰ̣ޤ
    : 6

        [3.5.3]     ¹ԸΨ

            [q.3.1]     ®

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

  *  WindowsNT Υ꥽åȤΥץˤ WindowsXP ǤϻȤ
    ȻȤʤΤȤ뤬TimeThis ϻȤ褦Ǥ롣

            [q.3.2]     

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

            [q.3.3]     ܿ

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

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

        [3.5.4]     ɥȤʼ

            [q.4.1]     ɥȤʼ

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

    [3.6]       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 ǧ
    : 4

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

        [3.5.n.dslcom]  // 
    : 4

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

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

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

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

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

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

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


                    åץץμա

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

    [4.1]       ɸإå

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

        [4.1.1]     Ū

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

  ꤵƤ餺ͽ󤵤Ƥ⤤ʤ identifier 
ꤷƤϤʤǤϰϤɸإåˤäƷޤäƤʣ
ɸإåǽʣ롢뤤϶̤ϰϤ⤢ˡ*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 䥭㥹ȤȤ褦ǤBorland C
5.5ˡϳĥͤΤĤʤΤǤ礦
  桼ʬΥץ #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>  include ƤΤ¿ޤ
<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++ 2003  Vc7/include/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, V.3.8  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)
    ȤвϤʤ

    Visual C++ 2005 ǤϤϽ줿
  *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 ϥޥǤϤʤ
    operater-token ȤƤ롣ϤˤȤäƤϤäʡ̵̣ʻ
    ͤǤ롣


               ƼץץåΥƥȷ̡

    [5.1]   ƥȤץץå

  ƥȤϤȼ¹ˡϼ̤ǤϤϥ꡼줿
¤٤Ƥޤ
  ¹Իץ C95 (C90), C99, C++98 Τ줾Ǿİۤʤ

  ° <assert.h>, <limits.h> ꤬ϡľ
ƤƥȤƤޤ

ֹ:   ϣ        /                 /  ¹ԥץǿ
        ¹Իץ
    

1   :   Linux       /                       / DECUS cpp
        C95:    cpp
    Martin Minow ˤ DECUS cpp Υꥸʥ (1985/01) DEC
    γƼ亮ƥࡢUNIX, MS-DOS ΤĤνϤ˰ܿƤ뤬
    ΥƥȤǻȤäΤϡkmatsui ꥸʥǤ˼ä Linux /
    GCC ǥѥ뤷ΡTranslation limits ʤ٤򥯥ꥢ
    褦ޥ񤭴
2   :   FreeBSD 2.2.7   / GCC 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 
    ȤƽľΡ
    ϤΥСϾ嵭νϤбƤ Linux 
     GCC V.3.3 ǥѥ뤷ΤȤäƥƥȤ
3   :   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  cpp  bcc  trigraph.exe Ȥ
    ѴץबѰդƤ롣ֵʽפȾΤ뤿ΥХ
    Ǥ롣Borland C ǤϡȤäͽѴץǥƥȤ
    ʴŤƥȡˡȤ trigraph.exe  <backslash><newline>
    ˤ³ޤǽƤޤΤᡢֹ椬q.1.2 Τ
    Ǹˡ
4  :    Vine Linux 3.2, CygWIN 1.3.10
                    / GCC V.2.95.3 (2001/03)    / cpp0
        C95:    cpp0 -D__STRICT_ANSI__ -std=iso9899:199409 -$ -pedantic
                                                                -Wall
                gcc -ansi -pedantic -Wall
        C99:    cpp0 -std=c9x -$ -Wall
        C++:    g++ -E -trigraphs -$ -Wall
    GCC  portable ʥǤΤǡΥƥ˰ܿΤλ
    ͤϰܿԤѰդ٤Ǥ뤬ȼΥɥȤ󶡤
    Ƥʤcpp ΥɥȤȤƤϤϤ GNU  cpp.info ¸
    ʤ
5   :   Vine Linux 3.2  / GCC V.3.2 (2002/08)       / cpp0
        C95:    cpp0 -D__STRICT_ANSI__ -std=iso9899:199409 -$ -pedantic
                                                                -Wall
                gcc -std=iso9899:199409 -pedantic -Wall
        C99:    cpp0 -std=c99 -$ -Wall
        C++:    g++ -E -trigraphs -$ -Wall
     kmatsui ѥ뤷Ρ--enable-c-mbchar Ȥ
    ץդ configure Ƥ롣
6  :    Vine Linux 3.2 /                    / ucpp (V.1.3)
        C95:    ucpp -wa -c90
        C99:    ucpp -wa
    Thomas Pornin ˤ free software (2003/01)Portable ñΥץ
    åLinux / GCC ǥѥ뤷ƥƥȤ
7  :   WIN32        / Visual C++ 2003       / cl
        C95:    cl -Za -E -Wall -Tc
        C99:    cl -E -Wall -Tc
        C++:    cl -E -Wall -Tp
    -E ץǤϥȤ <backslash><newline> 
    ΤǡѥˤƥȤʻ (2003/04)
8  :    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  Plan9 Τ˽񤤤Ρ
9  :    WIN32       /                       / wave (V.1.0.0)
        C95:    wave
        C99:    wave --c99
        C++:    wave
    Hartmut Kaiser ˤ free softwareStand-alone Υץץå
    Boost preprocessor library ʤΤȤäƼƤ롣WIN32 
    μ¹ԥץ (2004/01) ǥƥȤ
10 :    FreeBSD, Linux, CygWIN   / GCC 2.95, 3.
   :    WIN32, MS-DOS   / Visual C 2003, BCC, etc.  / mcpp_std (V.2.4)
        C95:    mcpp_std -23 (-S1 -V199409L) -W31
                gcc -ansi -Wp,-2,-W31
        C99:    mcpp_std -23 (-S1) -V199901L -W31
        C++:    mcpp_std -23+ -V199711L -W31
    MCPP V.2.4 (2004/02)  Standard ⡼ɡLinux / GCC 2.95.3 ǥ
    뤷Τǥƥȡ
11 :    VineLinux 3.2   / GCC V.3.4.3 (2004/11)     / cc1, cc1plus
        C95:    gcc -E -std=iso9899:199409 -pedantic -Wall
        C99:    gcc -E -std=c99 -$ -Wall
        C++:    g++ -E -std=c++98 -$ -Wall
    ɮԤ GCC 3.3.2 ǥѥ뤷Ρ
12 :    openSUSE Linux 10.0 / GCC V.4.0.2 (2005/09) / cc1, cc1plus
        C95:    gcc -E -std=iso9899:199409 -pedantic -Wall
        C99:    gcc -E -std=c99 -$ -Wall
        C++:    g++ -E -std=c++98 -$ -Wall
    openSUSE 10.0 ˥Хɥ뤵ƤΡ
13 :   WIN32        / Visual C++ 2005       / cl
        C95:    cl -Za -E -Wall -Tc
        C99:    cl -E -Wall -Tc
        C++:    cl -E -Wall -Tp
    -E ץǤϥȤ <backslash><newline> 
    ΤǡѥˤƥȤʻ (2005/09)
14 :    WIN32       / LCC-Win32 V.3.8       / lcc
        C95:    lcc -A -E
                lcc -A
        C99:    lcc -A -E
        C++:    lcc -A -E
    LCC-Win32 V.3.8 (2006/03)
15 :    FreeBSD, Linux, CygWIN   / GCC 2.95-4.
   :    WIN32  / Visual C 2003-2005, BCC, LCC-Win32     / mcpp (V.2.6)
        C95:    mcpp -23 (-S1 -V199409L) -W31
                gcc -ansi -Wp,-2,-W31
        C99:    mcpp -23 (-S1) -V199901L -W31
        C++:    mcpp -23+ -V199711L -W31
    MCPP V.2.6 (2006/06)

    [5.2]       ɽ

                D   M   B   G   G   u   V   L   W   M   G   G   V   L   M
                E   C   C   C   C   c   C   C   a   C   C   C   C   C   C
                C   P   C   C   C   p   2   C   v   P   C   C   2   C   P
                U   P   5   2   3   p   0   W   e   P   3   4   0   W   P
                S   2   5   9   2   1   0   i   1   2   4   0   0   i   2
                C   0   C   5       3   3   n   0   4   3   2   5   n   6
                P       P   3               3   0                   3    
                P       P                   2                       8    

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

[K&R: Processing of sources conforming to K&R and C90] (31 items)
n.2.1     4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.2.2     2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.2.3     2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.6.1    10    10  10  10  10  10  10  10  10   4  10  10  10  10  10  10
n.7.2     4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.10.2    6     0   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.12.3    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.12.4    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.12.5    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.12.7    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.13.1    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.13.2    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.13.3    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.13.4    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.13.7    6     6   6   4   6   6   6   4   6   0   6   6   6   4   4   6
n.13.8    2     0   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.13.9    2     2   2   2   2   2   2   0   2   0   2   2   2   0   2   2
n.13.10   2     2   2   2   2   2   2   0   0   2   2   2   2   2   0   2
n.13.11   2     0   2   2   2   2   2   0   0   0   2   2   2   2   0   2
n.13.12   2     0   2   2   2   2   2   2   0   0   2   2   2   2   0   2
n.15.1    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.15.2    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.18.1   30    30  30  30  30  30  30  30  30  30  30  30  30  30  30  30
n.18.2   20    20  20  20  20  20  20  20  20  20  20  20  20  20  20  20
n.18.3   10    10  10  10  10  10  10  10  10  10  10  10  10  10  10  10
n.27.1    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.27.2    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.29.1   10    10  10  10  10  10  10  10  10  10  10  10  10  10  10  10
n.32.1    2     2   2   2   2   2   2   2   2   0   2   2   2   2   2   2
i.32.3    2     2   2   2   2   2   2   2   2   0   2   2   2   2   2   2
i.35.1    2     2   2   2   2   2   2   0   0   0   2   2   2   0   0   2
stotal  166   150 166 164 166 166 166 156 158 140 166 166 166 160 156 166

[C90: Processing of strictly conforming sources] (76 items)
n.1.1     6     0   6   6   6   6   6   6   6   0   6   6   6   6   6   6
n.1.2     2     0   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.1.3     2     0   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.2.4     2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.2.5     2     0   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.3.1     6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.3.3     4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.3.4     2     0   2   0   2   2   0   2   2   2   2   2   2   2   2   2
n.4.1     6     0   6   0   6   6   6   6   0   0   6   6   6   6   0   6
n.4.2     2     0   2   0   2   2   2   2   0   0   2   2   2   2   0   2
n.5.1     6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.6.2     6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.6.3     2     0   2   0   2   2   2   2   2   2   2   2   2   2   2   2
n.7.1     6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.7.3     4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.8.1     8     0   8   8   8   8   8   8   8   8   8   8   8   8   8   8
n.8.2     2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.9.1    10    10  10  10  10  10  10  10  10  10  10  10  10  10  10  10
n.10.1   10    10  10  10  10  10  10  10  10  10  10  10  10  10  10  10
n.11.1    8     8   8   8   8   8   8   8   8   8   8   8   8   8   8   8
n.11.2    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.12.1    6     0   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.12.2    4     0   4   4   4   4   4   4   4   0   4   4   4   4   4   4
n.12.6    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.13.5    2     2   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.13.6    6     0   6   6   6   6   4   6   4   0   6   6   6   4   4   6
n.13.13   4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.13.14   2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.19.1    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.19.2    4     2   4   4   4   4   4   4   4   2   4   4   4   4   4   4
n.20.1    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.21.1    4     0   4   0   4   4   4   0   4   4   4   4   4   0   4   4
n.21.2    2     0   2   0   2   2   2   0   2   2   2   2   2   0   2   2
n.22.1    4     0   4   0   4   4   4   4   4   0   4   4   4   4   4   4
n.22.2    2     0   2   0   2   2   2   2   2   0   2   2   2   2   2   2
n.22.3    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.23.1    6     2   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.23.2    2     2   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.24.1    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.24.2    4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.24.3    6     0   6   0   6   6   6   6   6   6   6   6   6   6   6   6
n.24.4    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.24.5    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.25.1    4     2   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.25.2    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.25.3    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.25.4    6     0   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.25.5    4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.26.1    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.2    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.3    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.4    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.26.5    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.27.3    2     0   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.27.4    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.27.5    2     2   2   2   2   2   2   0   2   0   2   2   2   0   2   2
n.27.6    2     0   0   2   2   2   2   2   2   2   2   2   2   2   2   2
n.28.1    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.2    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.3    4     0   4   4   4   4   2   4   4   4   4   4   4   4   4   4
n.28.4    4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.5    4     0   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.28.6    4     0   4   0   4   4   2   0   0   4   4   4   4   0   0   4
n.28.7    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.29.2    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.30.1    6     6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
n.32.2    2     2   2   2   2   2   2   2   2   0   2   2   2   2   2   2
n.37.1    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.2    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.3    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.37.4    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.5    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
n.37.6    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.7    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.8    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
n.37.9    4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
stotal  286   160 284 252 286 286 278 274 272 240 286 286 286 272 272 286

[C90: Processing of implementation defined portions] (1 item)
i.32.4    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
stotal    2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2

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

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

[C90: Degree of Standard C conformance] (171 items)
mttl90  598   390 596 530 570 585 550 550 534 478 598 581 583 559 530 598

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

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

[C90: Qualities / 1 : handling of multibyte character] (1 item)
m.36.2    7     0   2   2   0   0   0   4   0   0   7   5   7   2   0   7
stotal    7     0   2   2   0   0   0   4   0   0   7   5   7   2   0   7

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

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

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

[C90: Qualities / 5 : Other features] (17 items)
q.1.1     9     0   9   6   9   9   8   7   4   9   9   9   9   7   5   9
q.1.2    10     6  10   4   8  10   4   4   4   4  10  10  10   4   4  10
q.1.3     4     4   4   2   4   4   4   4   4   4   4   4   4   4   4   4
q.1.4    20    10  20  10  20  20  20  10  20  10  20  20  20  10  20  20
q.2.1     4     2   4   2   4   4   4   4   2   4   4   4   4   4   2   4
q.2.2     4     4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
q.2.3     2     2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
q.2.4     2     2   2   0   2   2   0   0   0   0   2   2   2   0   0   2
q.2.5     2     0   2   0   0   0   0   0   0   0   2   0   0   0   0   2
q.2.6     4     0   4   2   4   4   2   4   2   0   4   4   4   4   2   4
q.2.7    10     4   6   4   8   8   4   4   4   2   8   8   8   4   4   8
q.2.8    10     0   6   2   2   2   0   6   4   4   8   2   2   6   4   8
q.2.9     6     2   2   0   2   2   0   0   0   4   2   2   2   0   0   2
q.3.1    20    10   8   8  14  12   8  10  10   6   8  12  12   8  10   8
q.3.2    20    20  20  18  16  16  18  16  18  14  18  14  14  14  18  18
q.3.3    20    10  14   0  10  12   8   0  10   8  16  12  12   0  10  16
q.4.1    10     2   6   6   4   6   2   4   6   4   6   6   6   4   6   6
stotal  157    78 123  70 113 117  88  79  94  79 127 115 115  75  95 127

[C90: Qualities] (61 items)
mttl90  226    93 181  89 135 148 110 100 112  98 196 157 152  93 115 196

[C99: Qualities of new features] (3 items)
u.line    2     0   2   0   1   1   0   0   0   0   2   1   1   0   0   2
u.concat  1     0   1   0   0   1   0   0   0   0   1   1   1   0   0   1
w.tlimit  8     0   8   0   0   0   3   2   0   0   8   0   0   2   0   8
mttl99   11     0  11   0   1   2   3   2   0   0  11   2   2   2   0  11

[C++: Qualities of features not in C90] (1 item)
u.cplus   1     0   1   1   0   0   0   1   0   1   1   0   0   1   0   1
mttl++    1     0   1   1   0   0   0   1   0   1   1   0   0   1   0   1

[Overall] (265 items)
gtotal  960   483 857 646 768 841 760 711 670 648 926 847 844 737 673 926

                D   M   B   G   G   u   V   L   W   M   G   G   V   L   M
                E   C   C   C   C   c   C   C   a   C   C   C   C   C   C
                C   P   C   C   C   p   2   C   v   P   C   C   2   C   P
                U   P   5   2   3   p   0   W   e   P   3   4   0   W   P
                S   2   5   9   2   1   0   i   1   2   4   0   0   i   2
                C   0   C   5       3   3   n   0   4   3   2   5   n   6
                P       P   3               3   0                   3    
                P       P                   2                       8    

        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 Υ١ˤΤϤΥǤ

3   :   WIN32       / Borland C++ V.5.5J        / cpp32
  C90 εʽ٤Ū⤯ä shift-JIS ˤޤȤб
ƤޤɥȤäƤޤe_* ǤϿǥåϤ
ƤФޤ֤˹碌ŪʤΤ¿ɤޤ
  ֵʳʼפϼǡȤĥǽ⤢ޤUndefined 
ʬФƤϿǥåϤޤФ˽ޤʤб
դȤʤäƤޤä褦Ǥ
  ®٤ Turbo C Ȱäơ®ۤǤϤʤʤޤǤˣѥ
ѥΥåȤϤʤʤäƥǥåȤĤäƤȻפޤ
ĤޤǤή³Ƥ椯ΤǤ礦

4   :   Linux, CygWIN   / GCC V.2.95.3          / cpp0
  C90, C95 εʽ٤Ϥʤ⤯ǥåŪΤǤưϤ
ܰꤷƤꡢĤƹ®Ǥ˭٤뤯餤˭٤ʥץ
ħǤMCPP Ǥ⡢ΥץΤĤޤͤƤޤ
  ĤƤϤĤˤХ⤢ޤV.2.95 ǤϥХϤۤȤɤ
ʤޤ
  ĤϡC99, C++98 οͤ¿̤Ǥ뤳ȡǥå
ޤޤ­ʤȡɥȤʤ­Ƥ뤳ȡ#pragma
Ȥʤʰȿγĥǽ¿ȡpre-Standard  obsolete ʻ
¿Ƥ뤳ȡmulti-byte character encoding ؤбȾü
ѥ٥ãƤʤȡǤ
  cpp.info ȤɥȤ GCC / cpp  Standard C ץץ
ΤβȤͥ줿ΤǤʬΥɥȤ
CygWIN, FreeBSD, Linux Τɤˤ¸ߤʤΤϻǰǤְܿפȤ
ΤϥץǤϤʤϤǤ
  ϤĤϤ餱ɤߤˤĥץȤΩƤŤޥ
ץåι¤äƤޤ GCC ϤΤͥ
뤿ᡢ¿Υƥ˰ܿƤޤ

5   :   Linux       / GCC V.3.2                 / cpp0
  GCC V.3 Ǥϥץץ V.2 饽쿷ޤƱ˥ɥ
Ȥ쿷ޤToken-based ʸ§Ű줵졢pre-Standard 
ͤϤޤƤʤ⥦˥󥰤Ф褦ˤʤꡢundocumented ʻ
ͤƤޤΤȤƤϻδԤ˲ɤƤޤ
ץ๽¤쿷줿Ȥǡβɤ⤷䤹ʤäΤȻפ
ޤ
  ǥåɥȡC99 бmulti-byte character ؤб
ϤޤԽʬǤ®٤Ϥ٤ʤޤǤޤ®ۤǤ
  إåե뤬ʣ include directory Υ
ʣˤʤäƤƤΤϡäǤޤŤץ󤬻Ȥ
ʤʤäƤ¿οץƤꡢʤʤ
ؿʤߤޤV.3 ǤϥץץѥΤ˰βޤ
ץץʬȥѥʬȤŪ interface ʤʣ
ʤΤˤʤäƤΤ⡢ǰʤȤǤ

6   :   Linux       /                           / ucpp (V.1.3)
  C99 бƤ뤳ȡץ󥽡 portable Ǥ뤳ȤħǤ
ʽ٤Ϥʤ⤯ʤäƤޤUCN  UTF-8 бƤ뤳Ȥˤ
äƤޤϤԽʬǤǥåϤȤƤ
ޤɥȤ⤫ʤ­Ƥޤ

7   :   WIN32       / Visual C++ 2003           / cl
13  :   WIN32       / Visual C++ 2005           / cl
  C99 λͤ 2003 ǤϤۤȤɼƤޤǤ2005 ǤϤ
ּʤߤޤ
  C90 λͤˤĤΥХĤäƤޤTranslation
phase κ𤷤Ƥ뤳ȤǤ⺬ŪǤ˸ŤʬŪ
˼ʤС󥢥åפ򷫤֤ƤƤ뤳Ȥޤ
  ǥåϤԥȤΤ줿ΤФиޤ顼
ȽǤƤޤȤ¿Τ⡢ȤˤǤɥ
ϼ٤ƹ٤Ƥ褦Ǥ
  Translation limits 礭Ȥ #pragma Ū¿ȤȤꤨȸ
ޤȤ #pragma setlocale ʤΤǤC90 Ǥ #
pragma ԤޥŸ뤳ȡˤ⤫餺 #pragma sub-directive 
桼֤̾ȤäƤΤǤ
  źդƤ륷ƥإåˤϡ㳰ϤޤΤȤƤϾ
ʤ褦Ǥ

8   :   WIN32       / LCC-Win32 V.3.2           / lcc
14  :   WIN32       / LCC-Win32 V.3.8           / lcc
  ץץʬ Dennis Ritchie  Plan9 ѤΥ Jacob Navia
äΤǤǥХå­Ƥꡢ#if ɾʤɤˤʤ
ΥХޤC95 ʹߤλͤˤбƤޤ󡣥ɥȤ­
Ƥޤ
  V.3.2  V.3.8 ȤǤϥץץ˴ؤƤϤۤȤɰ㤤Ϥޤ

9   :   WIN32       /                           / wave (V.1.0.0)
  C++  STL Τ "meta-programming" ˻ȤȤŪ˺
ΤǡΤγĥǽ򤤤ĤäƤޤȾ C++ 
饤֥ǤǤƤơȾإåեΩäƤȤ
ðۤʥץץåǤ"Meta-programming" μǤϺƵŪޥ
¿ѤƤꡢŸǤ MCPP  -@compat ץ GCC ƱͤΡ
ִֺػߥ롼פŬϰϤ򶹤ꤹˡȤäƤޤ[2.4.26]
ȡˡ
  ̤ C/C++ ץץåȤƤȤ뤳ȤտޤƤꡢC++98,
C99 бɸ֤Ƥޤ٤Ϥޤʤ㤤ΤǤV.1.
0.0 ΤȤǡMCPP 2.4 °븡ڥåȤǥƥȤ¿ΥХ
ȤΤȤǤ
  ǡMCPP κƵŪޥŸ롼 GCC  testsuite  wave
 testcases Ȥäƽޤwave  testcases ˤ wave
ѤΤΤ¿ޤޤƤꡢޤĤ testcases ˤϵʤβ
ְ㤤ޤ

11  :   Linux       / GCC V.3.4.3               / cc1, cc1plus
12  :   Linux       / GCC V.4.0.2               / cc1, cc1plus
   V.3.2 ȤۤȤѤޤ󡣤ץץȤΩ
ϤʤѤޤV.3.2 Ǥϥåꤷ򼨤Ƥ GCC Ǥ
V.3.3, 3.4 ǤѤä褦ǤñΤΥץץåѻߤ
̤ΥޥV.3.2  obsolete Ȥ줿ͤΰ褵
ʣĤΥѥˤ٤Ƥۼ˿ʤǤΤϡϤƲ
ȸ뤫ɤΤȤǤMulti-byte character  encoding
 UTF-8 øŪʰ֤ͿȤ⡢multi-lingualization ¿ͤʲǽ
򶹤뤳ȤˤʤΤǤϤʤǤ礦
  V.4.0 ϥץץ˴ؤƤ V.3.4 ȤۤȤɰ㤤ޤ

2   :   FreeBSD, WIN32, MS-DOS      /               / MCPP (V.2.0)
10  :   FreeBSD, Linux, CygWIN, WIN32, MS-DOS   /   / MCPP (V.2.4)
15  :   FreeBSD, Linux, CygWIN, WIN32   /           / MCPP (V.2.6)
  䤬ʬǺäƼʬǥƥȤƤΤʤΤǡʽ٤ǹ
ǤΤʥץץåΤϤǤǥå˭٤Ū
ɥȤξܺ٤ǤͭѤʥץ #pragma ̤
äƤޤV.2.3 ʹߤ C99 λͤˤ⤹٤бƤޤ
  ΰܿɤ֤Ǥ礦ܿμӤ¤Ƥ뤳Ȥ
Ǥ󡢤ꤤޤ

    [5.4]       ɾ

  ¿ΥץץåƥȤƤߤȡߤ C90 ʽ
Ϥʤ⤤Τ¿ʤäƤƤ뤳Ȥ狼ޤƽϤ
ޤޤ¿äƤޤʤMCPP ϤۤȤɤιܤ
Τǡ졹ڤޤ

  n_* Υץ˴ؤƤΤƤꡢGCC 2.95 ʹ,
BC (Borland C) 5.5 , LCC-Win32 3.*, ucpp 1.3, Visual C++ 2003,2005 ϼ
ѾϤޤΤʤ٥ãƤޤɤνϤˤճ
Хޤ
  ǤäΤϡn_13_7.t (n_13_7.c)  division by 0 Υ顼ˤʤä
ޤϤ Visual C ޤƤФи뤳ȤǤ&&, || 䣳
黻ҤǤΡɾǤڤפȤäδŪʻͤƤʤΤǤ
Borland C  n_13_7.c Ǥϥ˥󥰤ˤȤɤƤޤe_14_9.c 
 division by 0 ǤƱ˥󥰤ФޤTurbo C Ǥ
0 Ǥɾ򥹥åפʬǤɤƱ顼ȤʤäƤޤ
Borland C Ϥοǥå򥦥˥󥰤˳ʲʤΤ
νϤΡִ֤˹碌ǥåפΰǤ
  C90 λͤǤϡ# 黻Ҥˤʸ󲽤μδְäƤΤˤ
ޤ
  Amendment 1, Corrigendum 1 ɲä줿ͤϡټƤ
 GCC 2.95 ʹ, ucpp, Visual C 2003,2005 Ǥ
  C99 λͤϡGCC 3.2 ʹ, ucpp ܼۤƤޤ// 
¿νϤƤޤΤۤ GCC  long long 
translation limits ˤʤ;͵ꡢޥΥŬڤ˽
ޤѰޥ GCC ȼλͤΤΤäƤޤ2.95 Ǥ
C99 λͤΤΤޤ3.2 Ǥ _Pragma() ޤ
UCN  ucpp, Visual C 2005 ƤޤGCC 3.2 ʹߤʸ
ƥ뤪ʸ UCN ƤޤWave  C99 λ
ȾʬƤޤ
  C++98 λͤ GCC 3.2 ʹ, wave, Visual C 2005 ܼۤƤޤ
  C++98  extended-character  UCN ѴȤʻͤ
ƤΤϡޤޤ

  i_* νʬνǤϡ#if  wide character 򰷤ʤ
¿褦Ǥwide character ˸¤餺 #if ʸȤ
ȤϡʤˤϤΤΤۤȤɰ̣ΤʤȤʤΤǡȤʤȤ
ƺ뤳ȤϤʤǤ礦̵̣ʤΤϵʤλͤ٤
Ǥ
  Multi-byte character ˤĤƤϡVisual C ¿ι encoding Խ
ʬʤбƤޤ¾νϤϼǤGCC 2.9, 3.2 ϼ
Ⱦüǡѥ٥ãƤޤGCC 3.4,4.0 ǤϤ٤Ƥ encoding
 UTF-8 ѴƤ褦ˤʤꡢˤä¿ encoding
бǤ褦ˤʤޤϤޤѥ٥ǤϤޤ
  Shift-JIS  BIG-5 ȤƥǤϡƥ tokenization  # 
Ҥˤʸ󲽤դɬפǤVisual C ϤˤޤбƤ
Borland C 5.5J  shif-JIS ˤбƤޤ

  e_* ФǥåǤϡGCC 2.95 ʹߤǤͥƤޤ
Visual C, ucpp ǤϿǥåŪФΤΡȤƤ
ȤƤꤷޤ#if  overflow ФǥåνФ
ΤϾʤBC, ucpp, GCC ٿǤǤ

  ʬΥɥȤǤϡGCC 3.2 ʹߤޤޤΥ٥ǡ¾
Ϥɤ⤪Ǥ

  u_* ФǥåǤϡGCC 3.2 ʹߤޤޤǤ¾Ϥ
ǤUndefined Ϥϲ⤷ʤɤȤΤǤϤʤȻפ
ޤ

  s_*, w_* ˤĤƤϤɤνϤۤȤн褷Ƥޤ󡣥ȤΥ
ȤФ륦˥󥰤ФΤʤΤϡճǤ

  ֤¾γƼʼפǤϡGCC ˭٤ʥץ󡢿ǥå
ŪΤ®ܿȤȴФƤޤ

  礹ȡGCCȤ V.3.2 ΤΤʽ٤ι⤵Ȥ
ޤ礭ʷΤʤǡǤͥƤޤ
  MCPP ®٤ΤΡ¾ΤۤȤɤ̤Ǥ
Ƥ뤳ȤϸޤǤ⤢ޤ

  ơ̤ΥƥȤäƤޤƻפΤϡƥ
ץȤΤ˽פȤȤǤMCPP ϤΥץκ
¹ԤƥǥХåʤƤΤǤʬʥץ뤬ʤХ
¸ߤˤʤʤդޤ󤫤顢ǥХåɤǤϤޤ
  ʤˤ⤳Ūʥƥѥץ뤬źդ褦ˤʤȡƽ
ϤʼŪ˸夹뤳ȤǤ礦ޤդˡŪʥƥѥ
ץ뤳Ȥϡʤ⤭Ħˤ뤳Ȥˤʤޤƥ
ץϵʤΥ饹ȥ졼ʤΤǤ

    [5.5]       ƥȤո

   Validation Suite ˤĤƤΤո䡢ȤäƼϤΥץ
ץΥƥԤƤޤ

    http://mcpp.sourceforge.net/

 "Open Discusssion Forum" ޤϥ᡼Ǥꤤޤ
  ץץåξܺ٥ƥȤԤäϡ[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" ΤȤϽ
οꤷޤ
  GCC ξϡڥåȤ testsuite Ǥˤ뼫ưƥȤǤޤ
С GCC Υƥȷ̤꤯ե (gcc.sum,
gcc.log) äƤȡǥåΥСˤ㤤򸡾
åȤ testsuite Ǥ˺Τ뤳ȤǤޤ

  ޤValidation Suite  MCPP γȯ SourceForge ξ嵭 mcpp
project ǿʤƤޤȯ˻äƤߤ褦Ȥϡҥ᡼


                                                                   [eof]
