                     M C P P - M A N U A L . T X T
                         == How to use MCPP ==
                    桡    kmatsui@t3.rim.or.jp

V.2.0   1998/08     First released.
                                                                kmatsui
V.2.1   1998/09     Updated according to C99 1998/08 draft.
                                                                kmatsui
V.2.2   1998/11     Updated according to C++98 Standard.
                                                                kmatsui
V.2.3 prerelease 1      2002/08     Updated according to C99 Standard.
                Added porting to Linux / GNU C, CygWIN and LCC-Win32.
                GNU C-compatible features augmented. 
                                                                kmatsui
V.2.3 prerelease 2      2002/12     Added porting to GNU C V.3.2.
                Revised some wording.
                                                                kmatsui
V.2.3 release   2003/02     Finally released.
                                                                kmatsui
V.2.3 patch 1   2003/03     Slightly modified.
                                                                kmatsui
V.2.4 prerelease    2003/11     Added porting to Visual C++.
                Added #pragma __preprocess, #pragma __preprocessed
                                                                kmatsui
V.2.4 release   2004/02     Extended multi-byte character handling.
                Added porting to Plan 9 / pcc.
                                                                kmatsui
V.2.4.1         2004/03     Revised recursive macro expansion, and added
                    -c option.
                                                                kmatsui
V.2.5           2005/03     Absorbed POST_STANDARD into STANDARD as an
                    execution time option, absorbed OLD_PREPROCESSOR
                    setting as an execution option of PRE_STANDARD.
                Renamed most of #pragma __* directives as #pragma MCPP *.
                Added porting to GNU C V.3.3 and 3.4, changed some options
                    accordingly..
                Removed documents on older compiler-systems (DJGPP,
                    compiler-systems on MS-DOS except Borland C 4.0).
                                                                kmatsui


                              ܼ


    [1.1]       ϣӤϤФʤ portable ʥ
    [1.2]       Τ Standard C ⡼ɤ˲äƤ¾γƼ⡼ɤ
ưΥץȴĶ
    [2.1]       ץ MCPP ˤɤϤ뤫
    [2.2]       ưΥץλˡ
    [2.3]       ̤Υץ
    [2.4]       MCPP Υ⡼ɤˤ륪ץ
    [2.5]       νϰʳνϤ˶̤Υץ
    [2.6]       ϤȤΥץ
    [2.7]       Ķѿ
    [2.8]       Multi-byte character  encoding
    [2.9]       ѥѥ MCPP Ȥˤ
    [2.10]      糫ȯĶ MCPP Ȥˤ
ĥǽȸߴ
    [3.1]       #pragma MCPP put_defines,
                    #pragma MCPP preprocess, #pragma MCPP preprocessed,
                    #put_defines, #preprocess, #preprocessed
        [3.1.1]     إåե pre-preprocess
    [3.2]       #pragma once
        [3.2.1]     إåե #pragma once 񤭹ġ
    [3.3]       #pragma MCPP include_next, #pragma MCPP warning,
                    #include_next, #warning
    [3.4]       #pragma MCPP push_macro, #pragma MCPP pop_macro,
                    #pragma push_macro, #pragma pop_macro,
                    #pragma __setlocale, #pragma setlocale
    [3.5]       #pragma MCPP debug, #pragma MCPP end_debug,
                    #debug, #end_debug
    [3.6]       #assert, #asm, #endasm
    [3.7]       C99 οǽ_Pragma() 黻ҡѰޥ
    [3.8]       Borland C  asm ʸ¾üʹʸ
    [3.9]       GNU C / cpp Ȥθߴ
        [3.9.1]     FreeBSD 2 / kernel Υץץ
        [3.9.2]     FreeBSD 2 / libc Υץץ
        [3.9.3]     GNU C 2 / cpp λͤ
        [3.9.4]     Linux / glibc 2.1 Υץץ
        [3.9.5]     GNU C 2  MCPP Ȥˤ
        [3.9.6]     GNU C 3.2 Υץץ
        [3.9.7]     GNU C 3  MCPP Ȥˤ
    [3.10]      Visual C++ .net Υƥإå
        [3.10.1]    Ȥޥ ?
λ
    [4.1]       λ status 
    [4.2]       Include directory Υѥ
    [4.3]       Header name ιˡ
    [4.4]       #if ɾ
    [4.5]       #if Ǥʸɾ
    [4.6]       #if sizeof (type)
    [4.7]       White-space sequence ΰ
    [4.8]       MCPP ¹ԥץΥǥեȤλ
ǥå
    [5.1]       ǥåη
    [5.2]       Translation limits
    [5.3]       Fatal error
        [5.3.1]     MCPP ȤΥХ
        [5.3.2]     ʪŪ顼
        [5.3.3]     Translation limits ХåեΥ顼
        [5.3.4]     #pragma MCPP preprocessed ˴ؤ륨顼
    [5.4]       Error
        [5.4.1]     ʸȥȡ˴ؤ륨顼
        [5.4.2]     뤷ʤեΥ顼
        [5.4.3]     Preprocessing group бطΥ顼
        [5.4.4]     ǥ쥯ƥֹԤñʹʸ顼
        [5.4.5]     #if ιʸ顼
        [5.4.6]     #if ɾ˴ؤ륨顼
        [5.4.7]     #define Υ顼
        [5.4.8]     #undef Υ顼
        [5.4.9]     ޥŸΥ顼
        [5.4.10]    #error, #assert
        [5.4.11]    #include μ
        [5.4.12]    ¾Υ顼
    [5.5]       Warning (class 1)
        [5.5.1]     ʸȡ󤪤ӥȤ˴ؤ륦˥
        [5.5.2]     뤷ʤեΥ˥
        [5.5.3]     ǥ쥯ƥֹԤ˴ؤƼΥ˥
        [5.5.4]     #if ˴ؤ륦˥
        [5.5.5]     ޥŸ˴ؤ륦˥
        [5.5.6]     ֹ˴ؤ륦˥
        [5.5.7]     #pragma MCPP warning, #warning
    [5.6]       Warning (class 2)
    [5.7]       Warning (class 4)
    [5.8]       Warning (class 8)
    [5.9]       Warning (class 16)
    [5.10]      ǥå
Х
    [6.1]       Хɤ
    [6.2]       malloc() ϢΥХå
    [6.3]       Х
    [6.4]       Τո



ס

   MCPP version 2.*  Martin Minow  DECUS cpp 򸵤 kmatsui ʾ
 ˤŪ˽ľåץץåǤMCPP Ȥ̾
Matsui cpp Ȥ̣Ǥϥ󶡤ΤǡƽϤǻȤ
ˤϤνϤ˹碌ƥ˼㴳ѹäǥѥ뤷
MCPP μ¹ԥץɬפޤ*
  Υޥ˥奢ǤϡǤνϤ˰ܿ줿¹ԥץλ
Ƥޤʰܿˡ˴ؤ뵭ܤ˴ޤǤˡ˾ܺ٤
Τꤿ鲿餫νϤ˰ܿƤߤϡ mcpp-
porting.txt ȤɥȤ򻲾ȤƤ
  ΥɥȤϤ٤ free software Ȥ󶡤ޤ
  ޥ˥奢Ƥˡޤ MCPP ΥħҲ𤷤Ƥޤ
ʤ [1.1] - [1.2]  mcpp-porting.txt ȽʣƤˡ

  * MCPP μ¹ԥץϳƽϤΥץץåִƻȤΤ
    롣äơ¹ԥץ̾ϤνϤΥץץå
    ̾ˤʤ롣¿νϤǤϤ cpp Ǥ롣

    [1.1]       ϣӤϤФʤ portable ʥ

  GNU/Linux, DOS/Windows ¿ΣϣӤ򥵥ݡȤƤ portable ʥ
ץåǤꡢΥ Standard C (ANSI/ISO/JIS C) νϤ
ΤȡC++ νϤǤ⡢K&R 1st. νϤǤ⽽ʬѥ
빭 portability äƤ롣
  饤֥ؿϸŵŪʤΤȤäƤʤΥ饤֥ؿˤ
äˤ륽źդƤ롣Standard C νϤʤᡢ뤤Ͻ
Ϥ Standard C ˽򤷤Ƥʤʬ뤿 Standard C Υץץ
åѥǤʤʤɤȤäϵʤ
  ƽϤ˰ܿ뤿ˤϡ¿ξ硢إåեΤĤΥ
ؤƥѥ뤹ǤࡣǰξǤ⡢system.c
Ȥե˿Խ­٤Ǥ롣
  MCPP Υ֥Ȥϥ󤷤ʤưΤǡɥ쥹֤
 16 ӥåȥƥǤ¤Ϥ뤬˻Ȥ롣
  Multi-byte characterʴˤνܤ EUC-JP, shift-JIS
GB-2312Ѥ Big-5ڹ KSC-5601 (KSX 1001) бƤ롣32 
åȰʾΥƥǤ ISO-2022-JP, UTF-8 Ȥ롣Shift-JIS  Big-5
ξ硢ѥΤǧʤϤǤϡMCPP 䤦

    [1.2]       Τ Standard C ⡼ɤ˲äƤ¾γƼ⡼ɤ

  MCPP Ȥ򥳥ѥ뤹˥إåե system.H Υޥѹ
뤳ȤǡƼưͤΥץץåǤ롣
   Standard C Υ⡼ɤ⤢뤬K&R 1st. Υ⡼ɤμ¹ԥץ
뤳ȤǤ롣Standard C ⡼ɤμ¹ԥץ C++ Υץ
ץåȤư¹Իץˤϼ post-
Standard ͤΥץޤǤ롣K&R ⡼ɤΤΤǤ "Reiser" model
cpp ưץ⤢롣
  Standard C ⡼ɤϴ¸¿ΥץץåȰäơʤ˼
ƤĤǤ롣ISO/IEC 9899:1990 Ӥ Corrigendum 1:1994,
Amendment 1:1995 бƤ롣C99 (ISO/IEC 9899:1999) ˤбƤ
롣Standard C ץץ reference model ȤʤΤܻؤƺä
롣εʤΥСϼ¹Իץǻꤹ뤳ȤǤ롣
  ѥΤ Standard C бƤʤƤ⡢ץץåб
ǤΤϤ٤ƼƤ롣ܤʸƥϢ򤷤ʤ
ѥΤΤˡMCPP ˤ褦ˤ뤳ȤǤ롣
  ۤˤĤͭѤʳĥǽäƤ롣ޥŸ #if 
ɾȥ졼 #pragma MCPP debug ⤢롣إåե
"pre-preprocess" ƤȤǤ롣
  ĤͭѤʼ¹ԻץƤ롣˥󥰤Υ٥
ꤹ륪ץ䡢include directory ꤹ륪ץǤ롣
  ˤɤʴְ㤤äƤ MCPP ˽긫ʥå
ФꤻΤǤ狼䤹ǥåФŬڤʽ򤹤롣
ܿȤʤˤĤƤٹȯ롣
  ܺ٤ʥɥȤ°Ƥ롣

  MCPP η򶯤Ƶ󤲤С®٤٤ȤǤGNU C / cpp 
٤ȣܤ飳ܤλ֤ޤBorland C 5.5 / cpp Ʊ
餤®٤ǡإåե pre-preprocess εǽȤȤ⤦®
ʤΤǡä٤ۤǤϤޤΤǤ뤳ȡportable ʥ
Ǥ뤳ȡʤǤư뤳Τˤϡ٤ν
֤Ϥ򤨤ʤȹͤƤޤ

  ʤץץå Standard C ٤ƥȤ뤿θڥåȤ
 "Validation Suite for Standard C Preprocessing"β⤪Ӥ
ȤäƥƥȤƼץץåκ cpp-test.txt  MCPP ȤȤ
˸Ƥޤ򸫤ȡStandard C פȾΤ¸Υץ
åˤ¿꤬뤫狼ޤ*1

  MCPP  V.2.3 γȯǡڥå V.1.3 ȤȤˡ
ȶ (IPA) ʿǯ١̤Ƨեȥ¤ȡפ˿ ͵ץ
ȥޥ͡ˤäƺ򤵤졢2002/07 - 2003/02 δ֤ IPA λ
ȿУͤνΤȤ˳ȯʤޤѸǥɥȤ⤳
ΥץȤǡͭ²ҡϥ˻䤬
ȥƥäƤǤäΤǤ*2
  MCPP Ϥʿǯ٤ˤ̤Ƨեȥ¤ȡפ˰ 
PM ˤäƷ³ƺ򤵤졢V.2.4 ؤ update Ȥʤޤ
  θ MCPP ȸڥåȤϤ˲ɤκȤ³Ƥޤ

  øεʤȤƤ 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 ȸƤ֤Ȥޤ

  *1  cpp  V.2.2 ޤǤñ cpp ȸƤǤ̤ cpp ʶ
    路ΤǡV.2.3  MCPP ȸƤ֤ȤˤΥɥȤǤ
    V.2.2 ޤǤΥС MCPP ȸƤ֡ޤΥɥȤ̾
    V.2.2 ޤǤ cpp.man ȤƤV.2.3  manual.txt ѹ
     V.2.5  mcpp-manual.txt ѹ伫Ȥ̾⡢V.2.
    2 ޤǤ Psycho ȤƤV.2.3  kmatsui ѹ
  *2 ̤Ƨեȥ¤ȡ(Exploratory Software Project) γפ
    ΤȤΤ뤳ȤǤ롣

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

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

    MCPP ΥӥɥȤȸڥåȤϺǿǤޤơ
    CVS repository ֤Ƥ롣 tar-ball  download Ǥ롣

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

    ΤȤ anonymous ftp Ǥ롣

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

    ޤΤȤˤϰ web page 롣

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

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

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

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

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

        @nifty / FC / lib 2

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

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


ưΥץȴĶꡡ

  ʲεܤǤϡ<arg> Ȥˡ arg 桼Ϥ٤Ǥդΰ
Ǥ뤳Ȥ򼨤[arg]  arg άǽʰǤ뤳Ȥ򼨤ޤ
ˤƤ <, >, [, ] ʸΤΤϤƤϤޤ

    [2.1]       ץ MCPP ˤɤϤ뤫

  ץλˡˡMCPP ˥ץϤˡˤĤ
ƿƤޤ
  MCPP ưΥץ MCPP Υ system.c  do_options() 
ꤵޤƽϤ˹碌꤬ɬפʤΤǡŪʷޤϤ
ޤ
  Ǥ˰ܿϤˤĤƤ⡢ν°ΥץץåΥץ
򤽤Τޤޥߥ졼ȤƤ櫓ǤϤޤ󡣻䤫鸫Ƥޤɬ
פʤȻפ륪ץϼƤޤɬפʤñ˼Ǥ
Τǡdo_options() ˼뤳ȡˡƱ̾ΥץǤ⡢
°ΥץץåȤϻͤۤʤ⤢ޤ

  °Υѥɥ饤Ф̾ˡǤ MCPP ϤˡΤ
ץ⤢ޤ
  Gcc Ǥ -Wp ȤޥƥץȤȡɤʥץ
 cpp ϤȤǤޤ㤨С

    cc -Wp,-W31,-Q23

Ȥȡcpp  -W31 -Q23 ȤץϤޤCpp Ϥ
ץ -Wp, ³ , Ƕڤä¤٤ޤ*1, *2
  ¾νϤǤ⡢⤷ѥɥ饤ФΥСμΥ
ƥץɲäۤɤǤ礦㤨С-P<opt> Ȼꤹ
 P Ȥä -<opt>  cpp Ϥ褦ˤƤȡɤʥץ
ǤȤ褦ˤʤΤǤ

  MCPP ȤˤϡϤΥץץå֤٤Ŭ̾
Ƥޤλˡ°ΥץץåäƤޤȤΤ
褦餫̾Υե˥ԡƤƤ
  ʤFreeBSD Ǥ cpp ֤ǥ쥯ȥ /usr/libexec Ǥ/usr/
bin/cc  /usr/libexec/cpp ƤӽФޤȤ⤦ /usr/bin/cpp
ȤΤޤ -traditional ץղä
/usr/libexec/cpp ƤӽФ shell-script ǤŤ Reiser model  cpp
ԤƤġ§ŪʥΤѰդƤΤΤ褦Ǥ
Cpp ñȤǸƤӽФϡñ cpp ȤȤ줬ưƤޤޤ
-traditional ץ򤱤뤿ˤ /usr/libexec/cpp ȥեѥꥹ
ȤǸƤӽФʤФʤޤ󡣤ޤ /usr/libexec/cpp (GNU C / cpp)
Ͼõcpp_gnuc ȤǤ⤷Ƥơ/usr/bin/cpp θƤӽФץ
 /usr/libexec/cpp_gnuc ȽؤƤΤɤǤ礦*3, *4
  Linux, FreeBSD, CygWIN ǤˤĤƤ [3.9.5] ⻲ȤƤ
GNU C 3.x ǤˤĤƤ [3.9.7] 򻲾ȤƤ

  *1 -Wa ϥ֥Ѥ -Wl ϥѤΥޥƥץǤ롣
    UNIX / System V / cc Υޥ˥奢򸫤ȡϤꤳΥץ
    롣GNU C / cc  -W<x> ץϤȤθߴΤΤΤ
    ΤǤ
  *2 GNU C V.3 Ǥ cpp  cc1 (cc1plus) ˵ۼƤޤäΤᡢ
    -Wp ǻꤷץ̾ cc1 (cc1plus) ϤƤޤ
    ץ cc1 ǤϤʤ cpp (cpp0) ˤ뤿ˤϡgcc θƤӽ
     -no-integrated-cpp Ȥץꤹɬפ롣
  *3 GNU C V.2.95.3 Ǥ FreeBSD Ǥ Linux Ǥ cpp Τۤ cpp0 Ȥ
    Τ롣Gcc ƤӽФΤ cpp0 ΤۤǤ롣VineLinux 2.6 Ǥ
    cpp  cpp0 ؤΥ󥯤ȤʤäƤ롣
  *4 VineLinux 2.6 Ǥ cpp Τǥ쥯ȥ /usr/lib/gcc-lib/i386-
    redhat-linux/2.95.3Ǥ롣

    [2.2]       ưΥץλˡ

  񼰤ϼηǤmcpp Ȥ̾ϽϤ MCPP μˤ
Ƥ̤̾ˤʤޤ

    mcpp [-<opts> [-<opts>]] [in_file] [out_file] [-<opts> [-<opts>]]

  out_fileʽϥѥˤά줿ϡ-o ץ󤬻ꤵʤ¤
ɸϤ˽Ϥޤin_fileϥѥˤά줿ɸϤ
Ϥޤǥåϡ-Q ץ󤬻ꤵʤ¤ɸ२顼
Ϥ˽Ϥޤ
  Τɤ줫Υե뤬ץǤʤϡ顼åФ
ƽλޤ

  MCPP Ǥϥץμˤ getopt() ȤäƤޤ
  ɬפȤ륪ץ˰ʤϥ顼Ȥʤޤ-M 
̡ˡ
  ɬפȤ륪ץǤ -I<arg>, -I <arg> ΤɤͭǤ
ʥץʸȰδ֤ space ϤäƤʤƤɤˡ
  Τʤץ -Qi, -Q -i ΤɤͭǤʣĤ '-' θ
ˤĤʤƤ̡ '-' դƤɤ-M ϤĤʤƤϤʤˡ
  ƱΥץʣꤵ줿硢-D, -U, -I, -W ץϤ
줾줬ͭǤ-S, -V, -+ ϣܰʹߤ̵뤵ޤ-2, -3 ϤΤ
Ӥ˻ͤȿžޤ¾ΥץϺǸ˻ꤵ줿ΤͭǤ
  ʸȾʸ϶̤ޤ
  륹å饯 DOS/Windows Ǥ - Ǥꡢ/ ǤϤ

  ʥץꤹ usage ʸɽΤǡmcpp -? Ȥ
뤳ȤǡȤ륪ץΤ뤳ȤǤޤUsage ʸΤۤˤ⤤
ĤΥ顼åФޤƤϤ⼫ΤΤǤ
ǡϾάޤ

    [2.3]       ̤Υץ

  MCPP ư⡼ɤϤˤʤ̤Υץϼ̤Ǥ

-C
    ΥȤϤ롣 UNIX  lint ǥå
    ɬפʤΤǤ롣lint ϻȤʤƤ⡢ǥХåͭѤʥ
    Ǥ롣ȤϥԤƬ˰ܤƽϤ롣
    ȤνϥޥŸǥ쥯ƥ֤ν˹ԤΤ
    ꡢȤϥޥƤӽФˤ뤫⤷ʤǤ롣
-D <macro>[=[<value>]]
-D <macro(a,b)>[=[<value>]]
    ޥ macro 롣ƤޥǤ __STDC__,
    __STDC_VERSION__, __FILE__, __LINE__, __DATE__, __TIME__,
    __cplusplus ʳǤСΥץѹǤC99 
    __STDC_HOSTED__  GNU C V.3 Τ褦 -D ץ
    ⤢Τǡ㳰Ū˵Ĥˡ=<value> ꤵƤ value 
    άƤ 1 bcc, bcc32 ǤϾάˤϣ
    ΥȡΤǡȤϰ㤦Ȥաˡ= ˤ϶
    ƤϤʤ= θ˶򤬤ФΥޥϣĤΥȡ
    롣
    ΥץǤϡĤޥǤ롣
    ΥץϲǤǤ롣
-I <directory>
    Include directory Υѥ̤ directory ꤹʥ
    ѥˤĤƤ [4.2] 򻲾ȡˡdirectory ̾ space ޤޤ
    ϡdirectory ̾Τ "  " ǰϤळȡ
-I 1, -I 2, -I 3
    #include "header" ηΡ<header> ηǤϤʤ˥ǥ쥯ƥ
    Ǻǽ˥ǥ쥯ȥδꤹ롣-I1 Ǥϥȥ
    쥯ȥꡢ-I2 Ǥϥեʥ󥯥롼ɸˤΤǥ쥯
    ꡢ-I3 ǤϤ򥵡ʾܺ٤ [4.2] 򻲾ȡˡ
-j
    ǥåνϤǤϥղþϽϤԤοǥ
    åϤʥǥեȤǤϣԤοǥå³ơ
    ΥԤɽ롣ե뤬 include 줿ΤǤ
    ϡinclude ιԤ缡ɽ롣ޥ˴ؤǥå
    ϡŸΥޥ缡ɽˡ
    GNU C  testsuite ǻθڥåȤȤϡΥץ
    ơGNU C / cpp Ʊǥåˤɬפ롣
-o <file>
    ץץΥ file ˽Ϥ롣άϥѥ
    ȤʤΤǡ̵Ƥ褤ץǤ뤬ѥɥ饤Фˤ
    ƤϤΥץȤΤ롣ְäƥ磻ɥɤŸ
    δɤǤ
-P
    ѥΤ˹ֹϤά롣äΥץץå
    ʳӤήѤ˻ȤץǤ롣
-Q
    ǥåʥȥǥ쥯ȥΡmcpp.err Ȥ̾Υե
    ˽Ϥmcpp.err ϸ˥ڥɤƤ椯Τǡ
    뤳ȡˡ
-U <macro>
    Ƥޥ macro ä__FILE__, __LINE__,
    __DATE__, __TIME__, __STDC__, __STDC_VERSION__, C99 ⡼ɤǤ
    __STDC_HOSTED__  -+ ץǵư __cplusplus ϼ
    äʤˡ
-v
    MCPP ΥС󤪤ӥ󥯥롼ɥǥ쥯ȥΥɸ२
    Ϥ˽Ϥ롣
-W <level>
    Warning Ϥ٥ level ˻ꤹ롣level  0 ޤ 1, 2,
    4, 8, 16 ΤǤդͤ OR ȤäΤǤ롣1, 2, 4, 8, 16 
    줾 warning  class ̣롣㤨 -W 5 Ǥ class 1, 4 
    warning Ϥ롣0 ξ warning ϽϤʤΥץ
    ʣꤵȡ٤Ƥλ OR Ȥ롣㤨 -W 1 -W
    4  -W 5 ƱǤ롣-W 0 ꤵ줿ϡ¾ -W 
    ץϤ٤ƥ󥻥뤵롣Υץꤷʤ -W
    1 ꤷΤƱǤwarning Ƥ [5.5] - [5.9] 򻲾ȡˡ
-z
    #include Ǽޤ줿եΥץץ̤ϽϤʤ
    ޥ롣

    [2.4]       MCPP Υ⡼ɤˤ륪ץ

  MCPP Ȥ򥳥ѥ뤹 system.H ǳƼΥޥꤹ뤳Ȥǡ
ΰۤʤưͤΥץץåǤޤʤƤ mcpp-porting.
txt  [4.1.3] 򻲾ȡˡʲǽФƤ MODE, STDC, TFLAG_INIT,
etc. ʸ̾__ ǻϤޤʤΡˤϤ٤ system.H ޥ
Ǥ[3], [4], [5] ǤƱͤǤΥޥϤޤǤ MCPP 
򥳥ѥ뤹˻ȤǡǤä MCPP ¹ԥץˤ
ΥޥϻĤäƤϤޤ󡣴㤤ʤ褦ˤƤ
  ΥޥǤץץͤκΤ MODE Ȥ
ǡSTANDARD, PRE_STANDARD ΣĤͤΤɤ餫ȤޤΥޥ
奢Ǥ MODE == STANDARD ǥѥ뤵줿 MCPP  mcpp_stdMODE ==
PRE_STANDARD ǥѥ뤵줿Τ mcpp_prestd ȸƤӤޤ
  mcpp_std ϥǥեȤǤϵʽư򤷤ޤ¹Իץ
äƻ䤬 post-Standard mode ȾΤưͤꤹ뤳ȤǤޤ
򤳤Υޥ˥奢Ǥ poststd ⡼ɤȸƤӤޤޤmcpp_prestd 
ǥեȤǤ K&R 1st. ư򤷤ޤ¹ԻץˤäƤ
 "Reiser model cpp" ưͤꤹ뤳ȤǤޤ򤳤Υޥ
奢Ǥ oldprep ⡼ɤȸƤӤޤξ塢mcpp_std ˤ compat ⡼
Ȥüʼ¹Ի⡼ɤ⤢ޤ
  Υޥ˥奢ǤϳƼλͤǰۤʤư¤٤ƵܤƤΤǡ
ˤʤäƤޤޤ󤷤Ƥ

  mcpp_std ǤϼΥץ󤬻Ȥޤ

-+
    C++ ΥץץåȤư롣ޥ __cplusplus 
    ʤͤ system.H Ƥ롣ǥեȤ 1ˡ// 
    ԤιޤǤ򥳥ȤȲᤷ::, .*, ->* 򤽤줾ñΥȡ
    Ȥǧ롣#if Ǥ true, false ȤȡϤ줾 1,
    0 ɾ롣__STDC__, __STDC_VERSION__ ƤС
    ʤGNU C ѤǤ GNU C / cpp ȤθߴΤ
    __STDC__ Ϻʤˡ_ ǻϤޤʤޥ롣
    extended characters  UCN ؤѴϤʤ*1, *2

-2
    Digraphs νȿž롣DIGRAPHS_INIT == FALSE ξϤ
     digraph ǧ褦ˤʤꡢդξǧʤʤ롣
-3
    Trigraph νȿž롣TFLAG_INIT == FALSE ξϤ
     trigraph ǧ褦ˤʤꡢդξǧʤʤ롣

-h <n>
    ޥ __STDC_HOSTED__ ͤ <n> 롣
-S <n>
    C Ǥ __STDC__ ͤ <n> ѹ롣C++ Ǥ̵뤵롣<n>  [0,
    9] ϰϤοͤǤʤФʤʤ<n>  1 ʾǤС_ ǻϤޤ
    ʤޥunix, MSDOS ˤ̵ˤ롣
    S  __STDC__ ΰ̣Ǥ롣Υץꤷʤȡ__STDC__
    ϥǥեȤͤȤʤ̾ 1ˡ
    GNU C ǤǤ -pedantic, -pedantic-errors, -lang-c89 Ǥ -S1 
    ƱȤˤʤΤǡμ -S ̵뤵롣

-@post, -@poststd
    MCPP  "post-Standard mode" ȾΤץץͤư򤹤롣
    ϵʤ˼Τ褦ѹäΤǤ롣

    Trigraphs ǧʤDigraph  translation phase 1 ǡ
    ץץκǽѴƤޤToken ȤƤϰʤ
    Tokenization  token-base θ§ˤäñ㲽Ƥ
    롣 preprocessing token δ֤ token separator ȤƤ
    white space ʤϡ˼ưŪ a space ʤ
    ޥΥޥ̾ȼ '(' δ֤ˤʤˡäơ#
    黻Ҥˤʸ󲽤Ǥ⤹٤Ƥ preprocessing token δ֤ˤ a
    space äʸ󲽤뤳Ȥˤʤ롣ޤޥκ˺
    Ƥϡtoken separator ̵ͭˤʤʤ
    ؿͥޥκ˺ݤƤϡѥ᡼̾ΰ㤤ˤʤ
    #if ʸϻȤʤʥ顼ˤˡ
    ؿͥޥŸ˴ؤִؿ͡פǤʤԵ§ʵ򥫥åȤ
    Ƥ롣ʤƥϤΥޥִꥹȤоݤȤ
    θ sequence ϼޤʤ
    #include <stdio.h> Ȥ header name ̤̾
    ˥󥰤Фclass 2 Υ˥󥰥ץǡˡޥ
    <stdio.h> η header name Ȥȡüʾˤϥ顼Ȥʤ뤳
    Ȥ롣#include "stdio.h" η侩롣
    ޥǤϥޥִ̾ꥹȤȤδ֤ space ɬפȤ
    ꤬ C99 ɲä줿εˤϽʤtokenization κݤ˼
    ưŪ a space Τǡˡ
    UCN (universal-character-name) ǧʤޤidentifier 
     multi-byte character ǧʤ
    C++ Ǥϣ identifier  operator  operator ȤƤϰ
    ʤ

    ʤΥ⡼ɤǤ -a (-lang-asm, -x assembler-with-cpp) ץ
    ϻȤʤ

-@compat
    ƵŪޥ򵬳ʤ⤵Ÿ롣ʤƵŪޥŸ
    ˺ݤơƱ̾ޥκִػߤϰϤ򵬳ʤⶹȤ롣
    ƵŪޥŸεˤĤƤ cpp-test.txt [2.4.26] 򻲾ȤΤ
    ȡƵŪޥζ test-t/recurs.t 򻲾ȤΤȡ*3

  mcpp_prestd ǤϼΥץ󤬻Ȥޤ

-@old, -@oldprep
    Τ褦ʻͤθŤ "Reiser model cpp" ư򤹤롣λͤ򤳤
    ޥ˥奢Ǥ oldprep ⡼ɤȸƤ֡old preprocessor ΰաˡ

    Ȥ򣱸Ĥ space ǤʤĤ space Ѵ롣Ѵ
    §ȤƺǸνϻ˹Ԥ롣ޥǤľ˹
    롣
    ޥִꥹʸƥޤʸꡢ
    ˤɤ줫Υѥ᡼̾ȰפʬϡΥޥθ
    ӽФκݤˤʬϡѥ᡼б֤롣
    פʬȤΤϡξü " ޤ ' ϤȤȡ
    Ƹ˰פȡΤȤǤ롣
    #else, #endif ιԤ˲񤤤ƤäƤ⥨顼ˤ̵뤹б
     #if MACRO, #ifdef MACRO  MACRO 񤤤ꤹˡ
    ƥĤ "  ' ʤϡĤƤȤߤ
    unterminated string literal, unterminated character constant 
    顼ȯʤˡ
    # 123 ȤԤ #line 123 ƱΤȤư

  *1 C++  __STDC__ ƤΤϥȥ֥θǤꡢɤͤ
    ϤʤGNU C ΥɥȤˤȡإåե¿
    __STDC__ Ƥ뤳ȤԤƤΤǡC++ Ǥ⤳
    Ƥɬפ롢ȤΤȤǤ롣ϥإåեν
    ȸ虜򤨤ʤC90, C99, C++ ˶̤ʬˤϡ#if
    __STDC__ || __cplusplus Ƚ񤯤٤ʤΤǤ롣
  *2 C++ Standard Ǥ C99 ȰäơUCN 硹ŪʰƤꡢ
    ȾüʼϤǤʤC 1997/11 draft Ǥ⤽Ǥä
    Unicode 򤽤ޤƳ뤳Ȥˤϡô礭뤳
    ꤬äƵǤ롣
  *3  GNU C, Visual C++ μפʽϤȤθߴΤΥץ
    Ǥ롣'compat'  "compatible mode" ̣롣Υޥ˥奢
    Ϥ compat ⡼ɤȸƤ֡

    [2.5]       νϰʳνϤ˶̤Υץ

-a
    Υ֥饽˸뼡Τ褦ʵˡ򥨥顼ˤ̤

    1.
        #APP
    Ȥä # ǻϤޤԤäΥǥ쥯ƥ֤˹פʤ硢ιԤ
    Τޤ޽Ϥ롣
    2.
        "Jugemjugem
        gokouno
        surikire"
    ȤäΤήιԤޤʸƥ
        "Jugemjugem\ngokouno\nsurikire"
    ȤԤϢ뤹롣
    3.  ## 黻Ҥˤ token Ϣǣä pp-token ȤƤ̵ token
    Ƥ⡢顼ˤʤ

     GNU Υʤɤ˻ΤǤGNU ǤǤϤΥ
    ץ -x assembler-with-cpp  -lang-asm Ǥ
    Υץ [2.4] ǽҤ٤ -@post ץȤξΩ
    ޤ

-I-
    ǥեȤ include directory 󥻥뤵졢Ķѿǻꤵ
    줿 directory ¾ -I ץǻꤵ줿 directory 
    ͭȤʤ롣GNU C ˰ܿ줿ΤǤϡΥץ -I-
    ǤϤʤ -nostdinc Ǥ롣GNU C Ǥ -I- ץϤޤää
    ̣ġ[2.6] ȡˡ

-N
    '_' ǻϤޤΤޤƤ٤Ƥλޥ̵ˤ롣
    ʤ׵ᤵƤޥ __MCPP Ͻʤ׵ᤵ
    ƤޥȤϡ__FILE__, __LINE__, __DATE__, __TIME__,
    __STDC__, __STDC_VERSION__, C99  __STDC_HOSTED__  C++ 
    __cplusplus Ǥ롣__MCPP ̰ƤΤϡGNU C / gcc 
    ĤƤϥǥեȤ -undef ץȤäƤΤǡˤä
    줬 undefine ΤɤǤ롣 undefine 
     -U ץȤȡˡ
    Plan 9 / pcc ѤǤϤΥץ -n Ǥ롣

  mcpp_std Ǥ -V ץ󤬻Ȥޤ

-V <value>
    C Ǥ __STDC_VERSION__C++ Ǥ __cplusplus Ȥޥ
    ͤꤵ줿 <value> ѹ롣ξ <value>  long 
    ȤʤISO/IEC 9899:1990 / Amendment 1:1995 ǤϤͤ 199409L
    C99 Ǥ 199901LC++ Standard Ǥ 199711L Ǥˡ__STDC__  0
    Ƥ __STDC_VERSION__ ɬ 0L Ȥʤꡢ-V ̵Ǥ
    롣
    C ǤϡΥץꤷʤȡ__STDC_VERSION__  system.H
     STDC_VERSION ͤȤʤGNU C V.2.7 - V.2.9x Ǥ 199409L
    ʳǤ 0Lˡ
    -V199901L Ȥ __STDC_VERSION__ >= 199901L ˤʤäϼΤ褦
     C99 λͤȤʤ[3.7] ȡˡ

    1.  // ޤǤ򥳥ȤȤư*1
    2.  Preprocessing-number  e+, E+, e-, E- Ʊͤ p+, P+, p-,
    P- Ȥ sequence ǧ롣ưΥӥåȥѥ
    0x1.FFFFFEp+128 Ȥդˡʤɽ뤿ΤΤǤ롣
    3.  _Pragma( "foo bar") Ƚ񤯤 #pragma foo bar Ƚ񤤤ΤƱ
    ̤ _Pragma operator ͭˤʤ롣
    4.  EXPAND_PRAGMA Ȥޥ TRUE ƥѥ뤵줿
    MCPP Ǥϡ#pragma ԤΰϡSTDC ޤ MCPP ǻϤޤΤǤʤ¤
    ޥŸоݤȤʤʥǥեȤǤ Visual C ǰʳǤ
    EXPAND_PRAGMA == FALSE ǤꡢޥŸʤˡ
    5.  long long ĽϤǤ #if ɾ long long, unsigned
    long long ǹԤ
    6.  ̻ҡʸʸƥ롦pp-number ˤ UCN
    (universal-character-name)  sequence ̤

    ʤѰޥ C99 λͤǤ뤬C90  C++ ǤȤ
    褦ˤƤ롣*2
    C++ Ǥ -V199901L Ȥ __cplusplus >= 199901L ˤȡC99 ߴ
    ⡼ɤȤʤꡢ嵭 2,3,4,5 εǽĥԤ1 ̵ͭ6 
    ۤƱ͡ˡ MCPP ȼγĥǤꡢC++ Standard ˤϰȿ롣
    Plan 9 / pcc ǤϤΥץ -s Ǥ롣
    ʤΥޥ __STDC__, __STDC_VERSION__, __cplusplus λ
     -D ץϻȤʤ̤Υ桼ޥȶ̤뤿Ǥ
    롣

  32 ӥåȰʾΥƥǤ -e ץ󤬻Ȥޤ

-e <encoding>
    Multi-byte character  encoding  <encoding> ѹ롣<encoding>
    ˤĤƤ [2.8] 򻲾ȤΤȡ

  OK_MAKE == TRUE ǥѥ뤵줿 MCPP ǤϼΥץ󤬻Ȥޤ

  -M* ץ makefile Ѥΰ¸طԤϤΤǤʣΥ
ե뤬硢٤ƤΥˤĤƤ -M* ץ
Ƽ¹ԤơνϤޡȡmakefile ɬפʰ¸طҹԤ
ޤΥץ GNU C / cpp ΤΤ˹碌Ƥޤ
㤤ޤ*3

-M
    եΰ¸ط򵭽ҤԤϤ롣ϥޥɥ饤
    ǻꤵ줿ϥե롢줬ꤵƤʤɸϤǤ롣
    ԤĹޤꤿࡣ̾Υץץ̤ϽϤʤ
-MM
    -M ȤۤƱǤ뤬ΥإåϽ񤭽Фʤ
    1.  #include <stdio.h> η include Ρ
    2.  #include "/include/stdio.h" ХѥǻꤵƤΡ
    3.  #include "stdio.h" ηǤ뤬ȥǥ쥯ȥʽ
     -I <n> ץˤäƤϥΤǥ쥯ȥˤȯ줺
    ƥ include ǥ쥯ȥȯ줿Ρ-I <directory> 
    ץĶѿǻꤵ줿ǥ쥯ȥޤˡ
-MD [FILE]
    -M ȤۤƱǤ뤬̾Υץץ̤⥳ޥɥ饤ǻ
    줿եޤɸϤ˽Ϥ뤳ȤäƤ롣ޤ¸
    طԤνϡ FILE ꤵ줿ϤΥեȤʤꡢꤵ
    Ƥʤϥե̾ .c  .d ѤեȤʤ롣
-MMD [FILE]
    -MD ȤۤƱǤ뤬-MM Ʊͤ˥ƥإåȤߤʤΤ
    񤭽ФʤȤäƤ롣¸طԤν -MD [FILE] Ʊ
-MF FILE
     FILE ˤ롣-MD FILE, -MMD FILE ͥ褹롣
-MP
    "Phony target" Ϥ롣Phony target ȤΤϡ󥯥롼ɤ
    ե룱ģĤˤĤơ켫Τ¸ʤåȤȤ
    ơΤ褦˵ҤΤǤ롣
        test.o: test.c test.h
        test.h:
-MT TARGET
    åȤ̾̾ foo.o ǤϤʤ TARGET ˤ롣-MT
    '$(objpfx)foo.o' ȤץǤϼΤ褦ʹԤϤ롣
        $(objpfx)foo.o: foo.c
-MQ TARGET
    -MT ƱͤǤ뤬make ˤȤä̤ʰ̣ʸϼΤ褦
    quote 롣
        $$(objpfx)foo.o: foo.c

  *1 //  C90mcpp_std ξˤǤ⥳ȤȤư˥
    Ф
  *2  GNU C / cpp ȤθߴΤǤ롣
  *3 GNU C / cpp Ȱ㤦ΤϼǤ롣
    1.  -MG ץϤʤץλʣ뤫Ǥ
    ʤäơɤͤάˡ-M ץǤ⡢
    󥯥롼ɥե뤬Ĥʤϥ顼ˤϤʤ뤬¸ط
    ϽϤΤǡѤǤ롣
    2.  -MM, -MMD ץǽإåϰϤ嵭 -MM
    ץˤ 2, 3  GNU C 2 / cpp0 ǤϽʤΤ
    롣GNU C 3 / cpp0 ǤϾ嵭 3 Τƥإåǥ쥯
    ȯ줿ΤϽ褦ˤʤä
    ʤ4.4BSD-Lite Ǥ /usr/bin/mkdep Ȥޥɤ롣FreeBSD
     Linux ˼ƤΤ *.d ե .depend Ȥ
    ̾Υե˥ޡ shell-script Ǥ뤬cpp -M Ƥӽ
    Ƥ롣

    [2.6]       ϤȤΥץ

  GNU C ǤϼΥץ󤬻Ȥޤ

-b
    ֹäΥΥǽϤ롣
    ץץå饳ѥΤؤιֹμϤ

    #line 123 "filename"

    ȤäΥƱǤǤϤ̤Ǥ뤬ηϻ
    ʤϤ⤢롣MCPP ϤΤ褦ʽϤ˰ܿ줿ΤǤϡ
    νϤΥѥΤμǹֹϤΤ
    ǥեȤλͤǤ롣ޤGNU C ǤϣåηǤ⥳ѥ
    ΤǤפǤ뤬 cpp Ȥ˺ͿȽǤʤ
     cpp ⤢ꡢޤ rpcgen Τ褦 GNU C ͭηǤʤ
    ̤ʤġ⤢ΤǡǥեȤǤ GNU C ηǽϤ롣
    νϤǤ⡢ΥץȤȡäΥΥ
    ǹֹϤ롣
    ΥץϡϤ⤦٥ץץΤΤΤǡ#
    pragma MCPP put_defines (#put_defines) Ȥ߹碌ƥإåե
    Ρ֥ץץץפ򤹤˻Ȥ

  MS-DOS νϤǤϼΥץ󤬻Ȥޤ

-m <x>
    ǥ x ˻ꤹ롣x  t, s, c, m, l, h Τɤ줫Ǥ
    ʸǤ⾮ʸǤġˡꤹȡMicrosoft C Ǥ
    M_I86mM  m ΤȤ򤳤 x ʸˤΤ֤ޥ
    1 ˻졢¾νϤǤ __TINY__, __SMALL__,
    __COMPACT__, __MEDIUM__, __LARGE__, __HUGE__ Τбޥ
     1 ˻롣OK_SIZE == TRUE  MCPP 򥳥ѥ뤷Ƥ
    ϡ#if sizeof (type) ⤳Υǥλ˽äɾ롣
    ǥեȤǤ M_I86SM ޤ __SMALL__ Τɤ餫 1 ˤʤ롣

  LCC-Win32 ǤϼΥץ󤬻Ȥޤ

-g <n>
    ޥ __LCCDEBUGLEVEL  <n> 롣
-O
    ޥ __LCCOPTIMLEVEL  1 롣

  Visual C ǤϼΥץ󤬻Ȥޤ

-Fl <file>
    GNU C  -include <file> Ʊ
-Tc
    C ΥǤ뤳Ȥؼ롣ꤷʤƤƱ
-Tp
    -+ ץƱ
-u
    -N ץƱ
-Wall
    -W17 (-W1 -W16) Ʊ
-WL
    -j ץƱ
-w
    -W0 ץƱ
-X
    -I- ץƱ

  Plan 9 / pcc ǤϼΥץ󤬻Ȥޤ

-i
    󥯥롼ɥǥ쥯ȥΥɸ२顼Ϥ˽Ϥ롣
-n
    ¾νϤǤ -N Ʊ
-s
    ¾νϤǤ -V Ʊ

  GNU C ˰ܿΤǤϡʲΡʤ [2.6] νޤǤΡ
ץ󤬻ȤޤʤGNU C ѤǤ __STDC__  1 ˤƤΤǡ
-S1 ץϻꤷƤ⤷ʤƤƱǤ

  ޤMCPP Υ⡼ɤˤʤץϼΤȤǤ

-dD, -dM
    ץץκǸˤλͭʥޥ #define Ԥηǽ
    Ϥ롣
    -dM ץǤϥץץ̤ϽϤʤޤ줿
    ޥ⵬ʤɸޥǤʤнϤ롣-dD ץ
    ϥץץ̤Ϥ롣ޤޥϽϤʤ*1,
    *2

-I-
    ΥץȸȤ -I <directory> ץλͤѤ롣
    Υץ -I ǻꤵ줿ǥ쥯ȥ #include
    "header.h" ηΥإåեΥˤȤ롣Υץ
    θ -I ǻꤵ줿ǥ쥯ȥϤ٤Ƥ #include directive 
    ˻Ȥ롣ޤ#include "header.h" ηǤ include Υ
    쥯ȥϥʤ

-include <file>
    ᥤΥեˡ<file>  #include ʥ
    Ƭ #include <file> Ƚ񤤤ΤƱ̤ˤʤˡ

-isystem <dir>
    <dir> 򥤥󥯥롼ɥѥ system-specific  directory ˡsite-
    specific  directory θˡ˲ä롣

-lang-c, -x c
    C ΥץץԤꤷʤƤƱ

-nostdinc
    ¾νϤǤ -I- ץƱ

-undef
    -N ץƱ

-Wcomment, -Wcomments, -Wsign-compare
    -W1 ץƱꤷʤƤƱ
-Wundef
    -W4 ץƱ
-Wtrigraphs
    -W16 ץƱ
-Wall
    -W17 (-W1 -W16) ץƱclass 2, 4  warning  GNU C 
    ɸإåǤȯ䤹뤵Τǡ-Wall ϤƤ롣
    class 8  warning ̾;פʤǤ롣ˤ
    portability ΤͭѤʻȤƻ롣Ȥ gcc -Wp,-W31
    Ȥ뤳ȡˡ
-w
    -W0 ץƱ

-finput-charset=<encoding>
    -e <encoding> ץƱ

  GNU C Ǥ mcpp_std ǤϼΥץ󤬻Ȥޤ

-digraphs
    Digraph ǧ-2 Ǥȿžͭˡ

-lang-c89, -std=c89, -std=gnu89, -std=c90
    -S1 ץƱꤷʤƤƱC90 Ǥʤ C95 λ
    ޤޤ롣
-lang-c99, -lang-c9x, -std=c99, -std=c9x, -std=gnu99, -std=gnu9x
    -V199901L ץƱ
-lang-c++, -x c++, -std=c++98
    C++ ΥץץԤ-+ Ʊ
-lang-asm, -x assembler-with-cpp
    ¾νϤǤ -a Ʊ-@post ץȤȡΥץ
    ϻȤʤ

-pedantic, -pedantic-errors
    -W7 (-W1 -W2 -W4) ץƱ

-std=iso<n>:<ym>
    ʤΥСꤹ롣<n>  C Ǥ 9899 ǤꡢC++ Ǥ
    14882 Ǥ롣<n>  9899 ξϡ<ym>  1990, 199409, 1999,
    199901 Ǥ롣<n>  14882 ξϡ<ym>  199711 Ǥ롣<ym>
    ˤ¾ͤꤵ줿ϡ__STDC_VERSION__ ޤ __cplusplus
    ͤʤξ 200503 Ȥ褦ˣǻꤹ
    ȡˡ

-trigraphs
    Trigraph ǧ-3 Ǥȿžͭˡ
-ansi
    __STRICT_ANSI__ ޥ 1 롣

  GNU C Ǥ mcpp_prestd ǤϼΥץ󤬻Ȥޤ

-traditional
    -@old Ʊ

  ΥץϤ⥨顼ˤϤޤ󤬡бޤʥ
˥󥰤Ф⤢ˡ

-A <predicate(answer)>
    GNU C ǤϤΥץϥ #assert <predicate(answer)> Ƚ
    ΤƱ̤ˤʤ뤬#pragma Ǥʤĥǥ쥯ƥ֤
    Standard C ǤǧʤΤǤ롣ޤޤǤΤȤ gcc ϥ
    եȤǤ -D ץƱΥޥ cpp ϤƤΤǡ
    ºݤˤϤۤȤɤξ硢پϤʤ#assert ȤäƤ뵩ʥ
    ʤ¤ˡ
-$
-g <n>
-idirafter <dir>
-iprefix <dir>, -iwithprefix <dir>, -iwithprefixbefore <dir>
-noprecomp
-remap

  GNU C V.3.3 ʹߤǤϥץץåѥ˵ۼΩץ
ץå¸ߤʤʤäᡢgcc  -no-integrated-cpp ץ
դƸƤӽФƤ⡢ץץåΥץǤϤʤץ󤬥ץ
åϤƤ뤳ȤޤGNU C V.3.3 ʹߤ˰ܿ줿 MCPP
ǤϡΤ褦ʤΤΤ MCPP ǧʤΤϤμΤˤץ
Ȥ̵뤷ޤ

-E
-c
-quiet
-W*
-m*
-f*

  ΤۤƽϸͭΥץ󤬾ޤˤĤƤ
usage ʸ򸫤Ƥ

  *1 GNU C V.3.3 ʹߤǤ̤Υޥ褦ˤʤ
    ϻޥȤƤϰʤʤ-dD ץ
    Ǥ⤳ΥޥϤ롣
  *2 #pragma MCPP put_defines (#put_defines) νϤ -dM ץȤ
    ƱͤǤ롣äƤ롣
    1. put_defines ǤɸޥȤƵꤵƤΤ⡢
    ȤηǽϤ롣
    2. put_defines ǤϤΥޥΤե̾ȹֹ⥳
    ηǽϤ졢ޤɤߤ䤹褦˷ƽϤ뤬-d* ץ
    Ǥ GNU C ƱǽϤ롣ηꤷƤ makefile
    ⸫ݤ뤫Ǥ롣

    [2.7]       Ķѿ

  MCPP ǥǥեȤꤵƤʤ system include ǥ쥯ȥϡ
ѿǻꤷƤɬפޤǥեȤꤵƤ system
include ǥ쥯ȥˤĤƤϡ[4.8] 򸫤Ƥޤinclude ǥ
쥯ȥΥȴĶѿ̾ˤĤƤϡ[4.2] 򸫤Ƥ
  GNU C ǤϥСˤäưۤʤŪ system include ǥ쥯ȥ
ȤޤΤ noconfig.H ޤ config.h ǻꤵƤʤ
ΤСˤĤƤϴĶѿ꤬ɬפǤ

  ʤ MCPP Ǥ GCC_VERSION ȤĶѿ꤬ɬפǤ
MCPP V.2.5 ϤɬפϤʤʤޤ
  Ķѿ LC_ALL, LC_CTYPE, LANG ˤĤƤϡ[2.8] 򸫤Ƥ

    [2.8]       Multi-byte character  encoding

  MCPP  multi-byte character ¿ͤ encoding бƤޤ
16 ӥåȥƥѤ 32 ӥåȰʾΥƥѤȤȤߤäƤ
ꡢ꡼ξʤ 16 ӥåȥƥǤϼǤ encoding ꤵ
Ƥޤ
  16 ӥåȥƥ 32 ӥåȰʾΥƥΤɤǤȤ encoding
ϼ̤Ǥ

    EUC-JP  :   ܤ extended UNIX code (UJIS)
    shift-JIS   :   ܤ MS-Kanji
    GB-2312 :    EUC-like  encoding ʴλ
    Big-Five:   Ѥ encoding λ
    KSC-5601:   ڹ EUC-like  encoding (KSX 1001)

  16 ӥåȥƥǤϤΤΤɤ줫Ĥޤ
  32 ӥåȰʾΥƥǤϼ encoding Ȥޤ

    ISO-2022-JP1    :   ݵʤܸ
    UTF-8   :   unicode  encoding Σ

  32 ӥåȰʾΥƥǤϤ encoding ٤Ƽޤ
ơ¹Ի˼Τ褦ʤĤˡǼºݤ˻Ȥ encoding ꤷޤ
̤ͥϤνΤȤǤ

  1.   #pragma __setlocale( "<encoding>") ǻꤵ줿
    encoding Visual C ѤǤ #pragma setlocale( "<encoding>") ˡ
    ȤȡܤΥեǤʣ encoding ȤȤ
    롣
  2.  ¹Իץ -e <encoding> ޤ -finput-charset=<encoding>
    ǻꤵ줿 encoding
  3.  Ķѿ LC_ALL, LC_CTYPE, LANG ǻꤵ줿 encoding̤ͥ
    νˡ
  4.  MCPP 򥳥ѥ뤹ꤵ줿ǥեȤ encoding

  #pragma __setlocale-e ץ󡢴ĶѿǻǤ <encoding> 
§Ȥƶ̤ǡΤȤǤդ <encoding> Ϻդ encoding 
ꤷޤ<encoding> ʸʸζ̤򤷤ޤ󡣤ޤ'-', '_'
̵뤷ޤ '.' ȡޤǤ򤹤٤̵뤷ޤ
ơȤ EUC_JP, EUC-JP, EUCJP, euc-jp, eucjp, ja_JP.eucJP Ϥ٤
ƱΤȤưޤޤ* Ǥդʸ̣ޤiso8859-1,
iso8859-2  iso8859* ˥ޥåˡ

    EUC-JP  :   eucjp, euc, ujis
    shift-JIS   :   sjis, shiftjis, mskanji
    GB-2312 :   gb2312, cngb, euccn
    BIG-FIVE:   bigfive, big5, cnbig5, euctw
    KSC-5601:   ksc5601, ksx1001, wansung, euckr
    IS0-2022-JP1    :   iso2022jp, iso2022jp1, jis
    UTF-8   :   utf8, utf
    ʤ    :   c, en*, latin*, iso8859*

  C, en* (english), latin*, iso8859* Τɤ줫ꤹȡmulti-byte
character ǧʤʤޤASCII ǤϤʤ ISO-8859-*  Latin 
 single-byte character Ȥϡꤷޤ#pragma
__setlocale( "") ȶ̾ꤹȡǥեȤ encoding 


  ΤۤVisual C++ Ѥ #pragma setlocale ˸¤äơΤΤȤ
 Visual C++ ȤθߴΤѰդƤΤǤVisual C
++ Ǥϥѥ餬ǤʤǧʤΤǡȤäۤ
Ǥ礦'-'  MCPP ǤϾάǤ뤬Visual C++ ΥѥФ
ƤϾάǤʤˡVisual C++ Ǥ C, english Ȥޤ

    shift-JIS   :   japanese, jpn
    GB-2312 :   chinese-simplified, chs
    BIG-FIVE:   chinese-traditional, cht
    KSC-5601:   korean, kor

  Visual C++ ǤϡWindows ɤιѤǤ뤫ˤäƥǥեȤ
multi-byte character encoding Ѥ뤳ȤˤʤäƤޤޤWindows
ΡϰȸΥץפλˤäƤѤޤεǽ
ȾüǤäǤ#pragma setlocale ˤϤͥ褷
ޤ

  GNU C ѤǤϴĶѿ LANG ˸¤äơΤΤȤޤ GNU C
ȤθߴΤѰդƤΤǤMCPP ФƤϾʸǤɤ
'-' άǤ뤬GNU C ΥѥФƤʸ̤ꤳΥڥǤʤ
Фʤʤˡ

    EUC-JP      :   C-EUCJP
    shift-JIS   :   C-SJIS
    ISO-2022-JP1:   C-JIS
    ʤ        :   C

  GNU C ϥѥ鼫Ȥ򥳥ѥ뤷 configuration ˤäơ
ѿ LANG  C-* λǧΤǧʤΤȤޤ (*)
ѥ餬ǧʤϡMCPP 䤤ޤ

  * GNU C  configure  --enable-c-mbchar Ȥץդ
    ȡĶѿ LANG ˤä encoding Ǥ뤳ȤˤʤäƤ롣
     configuration  1998/07 餢ΤΤ褦Ǥ뤬
    ʤȤ V.3.2 ǤưʤLANG Τۤ LC_ALL, LC_CTYPE
    Ǥ encoding Ǥ뤳ȤˤʤäƤ뤬ºݤˤϿǥå
    ѤǤ롣Vine Linux 2.6  FreeBSD 4.7 äƤ V.2.
    95 ǤƱͤǤ롣

    [2.9]       ѥѥ MCPP Ȥˤ

  Visual C, Borland C, LCC-Win32 Τ褦˥ץץåѥ餫
ΩƤʤ֥ѥѥפ¿ʤäƤƤޤ
®٤夲뤿Ȼפޤץץפ֤ϸߤ
ϡɥǤϾʤΤˤʤäƤޤޤ⤽ץץȤ
Τϼ¹ԻĶϤϤۤΩ̤ΥեǤ뤳Ȥ
ʰ̣Τǡ֥ѥѥפ¿ʤΤϷ褷ɤȤ
Ȥϻפޤ󡣥ץץνϰ¸λ̤ͤˤʤޤ
  Ȥ⤢ѥѥǤϡץץå MCPP ֤뤳
Ǥޤ󡣤äơMCPP Ȥˤϡޤ MCPP ǥץץ
νϤ򥳥ѥϤޤѥˤäƺ٥˥
ץ뤳ȤˤʤޤǤ򤨤ޤ󡣤Ǥ⡢
MCPP ȤȤϥåΤͭǤꡢ°Υץץ
åˤϤʤǽȤȤǤޤ
  ѥѥ MCPP Ȥˤϡμ makefile ˽ɬפ
ޤΥץȤƤϡMCPP ȤΥѥ˻Ȥ visualc.mak,
borlandc.mak, lcc_w32.mak  makefile ΥꥳѥѤ򸫤Ƥ

  ʤGNU C 3 Ǥϥѥ餬ץץǽ¢褦ˤʤä
ΤΡץץåȤץѰդƤΤǡ
뤳Ȥ MCPP ʤȤȤǤޤ[3.9.7] ȡˡ

    [2.10]      糫ȯĶ MCPP Ȥˤ

  GUI Τ糫ȯĶ(IDE) ȤΤϽȼλͤǤꡢ
Ūʥ󥿥ե̾ϸƤʤΤǡ MCPP Ȥ
ˤϺ񤬤ޤξ塢ѥ餬ѥѥǤȡ
 MCPP ȤեΤϤ˺Ǥ
  Ǥ Visual C++ .net  IDE  MCPP Ȥˡޤ
Borland C++  IDE ϻ 4.0 ΤΤäƤ餺ŤΤб
Ƥޤ󡣤ޤLCC-Win32 ϥ shareware ʤΤǡ
֤бǽȻפޤޤбƤޤBorland
C Ǥ LCC-Win32 Ǥϡޥɥ饤ǻȤäƤ

        [2.10.1]    Visual C++ .net  IDE  MCPP Ȥˡ

  Visual C++  IDE Ūʥ󥿥եƤ餺⥳
ѥ餬ѥѥʤΤǡ̾Ρ֥ץȡפǤ MCPP 
ȤǤޤ󡣤MCPP Ȥ makefile 񤤤ƤС
ǡ֥ᥤեץȡפ뤳ȤǤޤơ
Խ両䡢˥ǥХåǽޤ IDE ȾεǽȤ
ȤǤޤ
  ֥ᥤեץȡפˤϼΤ褦ˤޤˡ
Visual C++ .net 2003 ɥȡפΡ֥ᥤեץȤκ
פ˽񤤤ƤΤǤ*1

1IDE ΥǥХåǽȤ¤ĥ桼Ȥƥ󤹤롣*2

2MCPP Ȥ makefile 񤤤Ƥvisualc.mak 򻲾ȡˡ

3Visual Studio .net ư롣*3

4ֿץȡפ򥯥å줿ֿץȡפΥ
ɥǡ֥ᥤե ץȡפӡ֥ץ̾פ
־פꤷơOKפ򥯥å롣

5ȡ֥ᥤե ץꥱ ɡפΥɥ
Τǡ֥ץꥱפ򥯥åǡ֥ӥɥޥ
饤סֽϡס־õޥɡס֥ӥɥޥɡפϤ롣
ѸϤ狼ˤMCPP ȤΥѥˤȤȼΤ褦ʤ
ȤǤ MCPP μ¹ԥץ̾ mcpp32_std.exe Ȥˡ
    ֥ӥɥޥɥ饤:   nmake
    ֽϡ                :   mcpp32_std.exe
    ־õޥɡ        :   nmake clean
    ֥ӥɥޥɡ    :   nmake CPP=mcpp32_std PREPROCESSED=1
֥ᥤեץȡפǤ make install 륳ޥɤʤ
Τǡ֥ӥɥޥɥ饤ס֥ӥɥޥɡפǻꤵ륳ޥɤ
 install ¹Ԥ褦 makefile 񤤤Ƥɬפ롣
MCPP 򥳥ѥ뤹ΤǤʤС֥ӥɥޥɥ饤פȡ֥ӥ
ޥɡפȤ̾Ʊɤ
Ϥ顢ִλפ򥯥å롣

6ȡ֥塼󥨥ץפ˥ץȤΤǡ
Ρ֥եפȤե򥯥åơơ˥塼
֥ץȡפִ¸ܤɲáפӡե򤹤٤
ơOKפ롣ȡ֥塼󥨥ץפ˥ե
̾롣

  ǡ[Խס֥ӥɡס֥ӥɡס֥ǥХåεǽ٤ƻȤ
褦ˤʤޤ

  *1  ΤȤǤ Windows2000 ǤϤǤǤWindowsXP
    HE ǤϤʤǤʤäWindows2000 줿ץȥե
    򥳥ԡȤWindowsXP ǤץȤʤȤ
    Ǥ
  *2  ǥХåǽȤˤϡWindows2000 Ǥ "Debugger users" Ȥ
    롼פ˥桼°ɬפ롣WindowsXP HE ǤϤ
    롼פϤʤΤǡԤȤƥ󤷤ʤФʤʤޤ
    ٥롦ǥХåǽȤˤ cl.exe θƤӽФ /Zi 
    ղäơǥХå褦 makefile 񤤤Ƥ
    ɬפ롣
  *3  ֥ȡ->֥ץפ鵯ưȡӥɤ줿¹ԥץ
    ǥХåΤưˡ󥯥롼ɥǥ쥯ȥδĶ
    ѿꤵʤꤹˤˡVisual Studio .NET 
    ɥץץȡפ򳫤ơ
        devenv <ץȥե> /useenv
    ȤƵưʤФʤʤ


ĥǽȸߴ

  MCPP ˤϤĤθͭγĥǽޤޤƽ°Υץ
ץåˤϤ줾γĥǽޤΰ MCPP Ǥϻ
ޤ󡣤ǤϤĥǽȸߴޤ

  ʤHAVE_PRAGMA == TRUE ǥѥ뤵줿 mcpp_std Ǥ #pragma 
ϸ§ȤƤΤޤ޽Ϥޤmcpp_std ȤΤˤĤƤ⡢
ƱͤǤƱ #pragma ѥΤˤȤäƤ̣Ĳǽ
Ǥ
  #pragma MCPP ǻϤޤԤ mcpp_std ѤΤΤʤΤǽϤޤ
GNU C ǤǤϡ#pragma GCC  poison, dependency, system_header Τ
줫³ԤϤޤ󡣤ޤ#pragma once Ϥޤ󡣥إå
"pre-preprocess" εǽȤȡMCPP νϤ MCPP ǽ뤳Ȥ
ʤޤλ˽ʣΤ򤱤뤿Ǥpre-preprocess 
ĤƤ [3.1] 򻲾ȡˡ#pragma push_macro, #pragma pop_macro ⥳
ΤˤȤäƤ̵ѤʤΤǽϤޤ
  HAVE_PRAGMA == FALSE ǥѥ뤵줿 mcpp_std Ǥ #pragma ԤϽ
mcpp_std ȤνʤΤˤĤƤϥ˥󥰤Фޤ

  ޤEXPAND_PRAGMA == TRUE ǥѥ뤵줿 mcpp_std Ǥ #pragma
ԤΰϥޥŸоݤȤʤޤʼºݤˤ EXPAND_PRAGMA == TRUE 
Visual C ǤǤˡ#pragma  STDC, MCPP, GCC Τɤ줫³
ԤŸޤ

  #pragma sub-directive  implementation-defined ǤΤƱ̾
 sub-directive Ϥˤäưۤʤ̣Ķ줬ޤ̾
ξͤ򤱤빩פɬפǤޤEXPAND_PRAGMA == TRUE ξϡ#
pragma sub-directive ̾ȤޥŸƤϺΤǡ桼̾
֤ȽŤʤʤ褦ˤȤߤɬפǤMCPP ͭ sub-directive
 #pragma MCPP ǻϤޤޥŸʤΤϤΤǤC99 ǵꤵ
줿 #pragma STDC  GNU C 3  #pragma GCC ˡΤ줿ΤǤ
  #pragma once ¿νϤ˼̾ͤ붲Ϥ
ʤäƤΤǡ̾Τޤ޼Ƥޤޤ#pragma
__setlocale ϥѥΤФƤɬפʤΤ MCPP Ȥ̾դ
"__" Ƭդƥ桼֤̾ȽŤʤʤ褦ˤƤޤ

    [3.1]       #pragma MCPP put_defines,
                    #pragma MCPP preprocess, #pragma MCPP preprocessed,
                    #put_defines, #preprocess, #preprocessed

  #pragma MCPP put_defines, #pragma MCPP preprocess, #pragma MCPP
preprocessed  mcpp_std ΤΤǡ#put_defines, #preprocess, #
preprocessed  mcpp_prestd ΤΤǤʲǤ #pragma ˤȤä
ޤ

  #pragma MCPP put_defines ǥ쥯ƥ֤˽в񤦤 MCPP ϡλ
Ƥ뤹٤ƤΥޥ #define ԤηǽϤޤ#
undef 줿ΤϽФƤޤ__STDC__  #define, #undef оݤˤ
ʤΤϡ #define ԤηȤäơȥޡǰϤ
Ϥޤ__FILE__, __LINE__ ϥޥƤӽФưŪ
ʥޥʤΤǡǽϤִꥹȤ̵̣ʤΤǤˡ
  mcpp_prestd  mcpp_std  poststd ⡼ɤǤϡfunction-like ޥ
Υѥ᡼̾ϵޤ󡣤ǤΥǥ쥯ƥ֤Ǥϡѥ
̾裱ѥ᡼˵Ū a, b, c, ... Ȥ̾ɽ
27 ܰʹߤΥѥ᡼ˤ a1, b1, c1, ..., a2, b2, c2, ... Ȥ
̾Ȥޤ
  MCPP ϥեϥեꤻ˵ươܡɤ
ʤ

#pragma MCPP put_defines

Ǥȡޥ򤹤٤Τ뤳ȤǤޤ-S1, -N Υ
դƵưȡ줾ޥäƤ뤳Ȥ狼
ޤ
  DEBUG == TRUE ǥѥ뤵줿 MCPP Ǥϡ

#pragma MCPP put_defines

Ȥȡ줾ΥޥΤ륽ե̾ȹֹɽ륳
ȤϤޤ

  #pragma MCPP preprocess Ȥǥ쥯ƥ֤˽в񤦤 MCPP ϡ

    #pragma MCPP preprocessed

ȤԤϤޤϡΥեϥץץѤߤǤ
Ȥ򼨤ΤǤ

  #pragma MCPP preprocessed Ȥǥ쥯ƥ֤˽в񤦤 MCPP ϡ
ե MCPP ˤäƥץץѤߤǤȽǤơ#define
ԤФƤޤǤϤ򤽤Τޤ޽Ϥ˥ԡޤơ#define Ԥ
ФƤȡȤϤ٤ #define ԤǤȽǤơޥޤ
*1
  κݤˡDEBUG == TRUE ǥѥ뤵줿 MCPP Ǥϡˤ
ե̾ȹֹξ⵭ޤ*2
  #pragma MCPP preprocessed ͭϰϤϤΥǥ쥯ƥ֤Τ륽
Τι԰ʹߤǤΥե뤬 #include 줿ΤǤ
ϡinclude ̾Υץץޤ

  *1  ºݤνϤ⤦ʣǤ롣#pragma MCPP preprocessed 
    ϹԤȾ򤽤Τޤ޽Ϥ˥ԡ뤬 #line ԤϽϤ
    ѥΤѴƽϤ롣ޤɸ
    ޥ #define Ԥȥޡ˰ϤޤƤΤǡιԤϼΤ
    롣
  *2  äơpre-preprocess Ƥޥξξϼ
    դ˸ȡDEBUG == FALSE ǥѥ뤵줿 MCPP Ǥϡξ
    ϻȤʤ

        [3.1.1]     إåե pre-preprocess

  嵭Υǥ쥯ƥ֤ѤȡإåեΡ֥ץץץ
򤹤뤳ȤǤޤ֥ץץץפ򤷤Ƥȡ֤Υץץ
֤ʤṳ̂ޤˡϡ嵭λͤǤǤˤ狼äȻ
ޤǰΤ MCPP ȤΥˤȤäޤ
  MCPP Υˤϣܤ *.c ե뤬ꡢΤΣܤϤɤ
"system.H"  "internal.H"  include Ƥޤơ¾Υإå
include Ƥޤ󡣤äΤ˸ȡǤϤʤäƤޤ

#if PREPROCESSED
#include    "mcpp.H"
#else
#include    "system.H"
#include    "internal.H"
#endif

ơsystem.H  noconfig.H ޤ configed.H ȤĤɸإå
 include Ƥޤmcpp.H ϻ󶡤륽ˤϤޤ󡣤줬
줫 "pre-pre-processed" header ʤΤǤ
  mcpp.H ˤϡʤ noconfig.H ꤬Ǥˡ

    mcpp_std > mcpp.H

Ȥ MCPP ưޤGNU C Ǥϡ-b ץդˡ
  ơܡɤ

#pragma MCPP preprocess
#include "system.H"
#include "internal.H"
#pragma MCPP put_defines

Ǥߡend-of-file Ϥ MCPP λޤ
   mcpp.H Ǥޤ system.H, internal.H ץ
Τ #define ԤνդäΤǤ
include Сsystem.H, internal.H  include ΤȤޤäƱ
뤳ȤǤޤơɸإåޤีΥإåե
פοʬΣΥˤʤäƤޤ#if ȥȤäƤ뤫Ǥ
ܤ뤤ϣܤ *.c ե include Τϡsystem.H,
internal.H 򣶲󤢤뤤ϣ include Τ٤ơϤ뤫û֤
ߤޤ#pragma MCPP preprocess ȤȤǤ˻֤ṳ̂ޤ
  ֤ΥѥǤ -DPREPROCESSED=1 Ȥץդޤ
  μϲΥե˽񤤤Ƥơmakefile Ǥ򻲾ȤΤ
ɤǤ礦MCPP Υդ makefile  preproc.c ˤϡ줬
ƤΤǡ򸫤Ƥ
  Visual C, Borland C, LCC-Win32 Τ褦ʣѥѥǤΩ
cpp λȤƻϾʤΤǤξǤ⤳εǽͭѤǤ

  Υإåե pre-preprocess εǽϡGNU C / cpp  -dD 
εǽ򿿻ΤǤäƤޤ
  1.  GNU C / cpp Ϲֹ #line 123 "filename" ǤϤʤ # 123
"filename" ηǽϤ롣Τᡢ GNU C / cpp Ǻƽ뤳
ϤǤ뤬Standard C ΥץץåǤϤǤʤ
  2.  GNU C θŤ cpp Ǥ #define ԤϽиȤǽϤ뤬#
undef ԤϽϤʤäơƽȸΰտޤȰ
ʤ̤ˤʤ뤳Ȥä
  3.  GNU C ˤϤʤ #pragma MCPP preprocess ȤȤǡ®٤
®ʤ롣
  Pre-preprocess εǽȤƤϡMCPP Τְۤ㤤ʤŪǤ

    [3.2]       #pragma once

  #pragma once  mcpp_std Ρʤʤ__STDC__  0 ʾͤ˻
Ƥ˻ޤ*1
  GNU C, Visual C, LCC-Win32  Wave ȤñΥץץåǤ #
pragma once Ȥޤ
  إåե򣱲󤷤󥯥롼ɤʤ˻Ȥޤإåե


#pragma once

Ƚ񤤤ƤȡΥե򥤥󥯥롼ɤ #include ԤФƤ
⡢ǽΣ󤷤󥯥롼ɤޤ
  ̾ϡ°ɸإåǤ

#ifndef __STDIO_H
#define __STDIO_H
/* stdio.h    */
#endif

Ǥ¿ɤǤޤȻǽǤ
ȤˡǤϥإåեɤޤʤǤޤȤϤǤޤʥ
åפʬǤ⡢#if, #endif ФƤΤƻ뤹뤿ˡɤޤ
ФʤʤƬ # ǥ쥯ƥֹԡ#  preprocessing
directive ³ԡˤλؼǤ뤫ɤΤ뤿ˤϥȤ
ʤФʤʤΤˤʸƥȽǤʤФʤʤ
ǡɡɤ tokenization ȾޤǤʤФʤʤΤǤ
ˡ#pragma once ϡեؤΥ⤷ʤǤޤΤǤ
η̡¿ include ν®٤®ʤޤ
  Header name ƱǤ뤫ɤϡѥΥǥ쥯ȥʬ
ޤñʸӤȽǤޤDOS/Windows ϤǤʸ
ʸ϶̤ޤ󡣤äơ"/DIR1/header.h"  "/DIR2/header.h" 
̤ΤΤȤư"header.h"  "HEADER.H" Ȥ DOS/Windows ϤǤƱ
ΡUNIX ϤǤ̤ΤΤȤưޤ

   #pragma once  GNU C V.1.* / cpp  #pragma once Υǥ
ѤΤǤGNU C V.2.*, V.3.* / cpp Ǥ⤳εǽϻĤäƤޤ
obsolete ʤΤȤƤޤ#pragma once ʤƤ⡢إåե
Τ #ifndef _MACRO, #define _MACRO, #endif ǰϤޤƤСcpp 
򵭲󤷤 include ʤȤͤѹƤޤ
  GNU C V.2, V.3 / cpp λͤϡGNU C λѤȤʤ
νϤʤɤǤϻȤʤȤޤɸإåνäƤ뤫
Ǥޤ GNU C V.2, V.3 / cpp λͤΤۤݤǤǡ
MCPP Ǥ #pragma once Ƥޤ
  ¾ΥץץåǤƱإåեȤϤ櫓
ˤϤ椭ޤ󡣥ޥȤˡʻѤơإåե򼡤Τ褦
ǤǤΤɤǤ礦

#ifndef __STDIO_H
#define __STDIO_H

#if     __MCPP >= 2
#ifdef  __STDC__
#pragma once
#else
#ifdef  __cplusplus
#pragma once
#endif
#endif
#endif

/* stdio.h    */
#endif

   pre-Standard ΥץץåȤꤷơ#if, #else,
#ifdef Ȥ defined 黻ҤȤʤǽ񤤤Ƥޤpre-Standard
ΤΤȤȤޤäʤΤǤСΤ褦ˣԤǤޤȤ
ޤ

#pragma once

  <assert.h> ˤ #pragma once Ͻ񤤤ƤϤޤʤͳ
cpp-test.txt [4.1.2] ȡˡC++  <cassert>, <cassert.h> ƱͤǤ
  ⤦ĤϡGNU C / glibc κǶΥƥǤ <stddef.h> Τ褦
ˡ¾ system header 鷫֤ #include إåե뤬
ȤǤ¿ system header  __need_NULL, __need_size_t,
__need_ptrdiff_t, etc. ΥޥƤ <stddef.h>  #include 
ΤӤˡ<stddef.h> Ǥ NULL, size_t, ptrdiff_t, etc. 
Ƥ椭ޤ<errno.h>, <signal.h> ƱͤǤ<stdio.h> Ǥ⡢¾
system header  __need_FILE ΥޥƤ #include <stdio.h>
ΤӤ FILE Ƥ椯礬ޤΥե
 #pragma once Ͻ񤭹櫓ˤϤޤ*2

  *1 MCPP V.2.4.1 ޤǤ #pragma __once ⤢äɬפϤʤȻפ
    ΤǺ
  *2 ʤȤ Linux / GNU C 2.9x, 3.2 / glibc 2.1, 2.2 ǤϤʤä
    롣
    FreeBSD 4.* Ǥ glibc ϻȤƤʤΤǡʣʥƥ
    إåˤϤʤäƤʤ

        [3.2.1]     إåե #pragma once 񤭹ġ

  񤭹Τϥإåեοʤ礷ȤǤϤޤ
󤬡¿ȼǤϤäȤȤˤʤޤǡưŪ
񤭹ñʥġѰդޤ

  tool/ins_once.c ŪŤ GNU C ΥƥѤǤBorland C 4.0 
ɸإåνƱ롼˽äƤΤǡȤȤǤ
Glibc 2 Τ褦ʥƥǤϾ嵭Τ褦㳰¿ΤǡȤʤۤ
̵Ǥ
  줬Ȥ륷ƥǤ⡢إåեˤ GNU C δ
˽äƤʤΤ⻶ޤإåǤ GNU C V.2.* / cpp
Ρ󤷤ɤ߹ޤʤȤǽưޤ
  ǡins_once.c 򥳥ѥ뤷ơUNIX ʤ /usr/include, /usr/
local/include Υǥ쥯ȥǡޤ

    chmod u+w *.h */*.h */*/*.h

Ȥǡ

    ins_once -t *.h */*.h */*/*.h

Ȥޤȡ#ifndef ޤ #if !defined ǻϤޤʤإåե
뤬𤵤ޤΥإåǽƤ줫顢

    ins_once *.h */*.h */*/*.h

Ȥȡƥإåեκǽ˽и #directive  #ifndef ޤ
#if !defined Ǥäϡľ #pragma once Ԥ񤭹ޤޤ
ʤ줬ǤΤ root Υ桼ΤϤɬפʤ chmod
u-w *.h */*.h */*/*.h Ȥơaccess permission 򸵤ᤷƤˡ
  ins_once ˤϼΤ褦ʥץ󤬤ޤƥ˹碌Ŭ
ץ򤷤Ƥ

    -t:   ե뤬ʥȤȡ#ifndef  #if !defined ǻϤޤ
        Ƥ뤫ɤƥȤ롣եϽ񤭴ʤ
    -p:   եƬ #pragma once Ԥ񤭹ʥǥեȤǤ #
        ifndef / #if !defined Ԥμ˽񤭹ˡ
    -o:   #pragma դʤŤץץåȤơ
        ΣԤ񤭹ʥǥեȤǤ #pragma once ΣԤˡ
    -g:   GNU C οƥΤˡ<stddef.h>, <stdio.h>, <signal.
        h>, <errno.h> 񤭴ʤʥǥեȤǤϽ񤭴ʤΤ
        <assert.h>, <cassert>, <cassert.h> ˡ

  ins_once ʣ¹ԤƤƱե˥֤äƽ񤭹ळȤϤʤ
ˡñʥåϤƤޤ̩ʤΤǤϤޤ
   ins_once ϴ֤˹碌ʤΤǡtokenization ϤۤȤɤäƤޤ
FreeBSD 2.0, 2.2.2, 2.2.7, Borland C 4.0 γƥإåեǤϴ
̤ư򤷤ޤüʥإåե뤬ȸư뤫⤷
ins_once ɬХååפȤäƤ¹ԤƤ
  磻ɥɤ shell ŸƤʥХåեСե
ϡ󤫤ʬƼ¹Ԥˡ

    [3.3]       #pragma MCPP include_next, #pragma MCPP warning,
                    #include_next, #warning

  Υǥ쥯ƥ֤ GNU C / cpp ȤθߴΤѰդƤ
ΤǤGNU C / cpp ˤ #include_next, #warning ȤʰȿΥǥ
쥯ƥ֤ޤʰȿǤȤäƤ륽⵩ˤ
Glibc 2 ΥƥǤϡƥإåեˤȤäƤ
ޤ MCPP ǤϡΥ򥳥ѥǤ褦ˤ
뤿ᡢGNU C Ѥ˸¤ä#include_next, #warning ޤ
mcpp_std Ǥϥ˥󥰤оݤȤʤޤmcpp_std Ǥ #pragma MCPP
include_next, #pragma MCPP warning ޤ GNU C Ѥ˸¤
ޤ

    #pragma MCPP include_next   <header.h>

뤤

    #include_next   <header.h>

 include directory 򥵡ݤˡheader.h Ȥե뤬ǽ˸
Ĥäǥ쥯ȥ򥹥åפơμ˸Ĥä header.h 
include ޤ
  DOS/Windows Ǥϡإå̾ʸʸζ̵̤뤷ޤ

    #pragma MCPP warning    any message
    #warning    any message

Ǥϡany message 򤽤Τޤ warning Ȥɸ२顼Ϥ˽Ϥޤ
 #error Ȱäƥ顼ˤϤʤޤ

    [3.4]       #pragma MCPP push_macro, #pragma MCPP pop_macro,
                    #pragma push_macro, #pragma pop_macro
                    #pragma __setlocale, #pragma setlocale

   Visual C  MCPP ܿ˼ĤǤ¾νϤǤ
Ȥ褦ˤΤǤ

  #pragma MCPP push_macro( "MACRO"), #pragma MCPP pop_macro( "MACRO") ϡ
λǤ MACRO Υޥ򥹥å "push"  "pop" ꤹ
ΤǤ
  Visual C Ǥ #pragma push_macro( "MACRO"), #pragma pop_macro( "MACRO")
Ȥޤ
  push_macro ǤϤΥޥ򤵤졢pop_macro Ǹᤵޤ
push Ƥ⤽ΥޥϤޤͭǤ̵ˤ뤿ˤ #
undef 뤫ޤ̤Ǻɬפޤ
  push_macro ϲŤˤǤޤ

  #pragma __setlocale( "<encoding>")  multi-byte character encoding 
<encoding> ѹޤ__setlocale ΰʸƥǤʤФ
ޤ<encoding> ˤĤƤ [2.8] 򸫤ƤȤȡ
 translation unit Ǥʣ encoding ȤȤǤޤ #
pragma  32 ӥåȰʾΥƥǤȤޤ
  Visual C++ Ǥ #pragma setlocale Ǥꡢ#pragma __setlocale ϻȤ
Encoding λ MCPP Ǥʤѥˤɬפ
ޤѥ餬ǧǤΤ #pragma setlocale Ǥ

  #pragma __setlocale ǧǤ륳ѥΤϤޤΤȤޤ


    [3.5]       #pragma MCPP debug, #pragma MCPP end_debug,
                    #debug, #end_debug

  #pragma MCPP debug, #pragma MCPP end_debug  mcpp_std ΤΤǤ
mcpp_prestd Ǥ #debug, #end_debug ȤʤޤDEBUG == TRUE and/or
DEBUG_EVAL == TRUE ǥѥ뤷ƤС줾бǥХå
νϤޤ
  #pragma MCPP debug <args> ǥ쥯ƥ֤ϥǤդιԤ˽񤯤
Ǥޤ<args> ǥǥХåμꤷޤĤ #pragma MCPP
debug ǥ쥯ƥ֤ʣ <arg> ꤹ뤳ȤǤޤɬİ
 <arg> ꤬ɬפǤΥǥ쥯ƥ֤ȡǥХå
νϤϤޤޤơ#pragma MCPP end_debug <args> ǡ<args>
ΥǥХåϤޤ#pragma MCPP end_debug Ǥϡ<args> 
ά뤳ȤǤޤξϡꤵƤ٤ƤΥǥХå
ϤޤMCPP ǥݡȤʤ <args> ˤäϡ
˥󥰤ФޤˤäͭǤ
  ǥХåϤ٤ơץץνϤƱѥ˽Ϥޤ
νϤƱ뤿ǤäơΥǥ쥯ƥ֤
ȥѥǤޤMCPP νꤻˡ̤˽Ϥܤ
ɤΤ̾λȤǤ
  ץץη̤˵䤬硢ʬ

#pragma MCPP debug token expand
/* ǥХåʬ   */
#pragma MCPP end_debug

ȤդˤϤǻȤޤ
   MCPP ȤΥǥХåѤΤΤǤץץβȥ졼
˻ȤޤŪŪʤΤǡ򸫤ʤǤʤ
Ȥ⤢ꡢ뤵⤢ޤޤ󤷤Ƥ
   #pragma MCPP debug, #debug  system.H  DEBUG, DEBUG_EVAL ξ
ʤȤɤ餫 TRUE ƤʤȼޤDEBUG ==
TRUE ξ tokenization ޥŸΥȥ졼ǤDEBUG_EVAL ==
TRUE ξ #if Ԥɾȥ졼Ǥޤ

  <arg> μϼ̤Ǥ

    DEBUG == TRUE ξ
        path        include եΥѥɽ
        token       token 򣱤Ĥڤʬơμɽ
        expand      ޥƤӽФŸȥ졼
        if          #if (#elif, #ifdef, #ifndef) οɽ
        getc        ץץ 1 byte ĥȥ졼
        memory      MCPP λȤäƤҡץξɽ
    DEBUG_EVAL == TRUE ξ
        expression  #if ɾȥ졼

        [3.5.1]     #pragma MCPP debug path, #debug path

  Υǥ쥯ƥ֤˽в񤦤 MCPP ϡޤꤵƤ include ǥ
쥯ȥΥѥ̤ͥι⤤Τɽޤʤǽ
˥륫ȥǥ쥯ȥꤪӥΥǥ쥯ȥϾάˡ
  ˡ#include ԤȡΥإåե include 뤿
MCPP ºݤ˥ǥ쥯ȥ꤬ʥȥǥ쥯ȥޤơ
٤ɽޤ#pragma once Τإåե #include 
ϡλݤɽޤ

        [3.5.2]     #pragma MCPP debug token, #debug token

  ޤɤ߹ԤɽǡMCPP  token 򣱤ɤिӤˡ
 token ȼɽޤToken ȤΤ˸ preprocessing-
token (pp-token) ΤȤǤɤФǤϤʤMCPP ޥ
ŸʤɤŪɤ֤ pp-token ⡢ΤĤɡʷ֤ơɽ

  1 byte  pp-token ΤΤΤɽޤ󡣤ϥץ
ΤĤˤΤǤ

    1. ץץǥ쥯ƥֹԤγϤ '#'
    2. function-like ޥΥѥ᡼ꥹȳϤ '('
    3. function-like ޥΥѥ᡼ڤ ','
    4. function-like ޥƤӽФΰꥹȳϤ '('

  Pp-token μϼ̤Ǥ

    (NAM)   identifier                  (STR)   string literal
    (NUM)   preprocessing-number        (WSTR)  wide string literal
    (OPE)   operator or punctuator      (CHR)   character constant
    (SPE)   $, @ ü pp-token    (WCHR)  wide character constant
    (SEP)   token separator (white space)

  Τ (SEP) ϲԥɰʳ̾ɽޤ󡣲ԥ
Υȥ륳ɤ <^J>, <^M> ɽޤ

        [3.5.3]     #pragma MCPP debug expand, #debug expand

  ޥƤӽФŸȥ졼ޤ
  mcpp_std  #pragma MCPP debug Ǥϼ̤Ǥ
  ޥƤӽФȡޤΥޥɽޤˡ
ɤ߹ޤ졢ִꥹΥѥ᡼֤졢褦
ɽޤޥͥȤƤС줬缡
ŸƤޤ˥ޥСβƵŪˡʥ
᡼Ȥִˡ˥ȥ졼ޤ
  ɽ mcpp_std ȤΤĤδؿؤνΤӤˡδؿ̾Ȥ
˹ԤޤδؿϼΤ褦򤹤롼Ǥmcpp_std
Υ򻲾Ȥȡˤ褯Ǥޤ

    expand          ޥŸ롼
    replace         ޥ򣱥٥Ÿ
    collect_args    򽸤
    prescan         ִꥹȤ #, ## 黻Ҥν򤹤
    substitute      ѥ᡼ִ
    rescan          ִꥹȤ

  Τexpand ʳϸߤ˴ܺƵδطˤޤ
  replace, collect_args Ǥϡmcpp_std Ū˥åѤǤŸ
ΥǡɽޤΥǡǤϡmcpp_std Ūʥ
ɤΤ褦ʵɽޤ

    <n>         n ܤΥѥ᡼
    <TSEP>      pp-token ڤ뤿 MCPP  token separator
    <MAGIC>     Ʊ̾ޥκִػߤ륳
    <RT_END>    ִꥹȤν򼨤
    <SRC>       Identifier ǥե뤫ޤ줿
                Ǥ뤳Ȥ򼨤

  Τ <SRC>  mcpp_std  poststd ⡼ɤǤ compat ⡼ɤǤʤ
Ȥޤ
  #pragma MCPP debug token ꤷۤ狼䤹Ǥ礦
  mcpp_prestd  #debug expand Ǥ mcpp_std Ȥ롼˰
äƤޤάޤ

        [3.5.4]     #pragma MCPP debug if, #debug if

  #if, #elif, #ifdef, #ifndef ιԤɽɾǤ뤫Ǥ
𤷤ޤåפ #if section Ǥϡ𤵤ޤ

        [3.5.5]     #pragma MCPP debug expression, #debug expression

  #if, #elif Ԥμɾܺ٤˥ȥ졼ޤ
   DECUS cpp ȤΥǥХåѤ˥ꥸʥǰ褢ΤǡϤ
ȤɼäƤޤŪʴؿ̾Ф꤫ѿ̾Ȥͤޤǥ
ȽФƤޤMCPP ΥɤʤǤʤȡѿǤޤ

  ʣʼͤɾѤΥåѤ߹ߤƤ褦ϡ
򸫤ʤƤⲿȤǤǤ礦

        [3.5.6]     #pragma MCPP debug getc, #debug getc

  MCPP  get() ȤХɤ߹ߴؿƤӽФ뤿Ӥˡܺ٤
ǡϤޤmcpp_std Ǥ pp-token 򥹥󤹤ϡ
ΣХܤ get() ϸƤӽФޤ
  #debug getc Ǥ token 򥹥󤹤 get() ƤӽФΤǡ
ȤǤʤ̤ΥǡǤФޤ
  ˤƤ⡢ʥǡϤޤȤɬפϤޤޤ

        [3.5.7]     #pragma MCPP debug memory, #debug memory

  Υǥ쥯ƥ֤ȡλ MCPP Ū˻ȤäƤ
malloc(), realloc(), free() ˤҡץξ򣱲𤷤ޤ
ϻκä malloc() ¾βफ malloc() ȤäƤ
εǽǤmcpp-porting.txt [4.extra] ȡˡ¾ malloc() ξϥ
顼ˤϤޤ󤬡𤷤ޤ
  Υǥ쥯ƥ֤ʤޤ MCPP λȡλ˺٥
ץξ𤵤ޤMCPP  out of memory ǽλƱ
ͤǤ

    [3.6]       #assert, #asm, #endasm

  #assert  mcpp_prestd ǤޤGNU C ǤǤϼޤ
STANDARD  #error б뵡ǽǤStandard C 

#if ULONG_MAX / 2 < LONG_MAX
#error  Bad unsigned long handling.
#endif

ȤȤ

#assert LONG_MAX <= ULONG_MAX / 2

Ƚ񤱤ޤ #if Ȥɾnon-zeroˤǤв⤻
0ˤǤ

    Preprocessing assertion failed

Ȥդ³Ƥιԡʹ³ȥȽ򤷤ιԡˤɽޤ
ϥ顼ȤƥȤޤߤޤ

   #assert  System V  GNU C / cpp  #assert Ȥϡޤä
ΤΤǤ

  #asm, #endasm ΣĤΥǥ쥯ƥֹԤǤϤޤ줿֥åϥ֥
Ȥưޤmcpp_prestd Ǥޤ
Microware C / 09 Ѥ˽񤫤줿ΤʤΤǡ¾νϤˤܿˤϡ
system.c  do_old(), do_asm(), put_asm() ˽­ɬפޤ
  #asm ֥åˤĤƤϡtrigraphs Ѵ <backslash><newline> κ
ϤޤȤν token åʸåϤƬ
 space ޤޥޥƱ̾äƤޥŸ
ιԤ򤽤Τޤ޽Ϥޤ¾Υǥ쥯ƥֹԤ #asm ֥å
Ǥϰ̣ޤ
   #asm, #endasm  Standard C ǤǧʤΤǤޤ#
pragma sub-directive ʳγĥǥ쥯ƥ֤ʳǤФ
#pragma asm, #pragma endasm ̾ѤƤ褷ޤ󡣤ȸΤϡ
Standard C ǤϥϤ٤ƣä token sequence ΩäƤɬפ
ޤʸ̩˸ preprocessing token sequenceˡ֥ץ
ϣä token sequence ǤϤʤǤStandard C ǥ֥ꥳ
ɤȤˤϡʸƥȤ token ˡ
ޤ󡣤ơȤ߹ߴؿ򥳥ѥΤ˼ơ

    asm(
        " leax _iob+13,y\n"
        " pshs x\n"
    );

ȤäǸƤӽФΤǤ
  ĹɤȤʤȤϤäƤʤΤǡξϤʬ
̤δؿˤơ饤֥ؿ񤯻Τ褦ˡ̤Υեǥ
ץऽΤΤ񤤤ơ֥ѥǽ󥯤ƻ
Ȥˤʤޤϵ¤Τ褦˻פ뤫⤷ޤ󤬡port-
able ʣåץ񤯤ˤϥ֥ʬϴʬΥɬפ
ޤ顢ष #asm Ȥ鷺̥եǽ񤯤褦ˤۤɤǤ
礦

    [3.7]       C99 οǽ_Pragma() 黻ҡѰޥ

   mcpp_std ˤޤ
  -V199901L ץ __STDC_VERSION__  199901L ʾˤȡC99
μεǽͭˤʤޤ
  C++ Ǥ -V199901L ץ __cplusplus  199901L ʾˤ
ƱͤǤ1, 7 ʳλͤ C++ Standard ˤϤޤ󤬡mcpp_std 
 C99 Ȥθߴ뤿ˡΥץѰդƤޤ
  Ѱޥ mcpp_std Ǥ C90  C++ ǤȤ褦
Ƥޤ*1

  1.  // ޤǤ򥳥ȤȤư
  2.  ѰޥȤ롣
  3.  Preprocessing-number  e+, E+, e-, E- Ʊͤ p+, P+, p-, P-
Ȥ sequence ǧ롣ưΥӥåȥѥ 0x1.
FFFFFEp+128 Ȥդˡʤɽ뤿ΤΤǤ롣
  4.  _Pragma() operator ͭˤʤ롣
  5.  EXPAND_PRAGMA Ȥޥ TRUE ƥѥ뤵줿
mcpp_std Ǥϡ#pragma ԤΰϡSTDC, MCPP, GCC Τɤ줫ǻϤޤΤ
ʤ¤ޥŸоݤȤʤʥǥեȤǤ EXPAND_PRAGMA == FALSE 
ꡢޥŸʤˡ
  6.  long long ĽϤǤ #if ɾ long long, unsigned long
long ǹԤ
  7.  ̻ҡʸʸƥ롦pp-number ˤ \unnnn,
\Unnnnnnnn η UCN Ȥ escape sequence ̤ Unicode ʸ
̣ͤ롣#if Ǥ UCN ͤϣɽȤɾ롣ʤ
poststd ⡼ɤǤ UCN ϻȤʤˡ

  ѰޥȤΤϡΤ褦ʤΤǤ

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

Ȥޥȡ

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

ȤޥƤӽФϼΤ褦Ÿޤ

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

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

  _Pragma 黻Ҥ _Pragma( "foo bar") Ƚ񤯤 #pragma foo bar Ƚ񤤤
ΤƱ̤ı黻ҤǤʸƥޤϥ磻ʸ
룱ĤǤʤФʤޤ󡣥磻ʸǤƬ L ʸ
ƥϤ " ʸƥ \", \\ 򤽤줾 ",
\ ֤Τ #pragma ΰȤưޤ
  #pragma ϥԣԤνᤫ齪ޤǤ˽񤫤ʤФʤ餺
ʾʤȤ C90 Ǥϡ˥ޥŸʤΤФơ_Pragma() 
ҤϥΤɤ˽񤤤ƤΩԤ #pragma 񤤤ΤƱ
̤ޥִꥹ˽񤯤ȤǤޥŸη̤Ȥ
줿 _Pragma() operator ͭǤνѤ뤳Ȥǡ
portability ä pragma directive 񤯤ȤǤϤˤ #
pragma ΰ㤤򣱤ĤΥإåեǵۼ뤳ȤǤޤʥץ
ȤƤ "Validation Suite"  pragmas.h, pragmas.t 򻲾ȤΤȡˡ*2

  ʤC99 Ǥ #if ηϤνϤκȤʤäƤޤ
long long / unsigned long long ɬܤȤƤΤǡ#if η long
long / unsigned long long ޤϤʾȤȤˤʤޤ

  *1  GNU C ȤθߴΤǤ롣¾νϤǤ⡢C99 λͤ
    ˼Τ񤷤Τǡ__STDC_VERSION__  199409L Ȥޤ
    λͤƤ椯Ȥͽۤ롣
  *2 C99 Ǥ #pragma ΰ STDC ǻϤޤϥޥŸʤ
    Ǥʤ implementation-defined Ǥ롣MCPP Ǥ system.H
     EXPAND_PRAGMA Ȥޥ TRUE ƥѥ뤵줿
    ΤǤϡ#pragma ΰޥŸоݤȤ롣

    [3.8]       Borland C  asm ʸ¾üʹʸ

  Borland C ˤ asm Ȥɤäơ

    asm {
        mov x,4;
        ...;
    }

Ȥäǥ֥ꥳɤ򵭽Ҥ褦ˤʤäƤޤ #asm
ʾˣøʸˡϤ줿ˤ§ŪʤΤǤˤޤޥ
Ʊ̾ȡϥޥŸƤޤޤBorland C 
ΤǤ MCPP Ǥ⡢ƱǤ֥ץ̤ .ASM 
ǽ񤯤ΤǤ礦
  MCPP ǤϤˡTOP_SPACE Ȥޥ FALSE ƥѥ뤵
줿ǤǤϹƬ white spaces ΤǡΥबޤ
  Visual C++ ˤ __asm ȤƱͤΥɤޤ
  GNU C ˤ asm( " mov x,4\n") ȤޤäȤʷȤ߹ߴؿѰդ
Ƥޤ

    [3.9]       GNU C / cpp Ȥθߴ

  GNU C ˰ܿ줿 mcpp_std ǤϡGNU C / cpp ȤθߴѾ夢ޤ
ؤʤ٤˳ݤƤޤߴ̤¿ޤ
  ޤ¹ԻץˤĤƤϡ[2] ˸褦ˤ㤤ޤ
-A ץϼƤޤ󡣤ޤǥ쥯ƥ֤Ǥϵʰȿ #
assert, #ident ϼƤޤ*
  ʤȤˡΤȤǥѥǤʤȤ
Ϥʤ褦Ǥ
  षºݤȤʤΤϡŤץץåüʻͤ򤢤Ƥˤ
Ǥ¿ GNU C  -pedantic ꤹȥ˥󥰤
ФޤMCPP  mcpp_std ΤΤǤϥ顼å򵬳̤˼Ƥ
Τǡۤ GNU C / cpp  -pedantic ʤ -pedantic-errors ǥե
ȤȤʤäƤޤGNU C / cpp ϥǥեȤǤϤʰȿ
ä̤ᡢ򤢤Ƥˤ˸ޤ
ʤ˹פ褦˽񤯤ΤϤƴñʤȤǡ虜虜ʰȿν
򤹤ɬϲ⤢ޤñ˰ܿ»ʤǡȥХ
βȤʤΤǡĤľƤޤ礦

  * Ϥɬפʤ #pragma Ǽ٤ΤǤ롣
    #include_next, #warning ƱͤǤ뤬GNU C ΥƥǤϼºݤ˻
    ȤƤΤǡMCPP Ǥʤ˥
    оݤˤʤ롣

        [3.9.1]     FreeBSD 2 / kernel Υץץ

  ʲˡFreeBSD 2.2.2-R (1997/05)  kernel 󤲤
ޤǥ쥯ȥ̾Ϥ /sys (/usr/src/sys) ΤΤǤ
Τ 7, 8 ɬ⵬ʰȿǤϤʤMCPP Ǥ̤ν
ޤ֤ʤäʤΤǥ˥󥰤Фޤ6 ϳĥ
ǽǡC99 ǤƱǽѰդƤޤGNU C / cpp Ȥϵˡۤʤ
ޤ

            [3.9.1.1]   Ԥޤʸƥ

  i386/apm/apm.c, i386/isa/npx.c, i386/isa/seagate.c, i386/scsi/aic7xxx.
h, dev/aic7xxx/aic7xxx_asm.c, dev/aic7xxx/symbol.c, gnu/ext2fs/i386-
bitops.h, pc98/pc98/npx.c ˤϤǥ֥饽
Ƥޤ

asm("
    asm code0
#ifdef PC98
    asm code1
#else
    asm code2
#endif
    ...
");

  ʸƥĤ " ޤǤˤʤäϹĤƤ
Ȳ᤹Τ GNU C / cpp ΥǥեȤλͤǤȤäƤ
ΤǤʤ˥ѥΤǤ asm() ΤԤޤʸ
Ȳᤵ餷ˡ
  ֥饽 .s եȤڤΥƤΤɤ
פޤɤƤ .c եߤСʤ֤ʤä
Ȥ򤷤ʤƤ⡢Τ褦ˤФߤޤǤ Standard C
ΥץץåǤꤢޤ

asm(
    "    asm code0\n"
#ifdef PC98
    "    asm code1\n"
#else
    "    asm code2\n"
#endif
    "    ...\n"
);

            [3.9.1.2]   #else junk, #endif junk

  ddb/db_run.c, netatalk/at.h, netatalk/aarp.c, net/if-ethersubr.c, i386
/isa/isa.h, i386/isa/wdreg.h, i386/isa/tw.c, i386/isa/b004.c, i386/isa/
matcd/matcd.c, i386/isa/sound/sound_calls.h, i386/isa/pcvt/pcvt_drv.c,
pci/meteor.c, pc98/pc98/pc98.h ˤϤԤޤ

#endif MACRO

  ϤƤޤ礦

#endif /* MACRO */

            [3.9.1.3]   #ifdef 0

  i386/apm/apm.c ˤϤʤ

#ifdef 0

ȤʹԤޤ
  

#if 0

δְ㤤ǤºݤˤϻȤƤʤǥХå⤵ƤʤʤΤ
礦

            [3.9.1.4]   ޥ

  gnu/i386/isa/dgb.c ǤϼιԤΥإåե̷⤹
ˤʤޤ

#define DEBUG

  Standard C Ǥη̤ undefined ǡºݤˤϽϤˤäơ
顼ˤǽͭȤΤȡGNU C 2 / cpp Τ褦ۤ
ƤȤͭȤΤȤޤμ¤ˤȤͭˤˤϡ
ľ

#undef DEBUG

٤Ǥ

            [3.9.1.5]   #warning

  i386/isa/if_ze.c, i386/isa/if_zp.c ˤ #warning ޤKernel 
ͣεʰȿǥ쥯ƥ֤ǤStandard C ˹碌뤿ˤϡ
ιԤ򥳥ȥȤ뤷ޤ
  MCPP V.2.3 ʹߤǤ #warning ȤΤǡΤޤ̤ޤ

            [3.9.1.6]   Ѱޥ

  gnu/ext2fs/ext2_fs.h, i386/isa/mcd.c ˤϼΤ褦ʲѸİΥޥ
Ƥޤ

#define MCD_TRACE(fmt, a...)                \
{                                           \
    if (mcd_data[unit].debug) {             \
        printf("mcd%d: status=0x%02x: ",    \
            unit, mcd_data[unit].status);   \
        printf(fmt, ## a);                  \
    }                                       \
}

#   define ext2_debug(fmt, a...)    { \
                    printf ("EXT2-fs DEBUG (%s, %d): %s:", \
                        __FILE__, __LINE__, __FUNCTION__); \
                    printf (fmt, ## a); \
                    }

   GNU C / cpp ȼγĥͤǡ¾νϤǤѤޤ󡣤
## a ΤȤñ a Ȥ⤢ޤ## ȡޥƤӽ
 a... бʤäϡľΥޤޤ
  C99 ǤϲѸİޥɲäƤޤˡۤʤꡢ
ϼΤ褦˽񤯤Ȥˤʤޤ

#define MCD_TRACE( ...)                     \
{                                           \
    if (mcd_data[unit].debug) {             \
        printf("mcd%d: status=0x%02x: ",    \
            unit, mcd_data[unit].status);   \
        printf( __VA_ARGS__);               \
    }                                       \
}

#   define ext2_debug( ...)         { \
                    printf ("EXT2-fs DEBUG (%s, %d): %s:", \
                        __FILE__, __LINE__, __FUNCTION__); \
                    printf ( __VA_ARGS__); \
                    }

  C99 Ǥ ... бƤӽФΰϣİʾɬפʤΤФơGNU
C / cpp Ǥ a... бϣĤǤ⤫ޤʤȤΤä
ǤMCPP V.2.3 ʹߤǤϤн褹뤿ᡢ ... б
Ĥʤϡwarning ϽФΤΥ顼ˤϤʤ褦ˤƤޤ
äơΤ褦ʽǤޤΤۤ񤭴ϰаб
ǤΤǡñǤνǤϡľΥޤ
ΤǡȤ printf( fmt, ) ȤŸ̤ˤʤäƤޤȤ
ޤξϡޥ嵭 C99 ͤνˤ뤫ޤϥ
ƤӽФǥȤʤ褦ˤ뤷ޤ󡣥
ˤ NULL  0 Τ褦̵ʥȡȤäơMCD_TRACE( fmt, NULL)
Ƚ񤯤Ȥˤʤޤ*

#define MCD_TRACE(fmt, ...)                 \
{                                           \
    if (mcd_data[unit].debug) {             \
        printf("mcd%d: status=0x%02x: ",    \
            unit, mcd_data[unit].status);   \
        printf(fmt, __VA_ARGS__);           \
    }                                       \
}

#   define ext2_debug(fmt, ...)         {   \
                    printf ("EXT2-fs DEBUG (%s, %d): %s:", \
                        __FILE__, __LINE__, __FUNCTION__); \
                    printf (fmt, __VA_ARGS__);  \
                    }

  * MCPP ȤˤϤη˥񤭴ɬפ롣 -Q 
    դС̤Υ˥󥰤̤ǤϤʤ mcpp.err Ȥ
    ˽Ϥ롣
    GNU C 2.95.3 ʹߤǤ C99 ιʸβѰޥƤ롣
    ϤȤۤɤGNU βѰޥϰĤǤ
    Ȥ뤬εˡɤʤargs... Ȥѥ᡼
    Ǥ args  ... ȤϤäĤƤʤФʤʤ pp-
    token ¸ߤʤִꥹȤǲѰ򼨤Τ˥ȡϢ黻
    ƱˡȤäƤΤ⡢ʤC99 εˡǡĤβѰ
    ƤȤͤǤ
    ʤGNU C 3 ǤϲѰޥˤĤơGNU C 2 λͤ C99
    λͤȤŪʽɲä줿ˤĤƤ [3.9.6.3] 
    ȤΤȡ

            [3.9.1.7]   ޥƤӽФΥ

  nfs/nfs.h, nfs/nfsmount.h, nfs/nfsmode.h,  netinet/if_ether.c, netinet
/in.c, sys/proc.h, sys/socketvars.h, i386/scsi/aic7xxx.h, i386/include/
pmap.h, dev/aic7xxx/scan.l, dev/aic7xxx/aic7xxx_asm.c, kern/vfs_cache.c,
pci/wd82371.c, vm/vm_object.h, vm/device/pager.c ˤϤޥƤ
Фޤ/usr/include/nfs/nfs.h ǤƱͤǤ

    LIST_HEAD(, arg2)
    TAILQ_HEAD(, arg2)
    CIRCLEQ_HEAD(, arg2)
    SLIST_HEAD(, arg2)
    STAILQ_HAED(, arg2)

  ʤΤǤ C99 ǤϸǧޤC90 Ǥ
undefined ǤͥȤ줿ޥƤӽФǤޤްˤʤä
ΤͤȡꤵƤۤɤȸޤ
˥񤯤ȤˤϤξɬʤޤ
ĤΥޥǤϥȰηȤζ̤ĤʤȤ
syntax Τޤ뤳Ȥ⡢˺ƤϤʤޤ
  񤯤ۤɤǤ礦Ǥ Standard C ΤɤΥץץ
åǤꤢޤ

#define EMPTY

    LIST_HEAD(EMPTY, arg2)
    TAILQ_HEAD(EMPTY, arg2)
    CIRCLEQ_HEAD(EMPTY, arg2)
    SLIST_HEAD(EMPTY, arg2)
    STAILQ_HAED(EMPTY, arg2)

  ȤǡΥإåեˤϡΥޥʤ
¾ΤɤΥإå #include ƤʤȤΤޤnfs ǥ
ȥΤΡˡΥޥ sys/queue.h ˤꡢ*.c ץ
ब #include 뤳ȤԤƤΤǤ֤ʤä
ΥإåǤ

  ʤkern/kern_mib.c ˤϼΤ褦ʥޥƤӽФޤ

    SYSCTL_NODE(, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)

  Υ EMPTY Ȥ櫓ˤϤޤ󡣤Υޥ
 sys/sysctl.h ˤꡢΤ褦ˤʤäƤ뤫Ǥ

#define SYSCTL_NODE(parent, nbr, name, access, handler, descr)
    extern struct linker_set sysctl_##parent##_##name;
    SYSCTL_OID(parent, nbr, name, CTLTYPE_NODE|access,
        (void*)&sysctl_##parent##_##name, 0, handler, "N", descr);
    TEXT_SET(sysctl_##parent##_##name, sysctl__##parent##_##name);

ʤΰϥޥŸʤΤǤʤˤ
SYSCTL_OLD ȤޥǤ⡢ϤϥޥŸʤˡ
ϥΤޤޤˤƤޤ*

  * C99 ǤϥϹˡȤƤ롣ޤ SYSCTL_NODE(),
    SYSCTL_OID() Τ褦ʥޥΤȤͤȡEMPTY Ȥޥ
    ˡǽǤϤʤΤǡΤޤޤˤƤΤ뤳Ȥ
    롣EMPTY ȤäƤ⡢ޥƤӽФͥȤƤȡϤꥫ
    ȯƤޤȤ⤢롣 readability
    ͤȡEMPTY ȤȤǤϻȤäۤɤ褦˻פ롣

            [3.9.1.8]   Function-like ޥִ̾
                            object-like ޥ

  i386/include/endian.h ˤϤޥޤ/usr/include/
machine/endian.h ǤƱͤǤƱĤˡ

#define __byte_swap_long(x)     (replacement text)
#define NTOHL(x)                (x) = ntohl((u_long)x)
#define ntohl                   __byte_swap_long

   ntohl Ǥ object-like ޥǤʤ
function-like ޥ̾Ÿ졢Τ³ƥȤ򴬤
ߡ function-like ޥΤ褦ŸޤŸˡ
K&R 1st. ΰۤλͤǡStandard C ǤϤʤˡȤʤäΤǤ
䤬̤ΤȤƤ褦ˡλͤޥŸ̵
ʣˤʽˤޤǺ⤿餷Ƥ븵Ǥꡢ֥ХΤ褦ʻ
͡פʤΤǤ*
  ϼ֤ function-like ޥǤΤά object-like 
Ȥƽ񤤤ƤΤǤfunction-like ޥ餷Τ褦˽
ۤɤǤ礦Ǥв⤢ޤ

#define ntohl(x)                __byte_swap_long(x)

  i386/isa/sound/os.h ˤƱΥޥޤ

#define INB                     inb
#define INW                     inb

  ϤƤޤ礦

#define INB(x)                  inb(x)
#define INW(x)                  inb(x)

  * ISO 9899:1990  Corrigendum 1:1994 ǤϤ undefined Ȥ
    줿ơC99 Ǥ Corrigendum Τι̤ΤΤ֤
    ʽϤ˴ؤƤϺ𤷤Ƥ롣ܺ٤ cpp-test.txt
     [1.7.6] 򻲾ȡ

            [3.9.1.9]  .S եΡ֥ץץ

  Kernel ˤϲܤ .S ե롢ʤ֥饽
ޤȤˤ #include  #ifdef äơ֥ץץפ
ɬפʤΤǤFreeBSD 2.2.2-R ǤϤΥ cc  -x assembler-
with-cpp ץդƸƤӽФȤˡǽƤޤ
 cc  /usr/libexec/cpp  -lang-asm ץĤƸƤӽФ
 as ƤӽФޤ
   .S եϤ󵬳ʳ§Ǥ줬տ̤
֥ץץפ뤿ˤϡޥȤޤްפ̾פ
֥饽˴ޤޤƤƤϤޤ󡣤ơ֥ץץפǤϡ֥
״֤ white space ̵ͭϤΤޤ¸ʤФʤ餺Ƭ
space ¸ʤФʤޤ󡣹ԤκǽΡ֥ȡפ
֥ΥȤǤ # Ǥϥץץå¦üʽ
ɬפǤȤץץåʤ¤졢Хκˤ;פʿ
ȤʤФʤʤΤǡ褷ɤȤȤϻפޤ*
  ʣΥޥбΤ˥ץץɬפΤǤС
.S եǤϤʤ .c եȤơηǽ񤯤ΤɤǤ礦4.
4BSD-Lite ǤϼºݤˤνˤʤäƤޤ

asm(
    "    asm code0\n"
#ifdef Machine_A
    "    asm code1\n"
#else
    "    asm code2\n"
#endif
    "    ...\n"
);

  * FreeBSD 2.0-R ǤϤΥե̾ *.S ǤϤʤ *.s ȤʤäƤơ
    Makefile ǤϤνˤ cc ǤϤʤ cpp ƤӽФơ as 
    ӽФ褦ˤʤäƤơcpp ƤӽФ /usr/bin/cpp ư
     shell-script ǡ/usr/libexec/cpp -traditional ƤӽФ
    Τۤscript 񤭴뤳ȤǻȤץץåѤ뤳
    ǤΤǡǤä

        [3.9.2]     FreeBSD 2 / libc Υץץ

  FreeBSD 2.2.2R  /usr/src/lib/libc ꥳѥ뤷Ƥߤޤ
äϤޤǤȾ 4.4BSD-Lite 餽ΤޤƤ
뤫Ǥ礦εϤǤ줤ʥäƤΤ
Ȥǡɮͤޤ
  Ľꡢgen/getgrent.c ˼Τ褦ʹԤĤޤ
 ; ;פǤ

#endif;

        [3.9.3]     GNU C 2 / cpp λͤ

  ơʾ˸褦ˡΥ򵬳ʤ˹פܿι
ʥǽ񤯤ȤˤϡݤǥåȤ⤢ޤ
ˤ⤫餺ʤޤ˽񤫤ƤΤǤ礦
  FreeBSD 2.0-R  2.2.2-R  kernel ٤Ƥ⡢μΤΤϤ
ޤ긺äƤޤ󡣿ۤɵʹ⤯ʤäƤȤϸ¤ʤȤ
ʤΤǤμΤ䤷ʥΥ 4.4BSD-Lite 
¸ߤƤΤϤ鷺Ǥ4.4BSD  Standard C  POSIX ˽򤷤ƽ
ľ줿Ǥ礦ȤFreeBSD ؤμǰΥˤ
Ť뤬褷ƤޤäΤǤ嵭 ntohl Τ褦 4.4BSD-
Lite Ǥ ntohl(x) ηˤʤäƤΤ FreeBSD ǤϤ虜虜 ntohl 
˽ؤƤΤޤäݤ줿Τʤ
褹ΤǤ礦
  ϤˤϡGNU C / cpp ۤä̤ƤޤȤΰƶ
ƤȻפޤ-pedantic ưǥեȤǤС
Υ虜虜ֿ׽񤫤뤳ȤϤʤäǤ礦ĤƤ
-pedantic-errors ǥեȤˤΤǤϥѥǤʤ¿
ơŪǤϤʤäΤ⤷ޤgcc  man page ˤ -pedantic
ץˤĤơ֤ȤͳϲʤΥץ¸ͳ
 pedants ­뤳ȤǤפȤޤ(*) Standard C
ޤäƣǯ⤿ĤޤȤʤäƤϡ-pedantic-errors ȤޤǤϤʤ
 -pedantic ǥեȤˤ٤ƤȻפޤ
  FreeBSD 2.0-R ǤϥȤΥͥȤޤ2.2.2-R Ǥϰ
ݤƤޤݤ줿ΤϡGNU C / cpp ǧʤʤäǤ
 -pedantic Ȥϴطޤ󤬡ץץåΥåΰ
ϤϤۤ礭ΤǤ

  *  [3.9.3] 񤫤줿Τ 1998 ΤȤǤ롣θ塢gcc  man 
    info ǤϡˤɽϺ줿ͤäѤä
    櫓ǤϤʤ

        [3.9.4]     Linux / glibc 2.1 Υץץ

  Vine Linux 2.1 (i386) ǻȤƤ glibc 2.1.3 (2000/09) Υ
ꥳѥ뤷Ƥߤޤˤ FreeBSD  libc ȤϰäƤʤ¿
꤬ޤˤ GNU C / cpp  undocumented ʻͤѤƤ
ΤꡢλͤͤߤǤʤλ֤䤷Ƥޤä
Ȥ󤫤ޤ

            [3.9.4.1]   Ԥޤʸƥ

  sysdeps/i386/dl-machine.h, stdlib/longlong.h ˤ

#define MACRO asm("
    instr 0
    instr 1
    instr 2
")

ȤäιԤޤʸƥ뤬Ĥ⤢ޤˤϤʤĹ
ʤΤ⤢ޤ
  ޤmake ˤä compile/csu/version-info.h ˤԤޤ
ʸƥ뤬ޤ
  Ϥ󵬳ʰȿΥǤGNU C ǤϤԥɤ
ʸƥȤưޤ
  MCPP V.2.3 ʹߤǤ -lang-asm (-x assembler-with-cpp, -a) ץ
ꤹȡԤޤʸƥ

#define MACRO asm("\n    instr 0\n    instr 1\n    instr 2\n")

ȤѴƽޤ[3.9.1]  1. Τ褦˥ǥ쥯ƥ
ΤϤޤäƤΤϡǤбǤľʤˡ

            [3.9.4.2]   #include_next, #warning

  catgets/config.h, db2/config.h, include/fpu_control.h, include/limits.
h, include/bits/ipc.h, include/sys/sysinfo.h, locale/programs/config.h,
sysdeps/unix/sysv/linux/a.out.h ˤ #include_next ޤ
  ޤsysvipc/sys/ipc.h ˤ #warning ޤ
  ϵʤǤǧƤʤǥ쥯ƥ֤Ǥglibc 2 Υ
ǤϤȤ #include_next ԲķΤΤȤʤäƤޤäƤΤǡMCPP
V.2.3 ʹߤǤ GNU C ѤǤ #include_next  #warning ϼƤޤ
  #include_next ϵʰȿȤȤǤϤޤInclude
directories ȤΥϴĶѿΥ桼¦ˤäѤ
ΤǡˤäƷ̤äƤޤ
  Glibc  include ǥ쥯ȥΥեˤϡglibc  install 
/usr/include ǥ쥯ȥ˥ԡΤ⤢ޤʤ
ΥإåեȤƻȤΤʤΤǤإåե
#include_next ȤƤ뤳ȤϡƥإåʤĤϤ֤
ʤäƤƤ뤳ȤɽƤޤɬפʻˤƤ褦Ǥ

            [3.9.4.3]   Ѱޥ

  elf/dl-lookup.c, elf/dl-version.c, elf/ldsodefs.h, glibc-compat/nss_db
/db-XXX.c, glibc-compat/nss_files/files-XXX.c, linuxthreads/internals.h,
locale/loadlocale.c, locale/programs/linereader.h, locale/programs/
locale.c, nss/nss_db/db-XXX.c, nss/nss_files/files-XXX.c, sysdeps/unix/
sysdep.h, sysdeps/unix/sysv/linux/i386/sysdep.h, sysdeps/i386/fpu/bits/
mathinline.h

  ʾΥեˤ GNU C / cpp λͤβѸİޥȸƤӽ
ޤ
   C99 λͤȰۤʤäƤΤǡMCPP Ǥϥľɬפ
ޤ

            [3.9.4.4]   ޥƤӽФΥ

  catgets/catgetsinfo.h, elf/dl-open.c, grp/fgetgrent_r.c, libio/
clearerr_u.c, libio/rewind.c, libio/clearerr.c, libio/iosetbuffer.c,
locale/programs/ld-ctype.c, locale/setlocale.c, login/getutent_r.c,
malloc/thread-m.h, math/bits/mathcalls.h, misc/efgcvt_r.c, nss/nss_files
/files-rpc.c, nss/nss_files/files-network.c, nss/nss_files/files-hosts.c,
nss/nss_files/files-proto.c, pwd/fgetpwent_r.c, shadow/sgetspent_r.c,
sysdeps/unix/sysv/linux/bits/sigset.h, sysdeps/unix/dirstream.h

  ʾΥեˤϥޥƤӽФΥޤȤ math/bits
/mathcalls.h ˤϥ 79 Ĥ⤢ޤΥإåե /usr/
include/bits/mathcalls.h  install ơ/usr/include/math.h  #
include ΤǤEMPTY ȤޥȤäƤ⡢ޥƤӽФ
ȤƤΤǡϤ̤ΥȯޤäȤ줤ʥޥ
νϤǤʤΤǤ礦

            [3.9.4.5]  Function-like ޥִ̾
                           object-like ޥ

  argp/argp-fmtstream.h, ctype/ctype.h, elf/sprof.c, elf/dl-runtime.c,
elf/do-rel.h, elf/do-lookup.h, elf/dl-addr.c, io/ftw.c, io/ftw64.c, io/
sys/stat.h, locale/programs/ld-ctype.c, malloc/mcheck.c, math/test-*.c,
nss/nss_files/files-*.c, posix/regex.c, posix/getopt.c, stdlib/gmp-impl.
h, string/bits/string2.h, string/strcoll.c, sysdeps/i386/i486/bits/
string.h, sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.
h

  ʾΥեˤ function-like ޥִ̾ object-like
ޥޤˤϡmath/test-*.c Τ褦ˡfunction-like 
 object-like ޥִơˤ줬 function-like ޥ
ִ̾Τ⤢ޤ򤹤ɬΤǤ
礦

            [3.9.4.6]   'defined' Ÿޥ

  sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h,
malloc/malloc.c ˤϡ㤨мΤ褦 defined Ȥ pp-token Ÿ
ޥޤ

#define HAVE_MREMAP defined(__linux__) && !defined(__arm__)

  ϡ

#if HAVE_MREMAP

Ȥǥ쥯ƥ֤

#if defined(__linux__) && !defined(__arm__)

Ȥʤ뤳ȤԤƤΤǤ
  ޤ #if ǥޥŸη̤ defined Ȥ pp-token 
ƤΤϡʤǤ undefined ǤΤȤ̤ȤƤ⡢ʤΥޥ
ѤǤ
  HAVE_MREMAP ȤޥϤä

defined(__linux__) && !defined(__arm__)         (1)

ִ졢 identifier Ǥ defined, __linux__, __arm__ 줾
ޥǤ뤫ɤĴ٤졢ޥǤŸޤäơ
defined ϥޥȤƤϤϤʤΤǡʤ⤷ƤС
켫ΤǤ undefinedˡ __linux__  1 Ƥơ
__arm__ ƤʤСΥޥϺǽŪ˼Τ褦Ÿ


defined(1) && !defined(__arm__)

  defined(1) Ϥ #if  syntax error Ǥ
  Ȥ GNU C / cpp Ǥϡ#if ԤǤʤФʤΤǤ#if Ԥ
¤ä (1) ǥޥŸƤޤ #if Ȥɾޤ
Undefined ǤΤǤְ㤤Ȥϸޤ󤬡ޥŸ #if Ԥ
ǤʤȤǰۤʤΤϡӤʤͤǤʤȤ⤽λͤˤ
portability ޤ*
  ΥޥϼΤ褦˽񤱤СʤΤǤ

#if defined(__linux__) && !defined(__arm__)
#define HAVE_MREMAP 1
#endif

  ʤä᤯ݤƤۤΤǤ

  *1 GNU C 2 / cpp  #if ԤǤŪ defined üʥޥȤư
    äƤ롣ΤᡢΤ褦ʥȡޥŸΤ˺
    ΤǤ뤬η̤ޥŸˡ#if Ȥɾ
    ȤˤʤΤǤ롣ʤޥŸ #if ɾȤʬΥ
    ˺򤷤ƤΤǤ롣

    defined(__linux__) && !defined(__arm__)

     GNU C / cpp Υץ๽¤ˤ⤫Ǥ롣GNU C 2 /
    cpp Ǥ rescan() Ȥޥ롼󤬻¾Υᥤ롼
    ȤʤäƤơ줬ƥȤᤫ齪ޤɤߤʤ
    Ƥ椯ơץץǥ쥯ƥ֤ν롼⤳椫
    ƤӽФΤǤ롣ǤޥǼΤϥޥץå
    Ūʥץ๽¤Ǥ뤬ι¤ޥŸ¾νȤ
    طʤˤʤäƤȹͤ롣

            [3.9.4.7]  .S եΡ֥ץץ

  *.S Ȥ̾Υեϥץץפ륢֥ΥǤ
ˤ #include, #define, #if Υץץǥ쥯ƥ֤ФƤ
ޤˡMake ˤä compile/csu/crti.S Ȥե
ˤϡ

#APP

Ȥ

#NO_APP

ȤԤޤǸޤιԤ̵ʥץץǥ쥯ƥ֤ȹʸ
塢̤ĤޤGNU ǤϤιԤϤΤޤޥץץ˻Ĥäơ
֥ΥȤȤư褦Ǥ
  ޤ## 黻Ҥˤ pp-token Ϣ뤬 invalid  pp-token 
ޤ⤢ޤGNU C / cpp ϤۤäƤΤޤ޽Ϥޤ
  MCPP V.2.3 Ǥ GNU C / cpp ȤθߴΤˤʤ-lang-asm (-x
assembler-with-cpp, -a) ץդȡ illegal ʥǥ
ƥ֤ ## ˤä줿 invalid  pp-token 򥨥顼ˤ
˥󥰤ФΤΤΤޤ޽Ϥ褦ˤޤ
  衢֥ѤΥޥץåǽ٤Τ
ȻפޤGNU ˤ gasp Ȥ֥ѥޥץå褦
ǤʤۤȤɻȤƤʤ褦Ǥ

            [3.9.4.8]  rpcgen  -dM ץλͤ

  GNU C / cpp  -dM ȤץǵưȥޥϤ
ޤmake check ǻȤ stdlib/isomac.c ϤѤƤޤ
isomac.c ϡޥեηȤ GNU C / cpp νϷ
ꤷƤơȤԤ⥨顼ˤʤäƤޤȤǤ*
  glibc  make Ǥ rpcgen ȤץबȤ뤳Ȥޤ
ΥץϡץץåιֹνϷȤƤϤ
GNU C / cpp 

#123 "filename"

ȤꤷƤơ

#line 123



#line 123 "filename"

⥨顼ˤʤäƤޤȤǤ
  MCPP Ǥ V.2.3 顢GNU C ǤǤ GNU C / cpp ηǥեȤˤ
ޤrpcgen üʷˤơɸŪʷ
бƤʤȤΤϡʻͤǤ

  * MCPP V.2.5 Ǥ -d* ץνϤ GNU C ƱեޥåȤ
    

            [3.9.4.9]  -include, -isystem, -I- ץ

  glibc 2  makefile Ǥϡ-include ץ󤬤ФлȤƤޤ
ˤ -isystem ץ -I- ץȤޤ-include ϥ
Ƭ #include ФΤǡ-isystem, -I- ϥƥإå
礷ɬδʤΤǤ
  MCPP V.2.3 Ǥ GNU C Ѥμ˸¤äơΣĤΥץ
ޤɬפΤʤץƤ餤ΤǤ*

  *2 GNU C / cpp ˤϤΤۤ -iprefix, -iwithprefix,
    -iwithprefixbefore, -idirafter Ȥä include directory Ȥν
    ꤹ륪ץ󤬤Ĥ⤢롣ޤlong-file-name  MS-DOS
     8+3 Υե̾ȤбɽλѤꤹ -remap ץ
    ⤢롣 CygWIN ƥ specs եǻȤ뤳
    뤬include directory ϴĶѿǻꤷƤФळȤǤꡢ
    8+3 Υե̾ؤбޤ CygWIN ɬפȤפʤ

            [3.9.4.10]  Undocumented ʻޥ

  __VERSION__, __SIZE_TYPE__, __PTRDIFF_TYPE__, __WCHAR_TYPE__

  ʾ̾ϥɥȤˤϸޤ󤬡GNU C / cpp Ǥϻ
ޥȤʤäƤޤ__VERSION__ ͤ Vine Linux 2.1 (egcs-1.1.2) 
 "egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)" ȤʤäƤޤ¾
ΣĤ Linux / i386 Ϥ¿ΥƥǤϤ줾 unsigned int,
int, long int ȤʤäƤ褦ǤFreeBSD, CygWIN ǤϾ
äƤޤʤʤ㤦ɬפΤ狼ʤˡ
  ȤɤƥɥȤˤʤΤǤ礦
  __VERSION__ ͤ GNU C / cpp ǤϤ켫ȤΥꤵƤ
MCPP Ǥ GCC_VERSION ȤĶѿǻꤹ褦ˤޤ*

  * GNU C V.3 ˤĤƤ MCPP V.2.5 ʹߤǤ configure ꤵΤǡ
    Ķѿɬפʤ

            [3.9.4.11]  Undocumented ʴĶѿ

  äȤʤΤ SUNPRO_DEPENDENCIES Ȥ undocumented ʴĶѿ
Ǥsysdeps/unix/sysv/linux/Makefile ˤ

    SUNPRO_DEPENDENCIES='$(@:.h=.d)-t $@' \
    $(CC) -E -x c $(sysinclude) $< -D_LIBC -dM | \
    ... \
    etc.

Ȥ script ޤ SUNPRO_DEPENDENCIES ȤĶѿǥ
̾ꤷcpp Υޥȥեΰ¸ط
򤽤λꤵ줿ե˽ϤȤΤʤΤǤ
  ư򤹤ˤϡGNU C / cpp Υ (egcs-1.1.2/gcc/cccp.c)
ɤषޤǤ
  ΤۤDEPENDENCIES_OUTPUT ȤĶѿ⤢ꡢƱͤΰ̣ä
ޤSUNPRO_DEPENDENCIES Τۤ system headers ΰ¸طԤϤ
ΤФơDEPENDENCIES_OUTPUT ϤǤϤʤȤ㤤ޤ
  MCPP V.2.3 ʹߤǤ GNU C бǤ˸¤äơΣĤδĶѿб
ޤ΢͡פΤ褦ʤΤ᤯ѻߤƤۤΤǤ

            [3.9.4.12]  ¾

  Linux (i386) / GNU C ǤϤΤۤspecs եλˤäơcpp
θƤӽФ -Asystem(unix) -Acpu(i386) -Amachine(i386) Ȥץ
ղäޤѤ륽ϾʤȤ glibc 2.1.3 
Linux / x86 ǤˤϤʤ褦Ǥ
  Glibc 饤󥹥ȡ뤵륷ƥإåĤϤ餱ʣ
ʤΤˤʤäƤƤ뤳Ȥϡ礭ǤäȤΰ㤤ˤ
äƽ̤äƤ붲줬ޤ
  ¾ǡFreeBSD 2.2.2 / kernel Ǹ줿 #else junk, #endif
junk ޥ glibc 2.1.3 ǤϸޤǤGlibc 2 
 FreeBSD 2 / kernel ΥƤ̤⤤餫

  ΤȤƤϡglibc 2 ˤ GNU C üʻͤ˰¸Ƥ륽
ʤ餺ꡢ¾νϤؤΰܿϺˤʤäƤޤʿܤΥ
եǤϤǤ뤬ˡץβƥʥ
ˤ⡢ GNU C local ʻͤؤΰ¸ϹޤޤGNU C
V.3 ǤϤ΢Ūͤѻߤ˰¸륽ݤ뤳Ȥ
ԤȻפޤ

        [3.9.5]     GNU C 2  MCPP Ȥˤ

  MCPP V.2.3 ʹߤ glibc 2 Υѥ˻ȤˤϡޤΥν
ɬפǤ
  ĤϲѸİΥޥȸƤӽФǤ嵭 [3.9.4.3] ˤ 14
ĤΥեˤĤơ[3.9.1.6] ˤ褦ʷǽޤ󡢸
Υե *.orig Ȥä̾ǻĤƤۤɤǤ礦
  ⤦Ĥϡ[3.9.4.6] ˤ룳ĤΥեΡִꥹȤ "defined"
ФƤޥνǤޤ/usr/include/_G_config.h  sysdeps/
unix/sysv/linux/_G_config.h  install ƤǤƱΥեǤ
⽤ƤۤɤǤ礦

  MCPP εưˤϡMakefile  specs եղä륪ץΤ
ˡԤޤʸƥ䥢֥ѤΥȤޤ *.S ե
Τ -lang-asm (-x assembler-with-cpp) ɬפǤΥץ
¾ΥեΥץץˤդƤơ̾Ϥޤޤ
  GNU C / cpp Ȥä MCPP ȤäꡢǥեȤղä륪ץ
ѹꤹ뤿ˤϡΤ褦ˤΤɤǤ礦
  Super-user ˤʤäơcpp ¸ߤǥ쥯ȥVine Linux 2.1 Ǥ
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66ˤ˹Ԥޤ GNU
C / cpp  cpp Ȥ̾¸ߤMCPP  cpp_std Ȥ̾ install
ƤȤޤޤΤ褦Ƥ mcpp.sh Ȥ̾Υե
ޤ*1, *2, *3

    #!/bin/sh
    /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/mcpp_std \
        -v -Q -lang-asm "$@"

  -v, -Q ץϤʤƤ⤫ޤޤ󤬡̤οǥåϿ
ˤ -Q դۤɤMCPP εưǧ뤿ˤ -v դ
ۤɤǤ礦Ʊͤˡgcc  shell-script  -v դƸƤӽ
褦ˤȤ狼䤹ˡ
  ˡΤ褦ʥޥɤǤߤޤ

    chmod a+x mcpp.sh
    mv cpp cpp_gnuc
    ln -sf mcpp.sh cpp

  Ƥȡgcc  cpp ƤӽФˡ˥󥯤Ƥ
mcpp.sh ¹Ԥ졢mcpp_std ˾嵭Υץgcc ղä륪ץ
ˡղäƸƤӽФޤ
  ǥեȤΥץѹϡmcpp.sh ѹʤꡢmcpp_std
ľܸƤӽФʤꤷޤơGNU C / cpp Ȥ

    ln -sf cpp_gnuc cpp

Ȥޤ
   MCPP 󥯤äѤʤˤƤȡȯ뤳Ȥ
ޤƼΥץˤ -traditional ץĤ cpp 
ƤӽФΤ뤫ǤMCPP ϡSTANDARD ⡼ɤǤϡ-traditional
ϼƤޤ󡣤ǡmcpp.sh ơΤ褦
-traditional ꤵ줿 GNU C / cpp 򡢤Ǥʤ MCPP ȡ
ưŪ򤵤褦ˤƤΤɤǤ礦*4

#!/bin/sh
for i in $@
do
    case $i in
        "-traditional*")
            /usr/lib/gcc-lib/i386-redhat-linux/2.91.66/cpp_gnuc "$@"
            exit
            ;;
    esac
done
/usr/lib/gcc-lib/i386-redhat-linux/2.91.66/mcpp_std -Q -lang-asm "$@"

  MCPP ȤΤ⤦Ĥϡ̤Υ˥󥰤Ϥ뤳
Ǥ-Q ץǥ쥯ȤƤ⡢glibc Τ褦絬Ϥʥ
ȡ-W3 ץξ mcpp.err ׿ɴ MB ˤʤΤǡ
٤Ƥܤ̤櫓ˤϤޤ
  Ƥ򸫤ȡƱ˥󥰤֤ФƤ뤳Ȥ狼
ޤƱ *.h ե뤬¿Υ #include 뤿ˡƱ
˥󥰤֤֤ФΤǤƸˤϡΤ
ˤޤ
  ޤ顼åޤ

    grep fatal `find . -name mcpp.err`
    grep error `find . -name mcpp.err`

  ˡ˥󥰤ޤ

    grep warning `find . -name mcpp.err` | sort -k4 -u | less

  ˥󥰤νн򤹤٤Ƹ뤿ˤϡΤ褦ˤޤ

    grep warning `find . -name mcpp.err` | sort -k4 | uniq | less

  μΥ˥󥰤򸫤ˤϡȤмΤ褦ˤޤ

    grep 'warning: Replacement' `find . -name mcpp.err` | sort -k4   \
        | uniq | less

  ƸĤǡ mcpp.err  less ǸƤǧ
ɬפʤ饽򸫤ޤ
  ɬפʤ顢θĽ #pragma MCPP debug expand, #
pragma MCPP end_debug ǶǺ٥ץץơνϤ򸫤ޤ
λˤϡץץνϤȿǥåȤƱե˽Ф褦
ˡΤ褦ˤޤmake ϡ嵭 shell-script 񤭴
ˡ

    mcpp_std <-opts> in-file.c > in-file.i 2>&1

  *1 VineLinux 2.5 / GNU C 2.95.3 Ǥϡ/usr/lib/gcc-lib/i386-redhat-
    linux/2.95.3 ǥ쥯ȥ cpp Τۤ cpp0 Ȥե뤬롣
    ơcpp  cpp0 ؤΥ󥯤ȤʤäƤ롣ʤץץå
    μΤ cpp0 Ǥ롣Gcc ľ cpp0 ƤӽФCpp1, cpp2 
    ѰդȤȤǤ  Ȥ⤫ξϾ嵭 mv,
    ln ΥޥɤǤ cpp  cpp0 Ȥɬפ롣
    FreeBSD 4.4 / GNU C 2.95.3 Ǥ /usr/libexec  cpp  cpp0 롣
  *2 VineLinux 2.5 / GNU C 2.95.3 ǤϤΤۤˤ⼡Τ褦ʤĤ
    cpp ꡢ줾줬¾ cpp ؤΥ󥯤ˤʤäƤ롣ơǸ
     /usr/bin/cpp-2.95.3 ϥ󥯤ǤϤʤ¹ԥץǤ뤬
    ϲ /usr/lib/gcc-lib/i386-redhat-linux/2.95.3/cpp0 ƤӽФΤ
    롣䤳ȤǤ롣ɤƤʤȤˤʤäƤޤäΤǤ
    
        /lib/cpp -> /etc/alternatives/libcpp
        /etc/alternatives/libcpp -> /usr/bin/cpp-2.95.3
        /etc/alternatives/cpp -> /usr/bin/cpp-2.95.3
        /usr/bin/cpp -> /etc/alternatives/cpp
        /usr/bin/cpp-2.95.3
  *3 θڥåȤ GNU C / testsuite  MCPP ŬѤϡץ
     -23j ȤƤʤФʤʤdigraph, trigraph ͭˤ
    ǥå˥ղþϤʤ GNU C ˶ᤤ
    뤿Ǥ롣¾ΥץϤ shell-script ǤϻꤷƤϤ
    ʤڥåȤ GNU C / testsuite ǻȤȤˤĤƤϡcpp-test.
    txt [2.2.3] 򻲾ȤΤȡ
  *4  VineLinux 2.1 / GNU C 2.91.66 ѤΤΤǤ롣FreeBSD,
    CygWIN  Linux ¾ΥСǤϡcpp Τǥ쥯ȥ
    cpp ̾cpp  cpp0 ˤ񤭴ɤ
    ޤGNU C 3.2 Ǥ tradcpp0 Ȥ traditional ⡼ɤΥץץ
    åΩƤꡢgcc  -traditional ץդȤ줬
    ӽФ롣äơGNU C 3.2 ǤϤ shell-script ɬפʤ

        [3.9.6]     GNU C 3.2 Υץץ

  Linux  FreeBSD ǡGNU C 2.95.*  GNU C 3.2R (2002/08) Υ
򥳥ѥ뤷Ƥߤޤơ줿 gcc Ȥä MCPP 򥳥
뤷˥ץץˤȤä GNU C 3.2  GNU C 3.2 Υ
ꥳѥ뤷Ƥߤޤ
  GNU C  make ϤĤʳФ bootstrap Ƥ椯褦ˤʤä
ޤʤǽʳ줿 gcc, cc1, etc. ȤäƼʬ
ꥳѥ뤷äƺ줿ΤȤäƤޤʬȤꥳ
ѥ뤷Ȥäв򤿤ɤޤgcc  bootstrap Ǥ xgcc 
̾¸ߤƤޤ
  ޤGNU C 2 Ǥ cc1, cc1plus ΩƤ cpp GNU C 3 
 cc1, cc1plus ˵ۼƤޤޤΩ cpp (cpp0) 
¸ߤƤꡢgcc  g++  -no-integrated-cpp Ȥץդ
Ȥ˥ץץ򤵤뤳ȤǤ褦ˤʤäƤޤäơ
MCPP ˥ץץ򤵤뤿ˤϡgcc (xgcc), g++ θƤӽФ shell-
script ֤ơMCPP => cc1 ޤ MCPP => cc1plus ȤǼ¹
褦ˤʤФʤޤ*1
  GNU C ΥƥǤϡƥإå䤽Υ꤬ʣ
ʤäƤƤޤޤGNU C 3 Ǥ GNU C Ū˻Ȥ C++  shared
library λͤ GNU C 2 ȤѤä褦ǤΤᤫѥ
뤹Ǥ⤦ޤ椫ʤȤޤޤѥȥƥȤˤ
¿¾ΥեȥɬפǡΥС󤬸Ťȡޤ椫
ȤޤΤȤǤϥϡɥǤޤѥǤ
ʤȤ⤢ޤ
  FreeBSD 4.4R Ǥ GCC 3.2 ϥѥǤޤǤFreeBSD  4.
7R  upgrade packages  4.7 ѤΤΤؤơ褦䤯ѥ
뤹뤳ȤǤޤ*2
  ΤȤǤϣΥѥƱ VineLinux 2.5 äƤޤ
 (K6/200MHz) Ǥ GNU C 2.95.3 ȤäƤΥѥϤǤΤΡ
줿 GNU C 3.2 / cc1  segmentation fault 򷫤֤Ƥ
ʬȤΥꥳѥ뤬ǤޤǤθ塢K6  AthlonXP 
ؤƥꥳѥ뤷Ȥ٤ segmentation fault ȯޤ
ǤϥϡɥäΤ⤷ޤ
  ޤFreeBSD Ǥ K6 Υѥ GNU C 2.95.4 Ȥä GNU C 3.2 
ѥ뤷ϡmake -k check ǤϤۤȤɤ٤̤äΤǤ
줿 GNU C 3.2  GNU C 3.2 Ȥꥳѥ뤷Ȥ٤ϡ
g++, libstdc++-v3  make -k check  testsuite Σ᤯̤ʤȤ
ݤⵯޤAthlonXP ˼ؤƤϤޤ椯褦
ˤʤޤϡɥäΤ⤷ޤ
  ޤVineLinux  GNU C 3.2 Ȥ MCPP Ȥäƥꥳѥ뤷
ϡ줿 gcc  make -k check ̤ޤg++, libstdc++-v3 
testsuite Σ᤯̤ޤǤ*3, *4, *5
  ɤˤƤ⡢줿 gcc, g++, cc1, cc1plus ǤϤʤ
åե뤫饤֥꤫̯Τ褦Ǥ
  MCPP  GNU C / cpp Ȥϴ˸ߴǤϤޤ󤬡ʤ⤤ߴ
äƤΤǡؤƻȤäƤۤϤʤȻפޤ
  GNU C 3.2 Υѥ˻ȤäƥϼΤΤǤ

    OS                  make        library         CPU
    VineLinux 2.5       GNU make    glibc 2.2.4     Celeron/1060MHz
    VineLinux 2.5       GNU make    glibc 2.2.4     K6/200MHz
    VineLinux 2.5       GNU make    glibc 2.2.4     AthlonXP/2.0GHz
    FreeBSD 4.7R        UCB make    libc.so.4       K6/200MHz
    FreeBSD 4.7R        UCB make    libc.so.4       AthlonXP/2.0GHz

  ѥ뤷Τ C  C++ Ǥ

  ʤΡ֣åץץڥåȡV.1.3 ˤ GNU C  testsuite 
Ȥ edition ɲäޤȤȡmake -k check ޤ
runtest ǥץץξܺ٤ǥƥޥƥåʥƥȤǤޤ
åΤǤϤʤץץåưå򤹤
ǤˤĤƤ cpp-test.txt [2.2.3] 򸫤Ƥ

  *1  bootstrap γʳȤˤʤФʤʤΤǤ롣
    Makefile ϼˤϤޤ礭ʣʤΤǡ̤ĥդ
    ơstage ѤäȤ ^C Ǥơscript ֤
    ԺٹˡȤä
  *2 ⡢¿ packages δ֤ΰ¸طΤǡС󤬤ޤ
    ޤȺ롣ΤȤǤϤΤˡ kterm ư
    ʤȤ֤˴٤äȤ⤢롣
  *3 make -k check  MCPP ϻȤäƤϤʤǥå
    GNU C / cpp Ȥϰۤʤ뤫Ǥ롣
  *4 GNU C  configure  --enable-c-mbchar Ȥץ
    ȡĶѿ LANG, LC_ALL  multi-byte character  encoding
    Ǥ褦ˤʤ롣Υץդʤäϡ
    make -k check ϴĶѿ LANG, LC_ALL  C ȤơѸĶ
    ʤȤʤ
  *5 Testsuite ̤ʤľܤθϤ٤ơi686-pc-linux-gnu/libstdc++
    -v3/src/.libs/libstdc++.so.5.0.0 Ȥ饤֥
    pthread_getspecific, pthread_setspecific  pthread_* Ȥؿ
    󥯤ǤʤȤΤǤ롣줿Υ饤֥
    Сmake -k check ̤롣FreeBSD ǤϤϵʤ
    ̯Τ褦Ǥ롣

            [3.9.6.1]   Ԥޤʸƥ

  ΤޤˤŤ GNU C 3.2 ΥˤϤޤ󡣤λ
 GNU C 3.2 Ǥ褦䤯 obsolete Ȥޤˤ줬ȡ
̤˽Ϥޤ˥󥰤Фޤ

            [3.9.6.2]   #include_next, #warning

  Make  build/gcc/include  limits.h, syslimits.h 
 #include_next ꡢGNU C 3.2  install ȡlib/gcc-lib/i686-
pc-linux-gnu/3.2/include  limits.h, syslimits.h ˥ԡޤ
  #warning ϸޤǤ

            [3.9.6.3]   Ѱޥ

  ѰޥϤĤޤȾ testsuite ΤΤǡƥ
Ѥ˽񤫤줿ץˤޤ󡣤ơGNU C 2 εˡϤޤݡ
ȤƤϤΤΡ__VA_ARGS__ Ȥä C99 ΤΤ¿ʤäƤޤ
  ޤGNU C 3 Ǥ GNU C 2 λͤ C99 λͤȤŪʽɲ
ƤޤηǤ

    #define eprintf( fmt, ...)   fprintf( stderr, fmt, ##__VA_ARGS__)

  ϡ... бʤäϡľΥޤ
ͤǤȤСΤ褦Ÿޤ

    eprintf( "success!\n")  ==>  fprintf( stderr, "success!\n")

  򸫤ʻͤΤ褦ǤޥִꥹΥ
ϥѥ᡼ڤΤȤϸ¤ʤȡȡϢ黻ҤǤ ## 
̤Ư򤵤Ƥ뤳ȡ§㳰äʣˤΤǤ뤳ȡ
꤬ޤMCPP ǤϤεǽϼƤޤ󡣤ηΥޥ
Ǥ⥨顼ˤϤʤޤ󤬡ޥƤӽФ˺ݤơľΥ
ޤϺޤ

            [3.9.6.4]   ޥƤӽФΥ

  ޥƤӽФΥϡ#include 륷ƥإåΤΤ̤
ȡ/usr/include/bits/mathcalls.h, /usr/include/bits/sigset.hˡGNU
C 3.2 ΥΤǤϡgcc/libgcc2.h ˤޤ*

  * ΣĤΥإåե glibc  install 뤳Ȥǥƥإå
    äƤ椯ΤǤ롣
    FreeBSD Ǥ glibc ȤäƤʤΤǡΥƥإå¸
    ʤ

            [3.9.6.5]  Function-like ޥִ̾
                           object-like ޥ

  gcc/fixinc/gnu-regex.c, libiberty/regex.c ˤϡfunction-like ޥ
ִ̾ object-like ޥޤޤ#include 
 /usr/lib/bison.simple ƱͤǤϤ٤ alloca ˴ؤ
ΤǤȤСlibiberty/regex.c ˤϤޥޤ

    #define REGEX_ALLOCATE  alloca
    #define alloca( size)   __builtin_alloca( size)

  ϡ񤱤ʤΤǤʤʤȤάΤǤ


    #define REGEX_ALLOCATE( size)   alloca( size)

   regex.c Ǥ alloca ϾˤäƤϼΤ褦褦ˤ
äƤꡢ뤬ӤƤޤ

    #define alloca  __builtin_alloc

  ޤregex.c ˤ #include "regex.c" ȤԤꡢʬȤ򥤥
롼ɤ褦ˤʤäƤޤʣʥǤ

            [3.9.6.6]   'defined' Ÿޥ

   GNU C 3.2 Υˤϸޤ
  ɥȤˤȡμΥޥν GNU C 2 / cpp ƱǤ
ΤΡportability ʤפȤ˥󥰤ФȤˤʤäƤ
ƥȤƤߤȡ[3.9.4.6] ϥ˥󥰤Фʤ褦Ǥ

            [3.9.6.7]  .S եΡ֥ץץ

  GNU C 3 / cpp ΥɥȤˤϡ֣åץץåðʳθΥ
ȥץåήѤΤդɬפǤꡢǤθѤΥ
åȤ٤Ǥ롢֥ˤޥεǽפȤ
̣ΤȤ񤫤Ƥޤ
  GNU C 3.2 ȤΥˤϡ*.S ե뤬 gcc/config ǥ쥯
ȥ˿ܤޤ

            [3.9.6.8]  rpcgen  -dM ץλͤ

  GNU C 3.2  make Ǥ rpcgen  -dM ץȤޤǤ
rpcgen  -dM ץλͤäѤäƤϤʤ褦Ǥ

            [3.9.6.9]  -include, -isystem, -I- ץ

  ΥץϤФлȤƤꡢ-isystem ץ system
include directory Ʊ˿Ļꤵ礵ޤ
ƥإåΤΤ򹹿륽եȥΥѥǤϡ򤨤ʤ
ȤʤΤǤ礦Ķѿǰ礷ƻꤷۤ狼䤹Ȼפ
Ǥ
  ǡGNU C 3 / cpp ΥɥȤǤϡ-iwithprefix,
-iwithprefixbefore ץˤĤƤϡֻȤʤۤɤ
(discouraged)פȽ񤫤ƤޤGNU C ˤ include directory ꤹ
ץ󤬤䤿ˤޤäƤΤǤ礦*

  * GNU C 3.2  Makefile  -iprefix ץդƤ롣
     -iwithprefix, -iwithprefixbefore ϻȤʤΤǤ롣
    -iprefix ץϡθˤΣĤΥץΤɤ餫
    ƽựĤΤǤ뤬

            [3.9.6.10]  Undocumented ʻޥ

  GNU C 2 Ǥ __VERSION__, __SIZE_TYPE__, __PTRDIFF_TYPE__,
__WCHAR_TYPE__ λޥˤĤƤϡɥȤ˵ܤʤ
-dM ץǤΤ뤳ȤǤޤǤGNU C 3 Ǥϥɥ
˰̣ܤ졢Ūͤ -dM Τ뤳ȤǤ褦ˤʤޤ

            [3.9.6.11]  Undocumented ʴĶѿ

  GNU C 2 ǤϥɥȤ˵ܤΤʤä SUNPRO_DEPENDENCIES Ȥ
ѿˤĤƤϡGNU C 3 ǤϥɥȤ˵ܤ褦ˤʤޤ
ʤʤʤΤɬפʤΤϤ狼ʤˡ

            [3.9.6.12]  ¾

  GNU C 3 / cpp ǤϼΤ褦 #pragma Ƥޤ

  #pragma GCC poison
  #pragma GCC dependency
  #pragma GCC system_header

  GNU C 3.2 ΥǤ⡢Τ poison  system_header ȤƤ
ޤMCPP ǤϤϥݡȤƤޤ󡣻ͤϾʤ
ɬޤ괶ʤǤ

  GNU C 3 Ǥ #assert  assertion directives ϡֿ侩ʤ
(deprecated)פȤޤʤgcc ϥǥեȤ -A ץȯ
Ԥ뤬ˡ
  ޤGNU C 2 Ǥ -traditional ץƱ cpp ǼƤ
ꡢΤ˸Ťͤ C90 λͤߤʻͤȤʤäƤ
GNU C 3 Ǥϥץץå̾ cpp0  tradcpp0 Ȥʬ
ޤ-traditional ץ gcc ФƤͭǡcpp0 ˤϤ
ޤgcc -traditional ϥץץ tradcpp0 ƤӽФޤ
tradcpp0  C90 ο traditional ʥץץå˶ᤤΤȤʤ
Ƥޤơtradcpp0 ΤۤϺ塢ʥХνʳϥƥ
󥹤ʤȤƤޤ
  GNU C 2 / cpp δ̯ʻͤϤֽƤ褦Ǥ

        [3.9.7]     GNU C 3  MCPP Ȥˤ

  ʾ˸Ƥ褦ˡGNU C 3.2 ΥϾʤȤץץϡ
glibc 2.1.3 ʤɤ٤Ȥʤ꤭줤ʤΤˤʤäƤޤTraditional
ʽϤۤܰݤ졢̣ΤʤץϻȤʤʤäƤƤޤ
  ޤGNU C 3.2 / cpp ΤΤ⡢traditional ʻͤ obsolete ʤ
Ȥưtoken-based ʸ§ΤˤʤɡGNU C 2 / cpp ٤
ʤͥ줿ΤȤʤäƤޤɥȤ undocumented ʬ
˸ޤޤṲ̋¿ޤȤƤɤ˸
äƤȻפޤ
  GNU ΥƥǤϥƥإåʣǡɤʤ
ƤΤưפİǤʤ褦ˤʤäƤޤ줬 GNU Υƥ
ȥ֥κװȤʤäƤΤǤϤʤǤ礦
  ⤦ĻǰʤΤϡץץѥΤ˵ۼƤޤä
ȤǤΤᡢMCPP Ȥˤ gcc  g++  -no-integrated-cpp Ȥ
ץդƸƤӽФɬפޤʣ makefile ¿
makefile 礭ʥե뷲򥳥ѥ뤹䡢Υץ
फ gcc ưŪ˸ƤӽФϡgcc, g++ θƤӽФ shell-
script ֤ơΥץ󤬼ưŪղä褦ˤʤ
ʤޤ
  Ūˤϡgcc, g++ ֤Ƥǥ쥯ȥʻ Linux Ǥ /
usr/local/gcc-3.2/binˤ˼Τ褦 script 򤽤줾 gcc.sh, g++.sh 
֤̾ޤ

    #!/bin/sh
    /usr/local/gcc-3.2/bin/gcc_proper -no-integrated-cpp "$@"

    #!/bin/sh
    /usr/local/gcc-3.2/bin/g++_proper -no-integrated-cpp "$@"

  ơΥǥ쥯ȥǼΤ褦ˤޤ

    chmod a+x gcc.sh g++.sh
    mv gcc gcc_proper
    mv g++ g++_proper
    ln -sf gcc.sh gcc
    ln -sf g++.sh g++

  ޤcpp ֤Ƥǥ쥯ȥʻ Linux Ǥ /usr/local/
gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2ˤǡGNU C 2 ξƱͤˡ
cpp, cpp0 θƤӽФ MCPP ¹Ԥ褦ˤƤޤ[3.9.5] ȡˡ
  Ƥȡgcc  g++ ޤ MCPP ƤӽФ졢θ cc1,
cc1plus  -fpreprocessed ȤץץѤߤǤ뤳Ȥ򼨤ץ
դƸƤӽФ褦ˤʤޤ
  ΤۤGNU C ¾ΥСξƱͤˡĶѿ򥻥åȤޤ
[3.9.5] ȡˡPATH ɬפǤ*
  ʤƥɸȰۤʤС GNU C 򥤥󥹥ȡ뤷
ղŪ include directory ꤬ɬפʤȤޤMCPP V.2.4
ǤϤ MCPP ΥѥȤ߹褦ˤʤäΤǡ̾ϴĶ
ꤹɬפϤޤ
  ΤȤ Linux Ǥϡ/etc/ld.so.conf  /usr/local/gcc-3.2/lib
ȤԤɲä~/.bash_profile ˼Τ褦äƤޤ

    export PATH=/usr/local/gcc-3.2/bin:$PATH

  Ǥ cc1, cc1plus ΥץץʬǤ cpplib Υ MCPP
ΤΤ֤ȤǤcpplib  cc1, cc1plus ȤŪ
interface  cpplib Ȥ桼ץȤγŪ interface 
Ƥ륽ե뤬碌 46KB ⤢ꡢȤƤ֤Բǽ
ǤɤƤʣ interface ˤɬפΤǤ礦
ǰʤȤǤ

  * MCPP V.2.5 Ǥ GNU C V.3.* ˤĤƤ configure ɬפ򤹤
    ƼǤ褦ˤʤäΤǡGCC_VERSION δĶѿɬפʤʤ
    

            [3.9.7.1]       GNU C 3.3, 3.4  MCPP Ȥˤ

  ɤ˸äƤ GNU C V.3 ǤV.3.3 ̯ž
ƤޤޤV.3.3  V.3.2 ٤ȡΤ褦礭Ѥ
Ƥޤ

  1.  ñΤ cpp0 Ϥʤʤägcc -no-integrated-cpp ϤޤȤ뤬
    ƤӽФΤ cc1 (cc1plus) Ǥ롣ʤץץ
    Ǥ⥳ѥǤ cc1 ƤӽФ롣ơץץե
     cc1 ˥ץץåѤǤʤץϤ뤳Ȥ롣
  2.  60 Ĥ 70 Ĥ̤ΥޥƤ롣ˤäƥ
    ƥإå GNU C Ȥδطʣˤʤä
  3.  tradcpp ʤʤꡢGNU C V.3.2 Ǥ obsolete Ȥ deprecated Ȥ
    줿Ťͤΰ褷

  ΤȤơĤεʥѥˤ٤ƤۼȤʤäƤꡢ
ýϤιΤȤƤ⡢ץ󥽡νϤγȯȤ
⡢ΤȤǤ

  MCPP ΰܿǤϡgcc ɤʥץϤƤ뤫狼ʤ
ΤȤǤְäץ⤹٤ƥå̵뤹
ΤǤϴޤȤꤢФдְäϤƤ륪ץ
̵뤹褦ˤޤʳΥץϤȥ顼ˤʤ
ϤǤ
  ѹǤ⡢MCPP νΥץˤϻȤʤʤä
ޤ-E ץѻߤ-m ץ -e ˡ-c  -@compat
ѹޤ
  ޤGNU C V.3.2 Ǥ cpp0 θƤӽФ MCPP ֤ФȤ
٤ cc1 (cc1plus) θƤӽФ MCPP  cc1 (cc1plus) Ȥ˿ʬ
뤳ȤɬפˤʤޤΤ shell-script  src/set_mcpp.sh 
Ѱդޤ
  ̤λޥϣģбƤ櫓ˤϤʤΤǡGNU C
 -dM ץνϤ礷Ѥ褦ˤޤ

  GNU C V.3.4 ǤϤˡեϤ٤ UTF-8 ѴƤ
褦ѤޤɥȤˤȡŪˤϼΤ褦ˤʤ
Ƥޤ*

  1.  ץץκǽΥեǡmulti-byte/wide character  UTF-8
    Ѵ롣
  2.  Ѵˤ libiconv δؿȤäơiconv бƤ
     encoding Ϥ٤ƻȤ롣
  3.  ե encoding ꤹˤ -finput-charset=<encoding>
    ץȤ
  4.  ѥ encoding ϥǥեȤǤ UTF-8 Ǥ뤬-fexec-
    charset=<encoding> ץ¾ encoding ꤹ뤳ȤǤ롣

  ֹݲפȸ Unicode б뤳ȤȹͤĬȤ˼º
 multi-byte character Ȥʤο͡δ֤ˤޤĬ
GNU C ˤڤǤޤä褦Ǥ
  ºݤ˻ȤäƤߤȡGNU C V.3.4 Ǥ EUC-JP  BIG5 ̤褦Ǥ
shift-JIS ǤϺ𤷤ޤޤ-fexec-charset ץϸޤ

  MCPP  GNU C V.3.3 ޤǤξϡBIG5, shift-JIS, ISO2022-JP Ǥ
<backslash> ȰפͤΥХȤľ <backslash> ƥ
η٤䤤ޤGNU C V.3.4 ξ̤ʽϤޤ󡣤ޤ
encoding  UTF-8 ˤѴ encoding Τޤ޽Ϥޤϼ
Τ褦ͳǤ

  1.  cc1  -fexec-charset ץ󤬸ʤΤǡUTF-8 ѴƤ
    ޤȸ encoding ˤʤѴʤäϡshift-JIS,
    ISO2022-JP ʳ encoding (EUC-JP, GB2312, BIG-5, KSC-5601, UTF-8)
    ϤΤޤ̤褦Ǥ롣Shift-JIS, ISO2022-JP  cc1 𤹤
    ǡɤˤƤȤʤ
  2.  GNU C ζᤤλѹԤ

  *  FreeBSD 5.3 ƱƤ GNU C 3.4.2 ǤϤεǽͭˤʤä
    ʤ

    [3.10]      Visual C++ .net Υƥإå

  Visual C++ .net 2003 ǤĤΥץץΥץץ
MCPP ȤäƤߤޤΥƥΥƥإåˤϡץץ
θߴȤʤ褦ʤΤϤʤ褦ǤΤ褦ʤΤϤ
ޤ¾νϤǤ⤷ФиΤǡäȤʤ
ǤϤޤ

  1.  C99 λͤϤۤȤɼƤʤˤ⤫餺C  // 
    Ȥ¿ѤƤ롣
  2.  Function-like ޥ̾Ÿ object-like ޥ
    롣
  3.  limits.h ˴ְäޥĤcpp-test.txt [4.1.3.1] 
    2 򻲾ȡˡ

  Linux  glibc Υƥإåˤ GNU C local ʻͤФлȤ
ƤޤVisual C++ Υƥإåˤ Visual C++ local ʽ
ޤ긫ޤ

        [3.10.1]    Ȥޥ

  Visual C++ ˤϣĤȤǤʤޥޤVc7/
PlatformSDK/Include/WTypes.h ˤϼΤ褦ʥޥޤ

    #define _VARIANT_BOOL   /##/

  ơVc7/PlatformSDK/Include/  oaidl.h, propidl.h ǼΤ褦˻
Ƥޤ

    _VARIANT_BOOL bool;

  ϤäǤ礦
   _VARIANT_BOOL  // Ÿơη̡ιԤȥ
Ȥ뤳ȤԤƤΤΤ褦Ǥơºݤ Visual C 
cl.exe ǤϤʤäƤޤޤ
  // ϥȡ (preprocessing-token) ǤϤޤ󡣤ޤޥ
Ÿϡȡʬ򤵤쥳ȤĤΥڡ
줿ȤΥեǽΤǤäơޥˤäƥ
Ȥ뤳ȤϷ褷ƤǤʤΤǤΥޥ // Ÿ줿
Ȥǡ// ͭ preprocessing-token ǤϤʤΤǷ̤ undefined
ȤʤϤΤΤǤ
  MCPP ǤΥإåեȤˤϡΥޥ򥳥
Ȥꤢ _VARIANT_BOOL ΤȤ򼡤Τ褦˽񤭴ʤ
Фʤޤ

    #if !__STDC__ && (_MSC_VER <= 1000)
        _VARIANT_BOOL bool;
    #endif

  Visual C 5.0 ʹߤΥС󤷤ȤʤΤǤСιԤϼΤ褦
˥ȥȤƤޤޤ

    // _VARIANT_BOOL bool;

  ΥޥǤʾʤΤϡ򥳥ȤȤƽ
Ƥޤ Visual C / cl.exe ΥץץμǤˤϡ
ץץåμΤ褦ʿ꤬Ϫ褷Ƥޤ

  1.  Token-base ǤϤʤʸ١ΥץץƤ롣
  2.  ޥŸ̤ȤȤưƤꡢtranslation phases
    𤷤Ƥ롣

  餯cl.exe Υץץå˸Ťɤ餫ȸʸ
ΥץץåΥ򸵤ˤƤΤǤ礦ʬŪ˼
äʤС󥢥åפ򷫤֤ƤƤ뤳Ȥ¬ޤ
  ˸Ťץ๽¤äƤȿ¬ץץå
¿ޤ[3.9] Ǹ GNU C 2 / cpp ⤽ΣĤǤץ
ץåǤϡʬŪ˼äвäۤɥץ๽¤㥴
㤷ƤΤǡɤƤ⤢ȤʼƬǤȤʤޤŤ
ΤƤơᤫľʤ¤ꡢäꤷץץåˤ
ʤʤȻפޤ
  GNU C 3 / cpp ǤϥľơGNU C 2 Ȥ̤Υץץ
åȤʤޤMCPP ⡢DECUS cpp ȤŤץץåΥ
ȯʤ顢ȯƤޤʤŪ˽ľ줿ΤǤ


λ͡

  øΥץץͤ줳˽񤯤櫓ˤϤ椭ޤcpp-test.
txt  Standard C ΥץץˤĤƾܤ񤤤ƤΤǡ
ɤǤMCPP  pre-Standard ⡼ɤưˤĤƤϡmcpp-
porting.txt  [4.1.3] 򸫤ƤǤ Standard C ǽ
ȤƤΤޤơץץμդΤĤλͤҤ٤ޤ
ˤޤʽͤˤĤƤϡ[5] ǥå˽񤤤Ƥ


    [4.1]       λ status 

  MCPP λ˿ƥץ֤ͤ internal.H Ȥإå
ޤ顼ʤä 0 ֤顼ä errno != 0
ʤ errno  errno == 0 ʤ 1 ֤ޤ

    [4.2]       Include directory Υѥ

  #include directive  include եϼνǥޤ

  1. #include ǥ쥯ƥ֤ΰ "file-name" ޤ <file-name> η
Ǥʤ硢줬ޥǤФŸ롣η̤ "file-name",
<file-name> Τɤ餫ηǤʤФʤʤǤʤϥ顼Ȥ
롣
  2. "file-name" ηǤ <file-name> ηǤ file-name եѥꥹ
ȤǤСΤޤޥץ󤹤롣ץǤʤХ顼Ȥ롣
  3. եѥꥹȤǤʤ "file-name" ηǤСΥǥ쥯ȥ
ʤХѥˤȲᤷƥ롣-I1 ץǤ 3.1-I2 Ǥ
3.2-I3 ǤϤʤνǡˤȤʤ롣ǥեȤǤϡUNIX Ϥν,
GNU C, Visual C ˰ܿ줿ΤǤ 3.2¾Ǥϸ§Ȥ 3.1 Ǥ
롣Borland C ǤϡBC 4 ޤǤ 3.1BC 5  3.1+3.2Ǥ롣
ȯǤʤС<file-name> ηƱͤΥ򤹤롣
  3.1. ȥǥ쥯ȥʤ MCPP ưΡˡ#include ͥ
ƤƤ⡢˥ȥǥ쥯ȥȤ롣
  3.2. եʥ󥯥롼ɸˤΤǥ쥯ȥꡣ#include 
ȤƤ硢إåե뤬̥ǥ쥯ȥˤȡΤӤ˴
बƤ椯
  4. եѥꥹȤǤʤ <file-name> ηǤСΥǥ쥯ȥ
롣Υǥ쥯ȥꤽΤΤ .. ȤäХѥǻꤵ
Ƥϡȥǥ쥯ȥ꤫ХѥȲ᤹롣
٤ƥƤե򥪡ץǤʤХ顼Ȥ롣
  4.1. MCPP ư -I <directory> ץǻꤵ줿ǥ쥯ȥꡣ
ʣлꤵ줿ˡʺ˥롣
  4.2. GNU C ǤǤ -isystem ץǻꤵ줿ǥ쥯ȥꡣʣ
лꤵ줿ˡʺ˥롣
  4.3. Ķѿǻꤵ줿ǥ쥯ȥꡣδĶѿ̾ϡsystem.H
 ENV_C_INCLUDE_DIR Ƥ롣C++ Ǥ ENV_CPLUS_INCLUDE_DIR 
ƤФδĶѿ˻Ȥ롣GNU C ǤǤ C_INCLUDE_PATH
C++ Ǥ CPLUS_INCLUDE_PATH ˡPlan 9 ǤǤ include¾Ǥ
INCLUDEC++ Ǥ CPLUS_INCLUDE ˤǥեȤδĶѿ̾ȤƤ롣
ĶѿʣΥǥ쥯ȥ꤬ separator ǶڤäƻꤵƤС
ǽΤΤ˥separator  DOS/Windows ϤǤ ;
Plan 9 Ǥ space¾Ǥ :ˡ
  4.4. system.H Υޥ CPLUS_INCLUDE_DIR? 줿 implementation-
specific ʥǥ쥯ȥꡣ
  4.5. system.c  set_sys_dirs() ǻꤵ줿 site-specific ʥǥ쥯
ȥ(/usr/local/include)
  4.6. system.H Υޥ C_INCLUDE_DIR? 줿 implementation-
specific ʥǥ쥯ȥꡣ
  4.7. system-specific ʥǥ쥯ȥUNIX ϤǤ /usr/includeˡ

  ǥ쥯ȥοϾ嵭Τ٤Ƥ碌 system.H Ƥ
NINCLUDE ǤʤФʤޤ-I- (GNU C Ǥ -nostdincVisual C
Ǥ -X) ץꤹȡ嵭 4.4 ʹߤΥϹԤޤ

  ѥδ򥫥ȥǥ쥯ȥȤΤϡANSI C Rationale ǤϰѰ
Ρְտ (intent)פǤȤƤޤǥ쥯ȥ꤬ưȤ
ʤͤΤʤΤǡȻפޤUNIX ϤνǤϡ
ʤȤ #include "header" ηǤ include ΥեΤ
ǥ쥯ȥȤ뽬褦Ǥ

    [4.3]       Header name ιˡ

  Header-name Ȥ pp-token ιˡȡºݤ include file 
ե̾Фˡϡ̤Ǥ

  1. ʸƥηǽ񤫤ƤС򤽤Τޤ
header-name Ȥ롣˥ޥǽ񤫤ƤơŸ̤
ʸƥˤʤä⡢ƱͤǤ롣ʸƥη header-
name Ǥϡñˤξü " ȤäΤե̾Ȥ롣
  2.  <filename> ηǽ񤫤ƤС򤽤Τޤ header-
name Ȥ롣ñξü <, > ȤäΤե̾Ȥ롣
  3. ˥ޥǽ񤫤ƤơŸ̤ <filename> 
ˤʤäϡξü <, > Ȥꡢˤ٤Ƥ space 
Τե̾Ȥ롣
  4. ɤξǤ⡢DOS/Windows ϤǤ path-delimiter Ȥ \  / 
뤬\  / Ѵ롣
  5. DOW/Windows ϤǤϥե̾ʸϤ٤ƾʸѴ롣

    [4.4]       #if ɾ

  mcpp_std  C90 ư⡼ɤǤ #if ɾϡۥȽϤȥ
åȽϤȤ unsigned long äƤСHAVE_UNSIGNED_LONG ==
TRUE ǤСˡɬפ˱ long  unsigned long ǹԤޤ
HAVE_UNSIGNED_LONG == FALSE νϤǤ long ɾޤ
mcpp_prestd  long Ǥ
  mcpp_std  long long ĽϤǤϡ-V199901L ץ
__STDC_VERSION__  199901L ʾͤ줿 C99 λͤȤʤꡢ#
if  long long / unsigned long long ɾޤC++ Ǥ -V199901L 
ץǵưƱͤǤ
  Visual C, Borland C 5.5 Ǥ long long Ϥޤ󤬡Ʊ
 __int64 ȤΤǡC99  #if  __int64 / unsigned
__int64 ɾޤʤVisual C++ .net 2002 ޤǤ Borland C 5.5
Ǥ LL, ULL Ȥ suffix ȤʤΤǡ suffix  #if ԤǤ
Ȥ뤬ϤʸǻȤäƤϤʤˡ
  ޤ-+ ץ C++ Υץץ򤹤ϡ#if  true,
false Ȥ pp-token ͤϤ줾 1L, 0L ɾޤ
  HAVE_UNSIGNED_LONG == TRUE νϤǤ mcpp_std  C90 ⡼ɤǤζ
ŪɾΤ򡢰ʲޤC99 ⡼ɤξϡʲ [4.4],
[4.5] εܤϤ٤ơlong / unsigned long 򤽤줾 long long /
unsigned long long ɤؤƤ

  ġȡʸޤˤϡͥȡ U
դƤ unsigned long ɾmcpp_prestd Ǥ U ǧ
ʤˡ
  ǤʤСlong ϰϤˤޤ long ɾ롣
  Ǥʤ unsigned long ϰϤ unsigned long ɾ롣
  ۤͤ out of range Υ顼Ȥ롣
  黻黻Τɤ餫ʤǤʤǡǤ
ĤǹԤ

  ɤˤƤȡϾͤȤޤ
  ۥȽϤȥåȽϤΤɤ餫 unsigned long äƤ
ʤСȡɾ long ϰϤǹԤۤ
ͤ out of range Ȥޤα黻⤹٤ long ǹԤޤ
  ޤ unsigned long äƤƤ⡢ۥȤΤΤۤϰ
ϡĶͤ out of range Ȥʤޤ
  ƱΤα黻̤ϰϳȤʤäϡlong Ǥ out of range Υ
顼Ȥʤꡢunsigned long Ǥϥ˥󥰤Фޤ黻ַ̤ˤĤ
ƤƱͤǤ
  αӥåȥեȤޤ껻ˤϰܿʤΤǡ˥
ФޤʤĤκ黻ˤäĤ
ʤͤѴ줿⡢˥󥰤Фޤºݤν
ϡۥȽϤΥѥΤλͤ˽ޤ
  C90 ǤϥץץǤ #if ɾϤ٤ long / unsigned long 
C99 ǤϤνϤκǡ˹ԤȤˤʤäƤޤѥ
ΤǤ if (expression) ɾλ礶äѤʤΤǤĥ
طˤϡѥΤȤϰ㤦̤ˤʤ뤳ȤˤƤ
ޤ
  ޤStandard C ΥץץǤ keyword ȤΤ¸ߤʤΤǡ
sizeof 䥭㥹ȤϻȤޤ󡣤ѿư
Ȥޤmcpp_std Ǥ #if  defined 黻ҤȤ#elif ǥ쥯
ƥ֤ȤޤȤϥѥΤǤ if (expression) Ʊͤˡ
黻Ҥ̤ͥȥ롼ԥ󥰵§ʤ絬§ˤ˽äɾԤ
ޤ黻Ҥ¿ǤϡξդƱˤ뤿λѴԤ졢
 unsigned long ξ¾ long ǤäƤ unsigned long Ѵ
ޤ
  ʤlong, unsigned long ϰϤ Standard C Ǥ <limits.h> Ǥ狼
뤳ȤˤʤäƤޤMCPP ΥǤ <limits.h> ϻȤäƤޤ
Pre-Standard νϤǤ⥳ѥǤ褦ˤ뤿ȡStandard C 
ȾΤϤ <limits.h> ˤϻ ְä뤫Ǥ

    [4.5]       #if Ǥʸɾ

  #if ȡȤƤϼ̻ҡʥޥޥˡοͥȡ
ʸޤΤʸɾλϤۤȤ
implementation-defined Ǥꡢportability Ϥޤꤢޤ#if
'const'  compiler-proper Ǥ if ('const') Ȥδ֤Ǥ̤㤦
礬ޤStandard C Ǥ⡢줬ƱǤ뤳ȤݾڤƤʤˡ
  poststd ⡼ɤǤϤΤۤȤɰ̣Τʤ #if ʸɾϹ
ޤʥ顼Ȥʤˡ
  ʸɾ¾ȡƱͤˡlong, unsigned long 
ϤǾͤɾޤC99 ⡼ɤǤ long long, unsigned long longˡ
  Single character Ǥʤ multi-byte character  wide character ϡ
encoding  UTF-8 ξϣХȡʳǤϤ٤ƣХȤηɾ
ޤUTF-8 ϥѤʤΤǡХȤηɾޤEUC-JP 
Х encoding ˤбƤޤʣХʸϣХȡܣХ
ΣʸȤǧ롣η̡ͤɾ뤳Ȥˤʤˡ
ХȤ encoding Ǥʤ顢wchar_t ХȤηǤϤ⤢
ޤMCPP  wchar_t ˤϴΤޤ󡣰ʲǤϣХȤ multi-byte
character encoding ξˤĤޤ
  '' Ȥ褦 multi-byte character constant  ((Хܤ <<
CHARBIT) + Хܤ) ɾޤCHARBIT  <limits.h> 
CHAR_BIT Ʊ͡ˡ
  'ab', '\x12\x3', '\x123\x45' Ȥ褦 multi-character character
constant Ǥϡ'a', 'b', '\x12', '\x3', '\x123', '\x45' 򤽤줾죱
ȤȤ [0, UCHARMAX] ϰϤɾη̤̥ХȤ缡
CHARBIT ĺեȤʤ­Ƥ椭ޤUCHARMAX  <limits.h> 
UCHAR_MAX Ʊ͡ˡĤ escape sequence ͤ UCHARMAX Ķ
ϡout of range Υ顼ȤʤޤäơCHARBIT == 8 ʸ
Ȥ ASCII ǤСΣĤΥȡͤϤ줾 0x6162, 0x1203, 
顼Ȥʤޤ
  L''  '' ƱͤȤʤޤL'ab', L'\x12\x3', L'\x123\x45' 
multi-character wide character constant ˤĤƤϡL'a', L'b', L'\x12',
L'\x3', L'\x123', L'\x45' 򤽤줾죱Ĥ wide character Ȥ [0,
(UCHARMAX << CHARBIT) | UCHARMAX] ϰϤɾη̤̤ wide
character 缡 CHARBIT * 2 ĺեȤʤ­Ƥ椭ޤ
Ĥ escape sequence ͤХʤκͤĶϡout
of range 顼ȤʤޤäơCHARBIT * 2 == 16  ASCII Ǥ
СΣĤΥȡͤϤ줾 0x00610062, 0x00120003, 0x01230045
Ȥʤޤ
  Multi-character character constant, multi-character wide character
constant ͤ unsigned long ϰϤĶ out of range 顼Ȥ
ޤ
  __STDC_VERSION__ ޤ __cplusplus ͤ 199901L ʾξϡ
\uxxxx, \Uxxxxxxxx η UCN (universal-character-name) 򣱣 escape
sequence Ȥɾޤʤɾ򤷤Ƥⲿΰ̣ʤ
ɾ뤷ʤΤǤˡ

  åȽϤΥѥΤ char  wchar_t 椢ξϡ
#if ǤʸɾȥѥΤǤ if (expression) ˤʸ
ɾȤϡ̤äƤ뤳Ȥޤϰϥ顼ȤʤϰϤ
ǽޤޤmulti-character character constant, multi-byte
character constant ɾϡץץåǤʤѥΤǤ
ϤˤäƤޤޤǤCHAR_BIT ǤäƤ⡢'ab'  'a' * 256 +
'b' ɾ뤫Ȥ 'a' + 'b' * 256 ɾ뤫⡢Standard
C ǤϷƤޤ
  ̤ˡ#if ǤʸϤʤ¤ϻȤ٤ǤϤ
ޤ󡣤ʤʤȤΤϡˤϻפդޤ󤬡

    [4.6]       #if sizeof (type)

  Standard C Ǥϥץץϼ¹ԻĶ䥳ѥΤλͤΩ
ʸ̤ΥץץȤƵ꤬Τˤ졢η̡#if ԤǤ
sizeof ȥ㥹ȤϻȤʤȤˤʤޤMCPP Ǥ
mcpp_prestd ξ system.H  OK_SIZE  TRUE ȡ#if Ԥ
sizeof (type) Ȥ褦ˤʤäƤޤϥꥸʥǤѾơ
 long long, long double νɲäμäΤǤʤ
˥㥹ȤΤѻʤΤǡäƤʤ뵤ʤˡ
  Ϥ sizeof ɾϼ¹ԻĶˤäưäƤΤǡդ
٤꤬ޤMS-DOS Τ褦˥ǥˤä sizeof (type)
äƤ⤢ޤޤMCPP Ǥ near, far νϰ¸ν
Ҥǧޤ¾ΣϣӤƱͤΥǥΤ褦ʤΤϡ
system.c  mem_model() ȤؿбǤ񤭲äɬפޤ
  eval.c  S_CHAR  S_* ȤޥǤϳƷΥƤ
ϤǻȤϡͤȤƥåȽϤΤη
ΥͤľܽɬפޤHAVE_LLONG, HAVE_LDBL Ȥ
ϽϤ sizeof (long long)  sizeof (long double) 򥳥ѥ
뤫ɤ򼨤ΤǤۥȤȥåȤȤǤηΰ
ۤʤϡHAVE_LLONG ˴طʤS_LLINT, S_PLLINT 򥿡å
Ϥ˹碌ͤʤФʤޤ
  MCPP  #if sizeof ˤϼȴޤchar, short, int, long, long
long Ƭդ signed, unsigned ñ̵뤷ޤäơunsigned
char, unsigned long ηΤʤϤǤ⤽ sizeof ϥ顼ˤʤ
줾 char, long Υ֤ޤޤsizeof (void *) ϥ
Ȥޤ󡣤ȾüǤεǽΤ
system.H Υե饰䤷ѻˤʤΤǤɤ㥹Ȥ⥵
ȤʤΤ sizeof Ϻ褦ȤפޤäǤ
äΤʤΤǡ㴳μäǻĤƤޤ

    [4.7]       White-space sequence ΰ

  MCPP  translation phase 3  tokenization ˺ݤơtoken separator
ȤƤʣ white spaces  sequence ϡԥɰʳ one space
˰̤ޤޤ white space sequence ϺޤƬ
white spaces νϼˤäư㤤§Ȥƺ one
space ˰̤¸Ȥޤ
  ϥץץʳäǤθ phase 4 
ơޥŸȥץץǥ쥯ƥֹԤνԤޤޥŸ
θǤϤʣ spaces Ǥ뤳Ȥޤ
space Ĥȡѥη̤ϲѤޤ
  Standard C Ǥ translation phase 3 Ǥ one space ˰̤뤫
 implementation-defined ȤƤޤ̾ϥ桼Ϥޤä
ˤɬפϤޤPortability ˤʤΤϡpreprocessing
directive Ԥ <vertical-tab> ޤ <form-feed> Ǥ
ξ Standard C Ǥ undefined ǤMCPP ǤϤ space Ѵ
ޤ

    [4.8]       MCPP ¹ԥץΥǥեȤλ

  noconfig ǥ쥯ȥˤƽѤκʬե makefile Ȥ
ƥǥեȤǥѥ뤷 MCPP ¹ԥץλͤ򤳤
˽񤤤ƤޤConfigure ץȤƥѥ뤷
 configure η̤ˤäưäƤޤOS ȽϤΥСƱ
ǤСʤȤ⥤󥯥롼ɥǥ쥯ȥʳƱ̤ˤʤϤǤ

  κʬե makefile ϼνѤΤΤǤ

    FreeBSD 5.3 (GNU C V.3.4)
    VineLinux 3.1-ix86 (GNU C V.2.95, V.3.2, V.3.3)
    CygWIN 1.3.10 (GNU C V.2.95)
    LCC-Win32 V.3.2
    Visual C++ .net 2003
    Borland C++ V.5.5J / WIN32
    Borland C++ V.4.02J / MS-DOS
    Plan 9 ed.4 / pcc

  ⤽νϼȤǥѥ뤵ޤ
  Borland C ˤϡBCC 5.5 ˤ 32 ӥåǤ BCC 4.0 ˤ 16 ӥå
ǤȤꡢ16 ӥåǤ large ǥǥѥ뤵ޤ

  MCPP V.2  system.H ȤΥޥѹ뤳ȤǳƼ
ưͤ MCPP ¹ԥץबǤ褦ˤʤäƤޤǤ MODE
ȤޥưκΤȤʤäƤޤǤ MODE ==
STANDARD ǥѥ뤵줿 MCPP ˤĤޤ
  MODE == STANDARD ǥѥ뤵줿 MCPP ϡǥեȤǤ Standard C
λͤưޤˤμ¹ԥץ poststd ⡼ɤȤư
ɤäƤޤpoststd ⡼ɤȤΤϡ䤬˺äץץ
ͤǡStandard C ΥץץԵ§ʬΤǤ
ܺ٤ʻͤ [2.4] 򻲾ȤƤҾʥǤС
Standard C ΥץץåΤĤǻȤäƤĤޤ

  noconfig.H, system.H ޥΤΤΤϤɤν
⤹٤ƱˤƤޤ

  νϤΥѥΤϤ #pragma ԤդΤǡ
HAVE_PRAGMA  TRUE ȤƤޤ
  OK_SIZE  FALSE ǥѥ뤷Ƥޤ Standard C λͤȤ
ǤDOLLAR_IN_NAME  FALSE Ǥäơ̾ˤ $ ϻȤ
ޤ
  CONCAT_STRINGS  FALSE ȤƤΤǡʸƥϢϹԤޤ

  OK_DIGRAPHS == TRUE, DIGRAPHS_INIT == FALSE ǥѥ뤵ƤΤǡ
digraph  -2 (-digraphs) ץͭȤʤޤOK_PRAGMA_OP 
TRUE ȤƤΤǡ-V199901L ץ _Pragma() 黻Ҥͭˤʤ
ޤOK_MBIDENT  FALSE ȤƤΤǡ̻ multi-byte-
character ϻȤޤSTDC  1 ȤƤΤǡ__STDC__ νͤ 1
Ȥʤޤ
  OK_TRIGRAPHS == TRUE, TFLAG_INIT == FALSE ȤƤΤǡtrigraph 
-3 (-trigraphs) ץͭȤʤޤOK_UCN  TRUE ˤƤ
ǡC99, C++  UCN (universal character name) Ȥޤ
  DEBUG, DEBUG_EVAL  TRUE ȤƤΤǡ#pragma MCPP debug ǥ쥯
ƥ֤ǳƼΥǥХå󤬽ϤޤOK_MAKE  TRUE ȤƤΤǡ
makefile Ѥΰ¸طԤϤ륪ץ󤬼Ƥޤ
  TOP_SPACE  TRUE ˤƤΤǡƬ spaces ϸ§Ȥ a space
˰̤ǻĤޤ
  poststd ⡼ɤǤ trigraphs  UCN Ȥޤ󡣹Ƭ
spaces ϸ§Ȥƺޤ

  Ƽ translation limits ϼΤ褦ˤƤޤ

    NMACPARSʥޥΰκ                :   255
    NEXP    #if κͥȥ٥    :   256
    BLK_NEST#if section κͥȥ٥      :   256
    RESCAN_LIMITʥޥκͥȥ٥  :   64

  ΥޥϽϤˤäưۤʤäˤƤޤBC4/16 ȤΤ
Borland C 4.0  16 ӥåǤؤˡ

    STDC_VERSION    __STDC_VERSION__ ν͡
        GNU C 2 :   199409L
        ¾  :   0L
    HAVE_DIGRAPHS   digraphs 򤽤Τޤ޽Ϥ뤫
        GNU C, Visual C :   TRUE
        ¾  :   FALSE
    EXPAND_PRAGMA   (C99  #pragma ԤΰޥŸ뤫
        Visual C:   TRUE
        ¾  :   FALSE
    IDMAX   identifier ͭĹ
        BC4/16  :   255
        ¾  :   1024
    NINCLUDEinclude directory κ
        BC4/16  :   16
        ¾  :   64

  NBUFFʥκĹǡĥȤ a space ˽ <backslash>
<newline> ˤ³򤷤κĹˡNWORKʽϤκĹˤϼ
Τ褦ˤƤޤNBUFF, NWORK ƱͤˤƤˡ
        BC4/16  :   4096
        ¾  :   65536

  NMACWORKʥޥŸХåեΥˤ NBUFF, NWORK Σܤ
ʤäƤޤ

  #include Υͥȥ٥ˤϡä¤ϤޤƱ˥ץǤ
եο˴ؤϣӤ¤ĶƤƤ⤫ޤʤˡ

  GNU C 2.7-2.95 Ǥ __STDC_VERSION__  199409L ȤʤäƤޤ3.
x Ǥ __STDC_VERSION__ ϥǥեȤǤϻ줺¹Իץ
˱褦ˤʤޤMCPP  GNU C ѤϤб
ΤǤ

  STDC_VERSION  0L ΤΤǤϡ__STDC_VERSION__ ϥǥեȤǤ 0L 
pre-define ޤ-V199409L ץ __STDC__  1 
__STDC_VERSION__  199409Lޥ '_' ǻϤޤΤȤ
̩ C95 ⡼ɤȤʤޤޤ-V199901L ץ C99 ⡼ɤȤ
ޤ
  C99 ⡼ɤǤ __STDC_HOSTED__  1  pre-define ޤ
__STDC_ISO_10646__, __STDC_IEC_559__, __STDC_IEC_559_COMPLEX__  MCPP
Ȥ pre-define ޤ󡣽ϤΥƥإåǤޤºݤˤϡ
glibc 2 / x86 ΥƥǤϥƥإåˤä __STDC_IEC_559__,
__STDC_IEC_559_COMPLEX__  1 졢¾νϤǤϤɤ

  HAVE_DIGRAPHS  FALSE ΤΤǤϡdigraph  MCPP ѴƤ
Ϥޤ
  EXPAND_PRAGMA  TRUE ǤäƤ⡢STDC, MCPP, GCC Τɤ줫ǻϤޤ #
pragma ԤϥޥŸޤ

  Include ǥ쥯ȥϼΤ褦ꤷƤޤ
  ޤUNIX Ǹ system-specific ʤΤ site-specific
ʤΤϼ̤Ǥ
        FreeBSD, Linux, CygWIN  :   /usr/include, /usr/local/include
        Plan 9  :   /sys/include/ape, /$objtype/include/ape
  Ϥ䤽ΥСˤäưۤʤ implementation-specific ʤΤ
̤ǤΥǥ쥯ȥޥ noconfig.H ޤ
config.h ˤޤ

    C_INCLUDE_DIR1 Ǥ
        FreeBSD 5.3 / GNU C 3.4.2       :   ʤ
        VineLinux 3.1   / GNU C 2.95.3  :
                /usr/lib/gcc-lib/i386-vine-linux/2.95.3/include
        VineLinux 3.1   / GNU C 3.2     :
                /usr/local/gcc-3.2/include
        VineLinux 3.1   / GNU C 3.3.2   :
                /usr/lib/gcc-lib/i386-vine-linux/3.3.2/include
        CygWIN 1.13 / GNU C 2.95.3-5    :
                /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/include
        BCC5.5  :   /BCC55/INCLUDE
        BCC4    :   /BC4/INCLUDE
    C_INCLUDE_DIR2 Ǥ
        VineLinux 3.1   / GNU C 3.2     :
            /usr/local/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/include
    CPLUS_INCLUDE_DIR1 Ǥ
        FreeBSD 5.3 / GNU C 3.4.2       :   /usr/include/c++
        VineLinux 3.1   / GNU C 2.95.3  :   ʤ
        VineLinux 3.1   / GNU C 3.2     :
                /usr/local/gcc-3.2/include/c++/3.2
        VineLinux 3.1   / GNU C 3.3.2   :   /usr/include/c++/3.3.2
        CygWIN 1.13 :   /usr/include/g++-3
    CPLUS_INCLUDE_DIR2 Ǥ
        FreeBSD 5.3 / GNU C 3.4.2       :   /usr/include/c++/backward
        VineLinux 3.1   / GNU C 3.2     :
                /usr/local/gcc-3.2/include/c++/3.2/i686-pc-linux-gnu
        VineLinux 3.1   / GNU C 3.3.2   :
                /usr/include/c++/3.3.2/i386-vine-linux
        Linux / GNU C 3.2   :   /usr/local/gcc-3.2/include/c++/3.2
    CPLUS_INCLUDE_DIR3 Ǥ
        VineLinux 3.1   / GNU C 3.2     :
                /usr/local/gcc-3.2/include/c++/3.2/backward
        VineLinux 3.1   / GNU C 3.3.2   :
                /usr/include/c++/3.3.2/backward

    Visual C ǡLCC-Win32 ǤǤϤäꤻĶѿ򻲾Ȥ
        롣Ķѿ Visual C, LCC-Win32 Ǥ INCLUDE, CPLUS_INCLUDE
        Ǥ롣

  ǤĤСѤ MCPP ꥳѥ뤹뤫Ķ
ǻꤹ뤫-I ץǻꤹ뤫Ƥ

  MCPP ϥץץ̤ NWORK-1 ĶϡʲĹ˹
ʬ䤷ƽϤޤʸƥĹ NWORK-2 ʲǤʤФʤ
ޤ

  ǰΤ˷֤ޤʾϤ MCPP 򥳥ѥ뤷Υޥ
ǤꡢMCPP μ¹ԥץबäƤȤ߹ߥޥǤϤޤ

  MCPP ϼΤ褦Ȥ߹ߥޥ⤤ĤäƤޤ(=value) Ƚ
ƤΤϤ value 졢¾ 1 ޤ
  __STDC__  1 ʾξ֤Ǥϡ_ ǻϤޤʤȤ߹ߥޥϺ
-N (-undef) ץǤ __MCPP ʳ٤ƺޤξ
-D ץꤷľƤ⤫ޤޤ󡣽ϤΥС󤬰㤦
ξϡMCPP ꥳѥ뤷ʤƤ⡢ˡ̥Сб
뤳ȤǤޤ-N  -U ȤʤƤ⡢-D Υޥ
뤳ȤǤޤBorland C ̥Сбˤϡɤ
Ǥ礦
  ϥեꤻ MCPP ươ#pragma MCPP put_defines 
ǤȡȤ߹ߥޥΰɽޤ

    FreeBSD 5 / GNU C 3.4:  __i386__, unix, __unix, __unix__,
                __FreeBSD__ (=5), __GNUC__ (=3), __GNUC_MINOR__ (=4),
                __MCPP (=2), __SIZE_TYPE__ (=unsigned int),
                __PTRDIFF_TYPE__ (=int), __WCHAR_TYPE__ (=int)
    Linux / GNU C 2.95:     __i386__, unix, __unix, __unix__, __linux__,
                __GNUC__ (=2), __GNUC_MINOR__ (=95), __MCPP (=2)
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    Linux / GNU C 3.2:  __i386__, unix, __unix, __unix__, __linux__,
                __GNUC__ (=3), __GNUC_MINOR__ (=2), __MCPP (=2)
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    Linux / GNU C 3.3.2:    __i386__, unix, __unix, __unix__, __linux__,
                __GNUC__ (=3), __GNUC_MINOR__ (=3), __MCPP (=2)
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    CygWIN 1.3.10:  __i386__, __CYGWIN__, __CYGWIN32__,
                __GNUC__ (=2), __GNUC_MINOR__ (=95), __MCPP (=2),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=short unsigned int)
    LCC-Win32:  __i386__, __WIN32__, WIN32, _WIN32, __FLAT__,
                __LCC__, __LCCDEBUGLEVEL (=0), __LCCOPTIMLEVEL (=0),
                __MCPP (=2)
    VC .net 2003:   __i386__, __WIN32__, _WIN32,  WIN32, __FLAT__,
                _MSC_VER (=1310), _MSC_EXTENSIONS, _M_IX86 (=600),
                __MCPP (=2)
    BC 5.5 / 32 bits:   __i386__, __WIN32__, WIN32, __FLAT__,
                __BORLANDC__ (=0x0550), __TURBOC__ (=0x0550),
                __MCPP (=2)
    BC 4.0 / 16 bits:   __8086__, MSDOS, __MSDOS__, __SMALL__,
                __BORLANDC__ (=0x0452), __TURBOC__ (=0x0452),
                __MCPP (=2)
    Plan 9 / pcc:   unix, __unix, __unix__, _PLAN9, __MCPP (=2)

  -+ (-lang-c++) ץ C++ Υץץꤷϡ
__cplusplus ޤνͤ 1L ǤΤۤˤ
Υޥޤ
    GNU C V.2.*   :   __GNUG__ (=2)
    GNU C V.3.*   :   __GNUG__ (=3)
    BC 4.0          :   __BCPLUSPLUS__ (=0x0320)
    BC 5.5          :   __BCPLUSPLUS__ (=0x0550)

  GNU C Ǥ V.3.2 ޤǤϻޥȸäƤ GNU C / cpp 
ΤϾʤ¿ gcc  cpp  -D ץϤΤǤ
ȤθߴΤˤ MCPP ɬפϤʤΤǤMCPP 
"pre-preprocess" ǡñΤưصΤ MCPP 
ޤ
  GNU C V.3.3 ʹߤ60 Ĥ 70 ĤΥޥ褦
ʤޤMCPP V.2.5 ǤʤǤޤäơ
GNU C V.3.3 ʹߤ˰ܿ줿 MCPP ǤϾ嵭Τۤ¿Υޥ
ޤƤ MCPP Υѥ mcpp_g*.h Ȥ
åեǤ狼ޤ

  FreeBSD, Linux, CygWIN / GNU C, LCC-Win32, Plan 9 / pcc  long long
äƤΤǡ-V199901L ץꤷ #if  long long,
unsigned long long ɾޤVisual C, Borland C 5.5 Ǥ long long
Ϥޤ󤬡__int64, unsigned __int64 ȤΤǤȤ
¾νϤǤ C90 Ʊ long, unsigned long ΤޤޤǤ
  νϤǤ long ϰϤϤ
        [-2147483647-1, 2147483647] ([-0x7fffffff-1, 0x7fffffff])
Ǥunsigned long Ϥ
        [0, 4294967295] ([0, 0xffffffff])
ϰϤǤ
  long long ĽϤǤϤ long long ϰϤ
        [-9223372036854775807-1, 9223372036854775807]
        ([-0x7fffffffffffffff-1, 0x7fffffffffffffff])
ǡunsigned long long ϰϤ
        [0, 18446744073709551615] ([0, 0xffffffffffffffff])
Ǥ
  νΤǤϤĤɽϣǤꡢ
ӥåȱ黻⤽бƤΤǡMCPP  #if ǤƱͤǤ
  αեȤϤ⻻ѥեȤǤꡢMCPP  #if ǤƱͤ
ʣӥåȤαեȤͤĤΤޤ 1/2 ˤʤˡ
  ν; operand ޤǤϤ
Standard C  ldiv() ؿƱŪ黻ԤΤǡMCPP  #if 
ǤƱͤǤ
  ΥƥʣϣӡˤǤϤʸåȤ ASCII ʤΤǡ
MCPP ǤƱͤǤMulti-byte character ΥǥեȤ encoding 
FreeBSD, Linux Ǥ EUC-JPPlan 9 Ǥ UTF-8¾ shift-JIS Ǥ

  䤬񤤤 kmmalloc Ȥ꡼롼󤬤ꡢmalloc(), free(),
realloc() ޤǤޤCygWIN ʳǤϤ줬󥹥ȡ뤵Ƥ
ϡmake  MALLOC=KMMALLOCʤޤ -DKMMALLOC=1ˤȤ
ꤹȤ줬 static link ޤ_MEM_DEBUG Ȥ⡼ɤ
ѥ뤵ƤơҡץΥǥХåѥ롼󤬥󥯤褦
ˤʤäƤޤXMALLOC Ȥޥ 1 Ƥˡerrno 
 EFREEP, EFREEBLK, EALLOCBLK, EFREEWRT, ETRAILWRT ˤ Linux, LCC-
Win32 ǤϤ줾 2120, 2121, 2122, 2123, 2124 򡢤ʳǤϤ줾
120, 121, 122, 123, 124 ƤƤޤmcpp-porting.txt [4.extra]
ȡˡ*

  GNU Υƥप Visual C ʳǤϡĶѿ TZ Ϥ餫 JST-9
˥åȤƤɬפޤʤȡ__DATE__, __TIME__ ޥ
ͤƤޤޤ

  * CygWIN 1.3.10 Ǥ malloc()  _malloc_r() Ȥ롼󤬤ꡢ
    ¾Υ饤֥ؿˤϤƤӽФΤĤ롣Τᡢ¾
     malloc() ȤȤǤʤ


ǥå

    [5.1]       ǥåη

  MCPP ФǥåȤΰ̣ϡʲ̤Ǥǥå
Ϥɸ२顼Ϥ˽Ϥ졢-Q ץǥȥǥ쥯ȥ
 mcpp.err Ȥե˥쥯Ȥޤ
  ǥåϼηȤäƤޤ

  "filename:line: "  "fatal error: ", "error: ", "warning: " Τ
줫³ [5.3] - [5.9] ΥåΤΤɤ줫³
"filename:line: " ˻Ϥޤ룱ԤοǥåȤΤϤʻ
ͤǤ뤬UNIX ΣýϤǤŪʿǷǡƼΥġ뤬
ȤƤΤǺѤƤ롣̾ΣԤˤޤʤȤФ
Ф롣
  ޥŸǤСΥޥƤӽФɽ롣ͥȤ줿
ޥƤӽФǤСͥȤ򤵤ΤܤäƤ줾Υޥ̾ɽ
롣DEBUG == TRUE ǥѥ뤵줿 MCPP ǤϡˤΥޥɽ
졢ΥޥΤ륽ե̾ȹֹɽ롣
  ե̾ȹֹȤιԤɽ롣ե뤬 include
줿ΤǤСinclude Υե̾ȹֹȹԤ缡ɽ
롣
  ɽԤ̾ϡΡʪԡפ \ ˤä³줿
ȤΡԡפ餵˥Ȥ a space ѴΤΤǤꡢ
ȤԤޤǤʣԤϢ뤵줿ΤȤʤ롣
Ϣ뤵줿ǸʪԤֹǤ롣Ƚ
translation phase ǤΥ顼Ǥϡ phase ιԤɽ롣

  -j ץꤷϡ嵭ΣȣϽϤޤ

  ǥåˤϼΣĤΥ٥뤬ޤ

    fatal error     :   ץץ򤳤ʾ³Ƥ̣ʤ
    error           :   ʸˡְäƤ
    warning         :   Portability Τʤְ㤤βǽΤ

  Warning ˤϤ˼ΣĤΥ饹ޤClass 1, 2 ʳϤ
ʤΤǤ

    class 1 :   ְ㤤βǽΤ롢ޤ portability 礤
    class 2 :   ʾ꤬뤬ºݤˤϤ֤Τʤ
    class 4 :   ºݤˤϤ֤꤬ʤ portability ˴ؤ warning
    class 8 :   åפ #if group 䡢#if ɾ򥹥åפ
        䡢ʸƥϢˤĤƤΤ warning
    class 16:   trigraph, digraph ˤĤƤ warning

  MCPP Ϥ¿οǥåѰդƤޤmcpp_std Ǥϼ
褦ʼˤΤܤäƤޤʤޤʬФä¿ʤˡ

    fatal error     :   19 
    error           :   75 
    warning class 1 :   36 
    warning class 2 :    8 
    warning class 4 :   15 
    warning class 8 :   23 
    warning class 16:    2 

  ˤĤơ§ȤƤιԤʬŪ˻Ŧޤ
  ʤʲǤϡǥåǰѤ륽Υȡ
ͤʬˤȤƲΥȡϤᤳǤޤΤͤΤ
˥ޥ̾񤤤ƤȤϡºݤˤϤΥޥŸͤɽ
ޤ
  ޤˤäƥ顼ȤƽФꥦ˥󥰤ȤƽФꤹå
⤢ޤʲǤƱΥåˤĤƤϺǽ˵ܤ
ǤäȤñ˥å¤٤ˤޤ
  ʤǥå˽ФƤ path-list ե̾ DOS/Windows 
ǤΤˤ٤ƾʸѴƤޤ

    [5.2]       Translation limits

  ʲΥ顼ˤϡХåեΥСե MCPP λ;
ˤΤޤХåե translation limits  system.H
ΥޥƤޤɬפʾϤ礭 MCPP ꥳ
ѥ뤷ƤʤξʤƥǤϡޤͤ
 out of memory ȯ䤹ʤΤǡۤɤۤɤˡˡ

    [5.3]       Fatal error

  I/O 顼­ץץ򤽤ʾ³뤳ȤǤʤ
硢ХåեСեץץ³Ƥ̣ʤˡ
Υ顼åФơץץߤޤƥץˤϡּԡ
ξ֤ͤޤ

        [5.3.1]     MCPP ȤΥХ

Bug:
    ΥåϿ濫ޤ MCPP ȤΥХ̣ޤ
    Υå DEBUG, DEBUG_EVAL  TRUE ƥѥ뤷
    MCPP ǤԤޤ줬Ф뤳ȤϤʤȻפޤ⤷Ф
    ҤξϢ

        [5.3.2]     ʪŪ顼

File read error
    եɤ߹ߤΥ顼ǤǥǤΤǤ礦
File write error
    ϥեν񤭽Ф顼ǤǥǤ뤫äѤˤ
    äƤΤǤ礦
Out of memory (required size is 0x123 bytes)
    ꤬­ʤʤޤMCPP ҡפ 0x123 bytes 
    ȤǤʤäˡξʤƥĹʥޥ
    ޤˤ¿ȯޤեʬ䤷ơ1
    translation unit Υޥ򸺤餷Ƥ

        [5.3.3]     Translation limits ХåեΥ顼

Too long header name "long-file-name"
    Include ٤եΥѥꥹȡʻΥǥ쥯ȥΥѥꥹȤ
    Ϣ뤷Ρˤ FILENAMEMAX ޤ NWORK ΥĶƤޤ
Too long source line
    ʪԤĹ NBUFF-2 ĶƤޤäΥǤϤʤ
    Ǥ礦
Too long logical line
    ʪԤ \ ˤä³ԤĹ NBUFF-2 Ķ
    ƤޤޤˤĹʥޥȯ뤳Ȥ
    Τ褦ʥɤϥޥǤϤʤؿȤƽ񤯤٤Ǥ礦
Too long line spliced by comments
    Ȥ a space ѴȤιԤĹ NBUFF-2 ĶƤޤ
    ԤޤȤˤä¿ιԤϢ뤷ȯޤ
    ȤʬΥƤ
Too long output line
    ץץιĹ NWORK - 2 ĶޤĹĥޥ
    ƤӽФƱԤ˴ޤޤƤΤ⤷ޤ󡣹Ԥʬ䤷Ƥ
    
Too long token
    ץץιԤ NWORK - 2 ĶĹΥȡ󤬴ޤޤƤ
    NWORK < NMACWORK ǥѥ뤵줿 MCPP ǤϥѥΤμ
    Ĺ˽ϹԤʬ䤷褦ȤޤޤĹȡ󤬤
    ʬ䤷ƤϤǤʤȤޤ

  ΣĤΥ顼ϥȡ󤬤ۤĹʤƤ⡢ޥŸˤΥȡ
ΤȤǥХåեСեˤʤäˤⵯޤξ
ϥޥƤӽФʬ䤷ƤޤʸƥϢȯ
뤳Ȥ⤢ޤξϹԤʬ䤷Ƥ

Too long quotation "long-string"
    ʸƥ롢ʸޤ header-name Ĺޤʸ
    Ǥʬ䤷Ƥܤʸƥ Standard C 
    ϤǤХѥΤϢ뤷Ƥޤ ʤCONCAT_
    STRINGS == TRUE ǥѥ뤷 MCPP ϼʬǤäƤޤˡ
Too long pp-number token "1234567890toolong"
    Preprocessing-number token Ĺޤmcpp_std ξǤ
Too long number token "12345678901234......"
    Number token Ĺޤmcpp_prestd ξǤ
Buffer overflow scanning token "token"
    token 򥹥󤷤Ƥ뤦˥ХåեСեȤʤޤʸ
    ƥ롢ʸheader-namepp-number ʳΥȡǤϡ
    ΥåФޤ

More than BLK_NEST nesting of #if (#ifdef) sections
    #if, #ifdef, #ifndef ΥͥȤ BLK_NEST ĶƤޤBLK_NEST
    Υޥ̾ʬϼºݤˤϤͤɽ롣ʲƱ͡ˡ#if
    section ʬ䤷Ƥ

Too many include directories "dir"
    Include directory λ꤬ NINCLUDE ĶƤޤ
Too many include files
    ܤΥեΥץץ #include إåե
    ο NINCLUDE*4 Ķޤʣ include إåե
    ϣĤȿޤ

            [5.3.4]     #pragma MCPP preprocessed ˴ؤ륨顼

This is not the preprocessed source
    #pragma MCPP preprocessed ޤ MCPP ˤäƥץץ
    줿եǤϤޤ
This preprocessed file is corrupted
     MCPP ˤäƥץץ줿եΤ褦Ǥ
    ƤƻȤޤ

    [5.4]       Error

  ʸˡŪʴְ㤤ˤΥ顼åФޤ
  Standard C Ǥϡviolation of syntax rule or constraint ä
Ϥϲ餫οǥåФʤФʤʤȤˤʤäƤޤ
mcpp_std ǤϤ violation ФƤϸ§Ȥƥ顼åФޤ
ϥ˥󥰤Ǥ

  ޤStandard C  undefined ȤƤΤ¿ˤĤƤ error
åޤ warning ФޤUndefined Ǥʤ error 
warning ФʤΤϡΤΤǤ
  ʸƥη header name  '  /*ñʤʸ
ư롣ºݤˤϤϡե򥪡ץ󤷤褦Ȥƥ顼ˤʤ
ϤǤ<, > ǰϤޤ줿 header name ǤϤʸӥ
ȤγϤȲᤵΤǡ餫Υ顼Ȥʤˡheader name 
 \  undefined Ǥ뤬åʤºݤˤϤϤե
Υץǥ顼ˤʤǤDOS/Windows ǤǤ \  class 2 
warning Ф / Ѵƽˡ
  #undef defineddefined Ȥ̾ #undef Τ undefined 
뤬MCPP Ǥ defined Ȥ̾Υޥ뤳ȤϤǤʤ褦
ˤʤäƤΤǡ줬ä뤳Ȥʤ
   illegal  multi-byte character sequence ä
 undefined Ǥ뤬ϼ³ϤʤΤǿǤʤʸƥ롢
ʸheader name  illegal multi-byte character sequence ˤϥ
˥󥰤Фˡ
  _ ǻϤޤ identifier ϽϤΤͽ󤵤Ƥꡢ桼ץ
ȷ̤ undefined Ǥ뤬ץץåǤϥ桼ץ
फǤʤɬȽ̤ǤʤΤǡǤʤ
  C99 ǥץȤƵꤵƤޥΤ
__STDC_ISO_10646__, __STDC_IEC_559__, __STDC_IEC_559_COMPLEX__ 
#define  #undef ꤹ undefined Ǥ뤬Ǥʤ
ΥޥϽϤΥإåե뤳ȤˤʤǤץ
ץåϥ桼ץफɤɬȽ̤ǤʤǤ롣
  C99  UCN ˤĤƤϡtranslation phase 2  <backslash><newline>
 UCN  sequence Ǥ硢ʸƥ
Ϣˤä UCN sequence 줿 undefined Ǥ뤬
ϿǤʤʤ UCN Ȥưˡ

  Standard C ΥץץǶŪ˲ violation of syntax rule or
constraint ǡ undefined ǲ unspecified ǲ implementation-
defined Ǥ뤫ˤĤƤϡcpp-test.txt 򻲾ȤƤ

  Fatal Ǥʤ error åФƤץץ³ޤλ
ȡ顼οɽƥץˡּԡפξ֤ͤޤ

        [5.4.1]     ʸȥȡ˴ؤ륨顼

Illegal control character 0x1b, skipped the character
    ʸƥ롢ʸheader nameȰʳΤȤ white
    space ʳΥȥ륳ɤޤʸ򥹥åפƽ
    ³ޤ

  ΣĤϥȡΥ顼ǤΣĤϤ⤽ιԤ򥹥åפ
ƽ³ޤΣĤʸƥΥȡǡԤι
ޤǤ˰䤬ĤƤʤȤ򼨤ޤ

    #error  I can't understand.

ʤɤȡpreprocessing-token sequence ηʤƥȤʸ
Ǥ⥳ȤǤʤȤ˽񤯤ȡμΥ顼ȤʤޤPre-
processing-token ΡʥѥΤǤΡˣä token ꤪޤ
Τǡʸ source character set ˴ޤޤƤФۤȤɤ
character sequence 餫 token sequence Ȥ̤Τǡpre-
processing-token 顼ȤʤΤϤǤ
  ʤåפ #if group Ǥ pp-token 顼ϥ顼Ȥʤ
ޤ

Unterminated string litera
    ʸƥ뤬뤷ƤޤʸƥԤޤ
    ϤǤޤɬפʤ顢ʣԤʸƥ񤤤ơϤˤ
    Ϣ뤵ƤΥ顼 # 黻Ҥˤʸ󲽤ȯ
    Ȥ⤢ޤξϹԤϥåפޤ
    mcpp_prestd  oldprep ⡼ɤǤϤϥ顼ˤʤޤʹ
    ƥνȤߤʤˡ
    ޤ-a (-lang-asm, -x assembler-with-cpp) ץǵư줿
    ϡԤޤʸƥȽǤơ\n ƼιԤϢ
    Τǡ顼ˤϤʤޤʥ˥󥰤ϽФˡ
Unterminated character constant 't understand.
    ʸ뤷Ƥޤmcpp_prestd  oldprep ⡼ɤǤϤ
    顼ˤʤޤʹƥνȤߤʤˡ
Unterminated header name <header.h
    header-name 뤷Ƥޤ<, > ǰϤޤ header-name  "
    ޤ ' äϤΥ顼ǤϤʤ嵭ĤΥ顼Ȥʤޤ
    ޤ<, > ǰϤޤ header-name  /* äϤ夬
    ȤȲᤵޤ
Empty character constant ''
    ʸȤǤ
Illegal UCN sequence
    mcpp_std  __STDC_VERSION__ ͤ 199901L ʾξ硢ޤ C++
    ξϡUCN ǧޤ̻ \u, \U ǻϤޤ룱
    sequence Υ줾죴Ƥޤ󡣡#if
    ʸǤ줬äȤϡUndefined escape sequence Υ
    ˥󥰤Ȥʤ롣ʳξϿǤʤˡ
UCN cannot specify the value "0000007f"
    UCN ϣʤ [0, 9f], [d800, dfff] ϰϤͤꤹ뤳ȤϤǤ
    ޤ󡣤ԤΤ 0x24 ($), 0x40 (@), 0x60 (`) ϲĤǤ
    ԤϤΣʸȤ٤ basic source character set ͤȰפ
    ΤǡȤޤ󡣤ޤԤ special characters Τ
    reserved area ȤʤäƤޤC++ ǤϸԤ¤Ϥޤ
    ʤʤʤ̯˰äƤˡC++ Ǥ -V199901L Ȥ
    ޥ __cplusplus  199901L ʾ˻ϡ˴ؤ
     C99 Ʊͤˤʤޤ
Illegal multi-byte character sequence "XY"
    OK_MBIDENT == TRUE ǥѥ뤷 mcpp_std ξ硢C99 Ǥ
    identifier  multi-byte character Ȥޤmulti-byte
    character Ȥǧʤ character sequence ȥ顼ˤʤ
    ޤ

        [5.4.2]     뤷ʤեΥ顼

  Υåϥե뤬뤷ʤԡȡ#if section
ޥƤӽФǽäƤ˽ФޤΥեϤ
include 줿եǤʤˤϡ"End of file" ǤϤʤ "End
of input" ɽޤ
  οǥå MCPP Υ⡼ɤˤäơ顼Ȥʤȥ
˥󥰤ȤʤȤޤ
  mcpp_std ǤϤϤ٤ƥ顼ǤιԤޥƤӽФϥ
פ#if section бطϤΥե뤬 include 줿ν
ᤷޤ
  mcpp_prestd Ǥϡ\ ǽ륽ϥåޤ󡣤ʳΤΤ
˥󥰤Ǥmcpp_prestd Ǥ⡢oldprep ⡼ɤǤ unterminated
macro call ʳϥ˥󥰤Фޤ

End of file with no newline, skipped the line
    ե뤬ԥɤΤʤԤǽäƤƤϤʤޤ
End of file with \, skipped the line
    ե뤬 <backslash><newline> ǽäƤƤϤʤޤ
End of file with unterminated comment, skipped the line
    ȤĤ˺Ǥ
End of file within #if (#ifdef) section started at line 123
    123 Ԥ #if (#ifdef, #ifndef) б #endif ޤ
End of file within macro call started at line 123
    123 ԤǻϤޤäޥƤӽФեνޤǤ˴뤷Ƥޤ
    󡣰ΥåбƤʤȡ󥨥顼äˡ
    ʬȤɤǤäƥեκǸޤã뤳Ȥ
    ʤ֤󤽤 Buffer overflow ȤʤˡޤޥŸ
    λͤ MODE ˤäưۤʤΤǡ MODE Ǥϰտ̤Ÿ
    ޥ¾ MODE ǤϤΥ顼ˤʤ뤳Ȥޤ

        [5.4.3]     Preprocessing group бطΥ顼

   #if, #else  group бطΥ顼ǤιԤ̵뤷
ơʤޤǤ group ³ƤΤȤơ˽³ޤΥ
åϤȤåפ #if group ˤäƤԤޤ
  ʤ#if (#ifdef) section Ȥ #if, #ifdef, #ifndef  #endif ޤǡ
#if (#elif, #else) group ȤϣĤ #if (#ifdef) section Τ #if (#
ifdef, #ifndef), #elif, #else, #endif ǤϤޤ줿Ĥιԥ֥å
ޤ

Already seen #else at line 123
    123 Ԥ #else 줿ˤޤ #else (#elif) Ƥޤ#endif
    ˺줿Τ⤷ޤ
Not in a #if (#ifdef) section
    #if (#ifdef, #ifndef) ʤ #else (#elif, #endif) Ƥޤ
Not in a #if (#ifdef) section in a source file
    Include 줿եǡ#if (#ifdef, #ifndef) ʤ
    #else (#elif, #endif) ƤޤInclude 줿ե뤬ե
    ˤХ顼ˤʤʤñΥեǤϥХ󥹤
    ȤƤʤȤǤmcpp_std λǤmcpp_prestd Ǥ
    ˥󥰡ˡ

  ΣĤ #asm, #endasm бطΥ顼Ǥmcpp_prestd
νϤξǤ

In #asm block started at line 123
    123 ԤϤޤä #asm ֥åˤޤ #asm ޤ#asm 
    ҤˤǤޤ󡣤֤#endasm ˺줿ΤǤ礦
Without #asm
    #asm ֥åǤϤʤȤ #endasm ޤ

        [5.4.4]     ǥ쥯ƥֹԤñʹʸ顼

  ʹߡ[5.4.12] ޤǡˤΥ顼ϥåפ #if group Ǥϵ
ޤ-W8 ץǵưȡUnknown directive ˤĤƤϥ
˥󥰤Фˡ
   # ǻϤޤǥ쥯ƥֹԤñʸˡ顼ǤιԤ̵
뤷ƽ³ޤʤʤ#if  section γϤȤߤʤ#line
ǤϹֹѤʤˡ#include, #line ԤΰޥǤС
ŸǥåԤޤmcpp_prestd ǤŸʤˡ
  ΥåΤΤˤϥǥ쥯ƥ̾ФƤޤ󤬡³
ɽ륽Ԥǥǥ쥯ƥ֤狼ޤʥǥ쥯ƥֹԤϥ
Ȥ space ѴȡɬԤˤʤˡ

Illegal #directive "123"
    # ³ȡ̾ǤϤޤ# ³Τϥǥ쥯ƥ̾
    ʤФʤޤʤoldprep ⡼ɤǤ #123  #line 123 
    ƱΤȤưˡ
Unknown #directive "pseudo-directive"
    pseudo-directive Ȥǥ쥯ƥ֤ϼƤޤ-a (-lang-
    asm, -x assembler-with-cpp) ץǵư줿ϡ顼ˤ
    ʤ餺˥󥰤ˤʤޤ
No argument
    #if, #elif, #ifdef, #ifndef, #assert, #line ΰޤ
No header name
    #include Ԥΰޤ󡣤ޤϰޥǤŸ
    Ȥˤϥȡ󤬲ʤʤޤ
Not a header name "UNDEFINED_MACRO"
     header name ǤϤޤheader name ϤΥޥ
    ƤʤʤɤǤ<, > ޤ ", " ǰϤޤ줿Τ
    header name Ǥ
Not an identifier "123"
    #ifdef, #ifndef, #define, #undef ˤ identifier ΰɬפǤ
    123  identifier ǤϤޤ
No identifier
    #define, #undef ΰޤ
No line number
    #line ΰޥǤŸȤ ˤϲȡ
    󤬻ĤʤʤäƤޤޤ
Not a line number "name"
    #line ΰͥȡpreprocessing numberˤǤϤޤ
    
Line number "0x123" isn't a decimal digits sequence
    #line ϽȡǤʤФʤޤmcpp_std 
    Ǥmcpp_prestd ϥ˥󥰤ϽФʡ
    ǧˡ
Line number "2147483648" is out of range of [1,2147483647]
    #line  [1,2147483647] ϰϤˤʤФʤޤ0 ⥨
    顼Ǥmcpp_std ξǤ__STDC_VERSION__ < 199901L ޤ
    __cplusplus < 199901L ξϤΰͭϰϤ [1,32767] Ǥ
    [32768,2147483647] ϰϤϥ顼ǤϤʤ˥󥰤ˤȤɤƤ
    
Not a file name "name"
    #line ̾ʸƥǤʤФʤޤ
    Identifier 磻ʸƥǤϤޤ

  Υ顼 mcpp_std ξǡΥǥ쥯ƥ̵֤뤵
mcpp_prestd Ǥϡoldprep ⡼ɤǤϥ顼⥦˥󥰤Фǥ
ȤǤϥ˥󥰤Ȥʤꡢ "junk" ʤäΤȤƥץץ
³ޤ

Excessive token sequence "junk"
    #else, #endif, #asm, #endasm ιԤ;פʥƥ junk ޤ#
    ifdef, #ifndef, #include, #line, #undef ιԤθ;
    ʥƥ junk ޤϥȤȤƽ񤤤Ƥ

        [5.4.5]     #if ιʸ顼

   #if, #elif, #assert ǥ쥯ƥμιʸ˴ؤ륨顼Ǥ
  #if (#elif) ǥ顼äϡ #if (#elif) Ԥϵɾ
ΤȤơʤʤ group 򥹥åפơˡץץ³

  åפ #if (#ifdef, #ifndef, #elif, #else) group ˤĤƤϡ
줬ä legal  preprocessing token ΩäƤ뤫ɤȡ#if
 group бطϥåޤ¾ʸˡ顼ϥ顼ˤ
ʤޤ
  #if ԤΤΤǤϡɾ򥹥åפʬޤ㤨
#if a || b Τ褦ʼ a Ǥϡb ɾϹԤޤ󡣤
Σʸˡ顼ʤ translation limit Υ顼ϤȤɾ
򥹥åפʬˤäƤåޤ

More than NEXP*2-1 constants stacked at "12"
    #if ɾǡåѤޤƤ 12 ΤȤ NEXP*2-1
    ʾˤʤޤ#if ΥͥȤޤ
More than NEXP*3-1 operators and parens stacked at "+"
    #if ɾǡåѤޤƤ黻Ҥȥåιפ + Τ
     NEXP*3-1 ʾˤʤޤʥåϰФ򣲤Ĥȿˡ#if
    ΥͥȤޤ
Misplaced constant "12"
    #if Τ٤Ǥʤ֤ 12 ޤ#if Ǥϥ㥹
    ȤϻȤޤ󤬡(int)0x8000 ʤɤȥ㥹ȤȤäꤹȡint 
    ޥȤƤʤ identifier Ȥߤʤ 0 ɾ
    ǡ(0)0x8000 ȤʤꡢΥ顼ȯޤ
Operator ">" in incorrect context
    #if ̯ʰ֤ > Ȥ黻Ҥޤޥ MACRO ĤΥ
    Ƥˡ#if MACRO > 0 ʤɤȤȡޥŸ
     #if > 0 ȤʤΤǡΥ顼ȤʤޤʤξϤľ
    Macro "MACRO" is expanded to 0 token Ȥ˥󥰤ФΤǡ
    Ȥ狼ˡ
Unterminated expression
    #if 뤷ƤޤMACRO ĤΥȡƤ
    #if a || MACRO ʤɤξǤ
Excessive ")"
    #if  ( бʤ;פ ) ޤ
Missing ")"
    #if  ( б ) ޤ
Misplaced ":", previous operator is "+"
    ? бʤ : ޤ
Bad defined syntax
    #if defined ʸˡְäƤޤäбȤƤʤäꡢ
    identifier ˤʤäƤʤäξǤDEBUG == TRUE ǥ
    ѥ뤵줿 MCPP ǤϡޥŸη̡Υ顼ä
    ϡΥå³ƤŸ̤ɽޤ
Can't use a string literal "string"
    #if ˤʸƥϻȤޤ
Can't use a character constant 'a'
    poststd ⡼ɤǤ #if ʸ磻ʸϻȤޤ
    
Can't use the operator "++"
    #if ˻Ȥʤ黻Ҥޤ=, ++ Ǥ
Not an integer "1.23"
    #if ԤˤʸޤˤȤޤ
Can't use the character 0x24
    #if ˻Ȥʤʸʥ 0x24ˤޤidentifier, operator,
    punctuator, string literal, character constant, preprocessing number
    Τɤ preprocessing token ˤפʤʸΥȡ
    ʥȥ륳ɤϤ˥åƤΤǡʳʸ
    ˡ$  identifier ǧϤǤϡMCPP  OK_DOLLAR ==
    TRUE Ȥƥѥ뤷ƤʤȡΥ顼ȯޤ
    󡢥åפ group ˤΤϥåޤ

   #if sizeof ˴ؤ륨顼ǤOK_SIZE == TRUE ǥ
뤵ƤǤ

sizeof: Syntax error
    #if sizeof ʸˡְäƤޤäʤäꡢä¿
    ꡢäбȤƤʤäꡢʤäꤹ
    
sizeof: No type specified
    #if sizeof (type)  type ꤵƤޤsizeof (*) ʤɤǤ
    sizeof ((*)()) ϴؿؤΥݥ󥿤Υ legal ʹʸǤ

        [5.4.6]     #if ɾ˴ؤ륨顼

  Υ顼ɾ򥹥åפʬˤϵޤ-W8 
ץǤϤˤĤƤ⥦˥󥰤Фˡ

Constant "123456789012" is out of range
    ͤ unsigned long ɽǤϰϤĶƤޤ
    unsigned long ΤʤϤǤ longʲƱ͡ˡ__STDC_VERSION__
    ޤ __cplusplus ͤ 199901L ʾξϡlong long Ľ
    ϤǤϡϰϤ unsigned long long ϰϤȤʤޤʰʲƱ͡ˡ
Integer character constant 'abcde' is out of range
    ʸ 'abcde' ͤ unsigned long (unsigned long long) ɽ
    ϰϤĶƤޤ
Wide character constant L'abc' is out of range
    磻ʸ L'abc' ͤ unsigned long ɽǤϰϤĶ
    ޤʸ UTF-8  encode ƤϡʸХȤ
    ͤɾΤǡʸǤ long ϰϤĶޤ-V199901L 
     C99 λͤˤȡʸޤǤ long long ϰϤˤޤ
    ޤmcpp_std λǤ
CHARBIT bits can't represent escape sequence '\x123'
    ʸΣĤ escape sequence ͤ CHARBIT bits ɽǤ
    ϰϡ[0, UCHARMAX]ˤĶƤޤ
CHARBIT*2 bits can't represent escape sequence L'\x12345'
    磻ʸΣĤ escape sequence ͤ CHARBIT*2 bits UTF-
    8 ξ CHARBIT*4 bitsˤɽǤϰϤĶƤޤmcpp_std
    λǤ
Division by zero
    #if  0 ˤ껻ޤ껻 / ˤΤ % ˤ
    Τޤ#if dividend / divisor ..  divisor ޥȤ
    Ƥʤʤɤ˵ޤ#if defined divisor &&
    (dividend / divisor ..) Ƚ񤯤ȤǡΥ顼򤱤뤳ȤǤ
    
Result of "op" is out of range
    黻 op ˤ黻η̤ long ϰϳȤʤޤop ϣ
     *, /, %, +, - Τɤ줫Ǥɽξϡ
    ñ - 黻Ҥ -LONG_MIN ǡC99 Ǥ -LLONG_MIN ǡ˥Сե
    ȤʤޤUnsigned long (unsigned long long) ϥСե
    ȤʤΤǥ顼ˤϤʤޤ󤬡Ūʱ黻̤ϰϳȤʤ
    ϥ˥󥰤Фޤ

   sizeof ˴ؤ륨顼ǤåפʬǤϽФޤ-W8
ץǤϥ˥󥰤ФˡOK_SIZE == TRUE ξǤ

sizeof: Unknown type "type"
    #if sizeof (type)  type ѤǤ
sizeof: Illegal type combination with "type"
    #if sizeof (long float) ȡȤ߹碌ѤǤMCPP 
    äƤƱȤ߹碌ѤǤϤʤʤ뤳Ȥ⤢ޤlong long ˡ

        [5.4.7]     #define Υ顼

   #define ˴ؤ륨顼Ǥޥޤ
  #, ## 黻Ҥ˴ؤ륨顼 mcpp_std ΤΤǤ
  __VA_ARGS__ ˴ؤ륨顼 mcpp_std ξǤѰޥ C99
λͤǤGNU C ȤθߴΤ C90 Ǥ C++ ǤͭȤƤޤ
ʤ˥󥰤Фˡ

"defined" shouldn't be defined
    defined Ȥ̾ΥޥǤޤ󡣤 mcpp_std ǥ
    ޤ
"__STDC__" shouldn't be redefined
    ޥ __STDC__  #define Ǥޤ__STDC_VERSION__, __FILE__,
    __LINE__, __DATE__, __TIME__ C99 ⡼ɤǤ __STDC_HOSTED__ 
    -+ ץǤ __cplusplus ƱͤǤ mcpp_std ǥ
    ޤ
"__VA_ARGS__" shouldn't be defined
    C99 ǤϲѰޥִꥹ __VA_ARGS__ Ȥѥ
    ᡼Ȥޤ identifier ϥޥȤ뤳ȤϤ
    ޤ
More than NMACPARS parameters
    ޥǥѥ᡼ο NMACPARS ĶƤޤ
Empty parameter
    ޥ˥Υѥ᡼ޤ
Illegal parameter "123"
    ޥ identifier ʳΥȡ󤬥ѥ᡼˻ȤƤޤ
    mcpp_std Ǥϡidentifier ǤäƤ __VA_ARGS__ ϥѥ᡼Ȥ
    Ȥޤ
Duplicate parameter name "a"
    ޥ a Ȥѥ᡼̾ʣƤޤ
Missing "," or ")" in parameter list "(a,b"
    ޥǥѥ᡼ꥹȤĤ ) ޤ󡣤ޤϥѥ᡼
    ľ ',' Ǥ ')' Ǥʤ̤Υȡ󤬤ޤ
No token before ##
    ޥִꥹ ## 黻Ҥ˥ȡ󤬤ޤ
No token after ##
    ޥִꥹ ## 黻Ҥθ˥ȡ󤬤ޤ
## after ##
    ޥִꥹ ## ## Ȥȡ¤Ӥޤ
    ϥ顼ǤϤʤȤ⤢뤫⤷ޤ󤬡## Ȥ
    ¾ΥȡϢ뤵ɬ valid ǤʤȡȤʤ
    ǡΥޥŸˤɬ顼ˤʤޤMCPP ǤϤϥޥ
    ˥顼ˤޤ
Not a formal parameter "id"
    ؿͥޥ # 黻ҤΥڥ id ѥ᡼̾ǤϤ
    ޤ
"..." isn't the last parameter
    "..." Ȥѥ᡼ϥޥκǸΥѥ᡼ǤʤФʤ
    󡣡mcpp_prestd Ǥ ...  Illegal parameter 顼ˤʤˡ
"__VA_ARGS__" without corresponding "..."
    ִꥹ __VA_ARGS__ Ȥ identifier  ... Ȥѥ᡼
    礷Ȥޤ

        [5.4.8]     #undef Υ顼

   #undef ˴ؤ륨顼Ǥ

"__STDC__" shouldn't be undefined
    ޥ __STDC__  #undef Ǥޤ__STDC_VERSION__, __FILE__,
    __LINE__, __DATE__, __TIME__ C99 ⡼ɤǤ __STDC_HOSTED__ 
    -+ ץǤ __cplusplus ƱͤǤ mcpp_std ξ
    åޤ

        [5.4.9]     ޥŸΥ顼

  ϥޥŸ˴ؤ륨顼Ǥ
  DEBUG == TRUE ǥѥ뤵줿 MCPP ǤϡΥޥɽ
졢ΥޥΤ륽ե̾ȹֹɽޤ#, ## 
Ҥ˴ؤ륨顼 mcpp_std Ǥ

Less than necessary N argument(s) in macro call "macro( a)"
    ޥƤӽФΰ­ޤmacro ˤϰ N ɬפǤ­
    ʤˤ 0 ĤΥȡƤơ³ޤѥ᡼
    ĤǰξϥȰηȤζ̤Ĥޤ
    ϥ顼ˤޤ
    oldprep ⡼ɤǤϤϥ˥󥰤Ǥ
More than necessary N argument(s) in macro call "macro( a, b, c)"
    ޥƤӽФΰ¿ޤmacro ΰ N ĤΤϤǤ;
    פʰΤƤơ³ޤ
    oldprep ⡼ɤǤϤϥ˥󥰤Ǥ
Not a valid preprocessing token "+12"
    ## 黻ҤˤäƣĤ pp-token Ϣ뤷Ȥ"+12" Ȥ
    invalid ʤΤˤʤޤϸڤΥ뤫⤷ޤ󤬡
    Τޤ޽³ޤ-lang-asm (-x assembler-with-cpp, -a) ץ
    󤪤 compat ⡼ɤǤϡϥ˥󥰤Ǥ
Not a valid string literal "\\"str\""
    # 黻ҤˤäƥޥƤӽФΰʸ󲽤Ȥͭʡñ
    ΡʸƥȤϤʤ餺"\\"str\"" Ȥ token sequence 
    ʤޤƥγ \ Τ뤳ȤǤʥƥγ \
    ʸ󲽤ȡUnterminated string literal Υ顼ˤ
    뤳Ȥ⤢ꡢΥ顼ˤʤʤȤ⤢ˡΤޤ޽³
    ֤󥳥ѥեǺ٥顼ˤʤǤ礦poststd 
    ɤǤϤΥ顼ȯޤUnterminated string literal Ϥ
    ˡ

  ʲΥ顼ǤϡΥޥƤӽФϥåפޤ

Buffer overflow expanding macro "macro" at "something"
    ޥŸ something ΤȤǥХåեСեޤ
    ޥʬ䤷Ƥ
Unterminated macro call "macro( a, (b, c)"
    ޥƤӽФ뤷Ƥޤ󡣤Υ顼ΤϤƤϡ
    ǥ쥯ƥֹԤǤΥޥƤӽФιԤǴ뤷ƤʤǤ
    ޤmcpp_std ǤϰΥޥϰִΩäŸޤ
    λˤΥޥƤӽФϤΰǴ뤷ƤʤФʤ
    ޤpoststd ⡼ɤǤϥޥִꥹˤޥƤӽФ
    ִꥹȤǴ뤷Ƥʤ⡢Υ顼Ȥʤޤ
Rescanning macro "macro" more than RESCAN_LIMIT times at "something"
    ޥΥͥȤơŸ "something" ΤȤǺβ
     RESCAN_LIMIT Ķޤmcpp_std ξǤޤ
    ꤨޤ
Recursive macro definition of "macro" to "macro"
    ޥƵŪǤ mcpp_prestd λꤦ륨
    Ǥβ RESCAN_LIMIT ãȺƵŪޥȤߤ
    ޤ

        [5.4.10]    #error, #assert

#error
    #error ǥ쥯ƥ֤¹Ԥޤ #error Ԥɽޤ
    ʰΤΤ˥ȡ󥨥顼Unterminated string ˤä
     #error ϼ¹Ԥʤˡ#error  mcpp_std ξǤ
Preprocessing assertion failed:
    #assert ǥ쥯ƥ֤¹Ԥޤθդ³ #assert 
    ΰϤޤμΤΤ˥顼äϡasser-
    tion ԤΤȤߤʤޤ#assert  mcpp_prestd  COMPILER !
    = GNUC ξǤ

        [5.4.11]    #include μ

Can't open include file "file-name"
    Include ٤ե뤬¸ߤʤˤΥ顼ȯޤ
    ե̾Υڥߥ include directory λδְ㤤Ǥ礦

        [5.4.12]    ¾Υ顼

Operand of _Pragma() is not a string literal
    _Pragma() operator ΰϣĤʸƥޤϥ磻ʸ
    ƥǤʤФʤޤOK_PRAGMA_OP == TRUE ǥѥ뤷
    mcpp_std  -V199901L ץꤷΤΤǤC++ Ǥ
    -V199901L ץǵưƱͤǤ

    [5.5]       Warning (class 1)

  ʸˡŪˤϴְ㤤ǤϤʤν񤭴ְ㤤βǽ port-
ability Τˡwarning ФޤWarning ˤ 1, 2, 4, 8,
16 ΣĤ class ޤMCPP εư -W <n> Ȥץ
ꤹ뤳Ȥǡ餬ͭˤʤޤ<n>  1, 2, 4, 8, 16 ΤǤ
դΤΤ OR ȤäΤǤʤʲ -W4 ȸäƤ
ϡ-W<n>  <n> & 4 ξΤȤǡ4, 5, 6, 7, 12, 13, 14, 15, 20,
21, 22, 23, 28, 29, 30, 31 ޤߤޤ

  mcpp_std Ǥ Standard C  undefined ȤƤư
¿ error ˤޤˤĤƤ warning Фޤ

  Ʊͤ mcpp_std Ǥ Standard C  unspecified ȤƤͤȤ
ФƤϡʳɬ warning Фޤ
  #if  sub-expression ɾˤĤƤϡwarning ϽФʤ
||, &&, ? : ʳα黻Ҥ˴ؤƤ operand ɾ unspecified Ǥ
뤬#if ѤʤΤǡɾϷ̤ˤϱƶʤ
Ǥ롣MCPP ǤϡȡɾϾ˽иƱ˺鱦˹
δ֤α黻Ͼ˱黻ҤΥ롼ԥ󥰤ε§˽äơι
ɬפˤʤä˽ƹԤ

  mcpp_std Ǥϡimplementation-defined ȤƤư¿ˤĤƤ
warning ФޤImplementation-defined Ǥʤ warning νФʤ
ΤϡǤ
  #include directive  include եõꡢ
#include ΰ header-name Ȥ pp-token ۤˡ
 warning ФƤΤǤϤ뤵header-name ϥޥǤʤС
Υȡ space ̵ͭޤƤΤޤ޻Ȥ롣ޥǤС
Ÿ̤ space ̵ͭޤƤΤޤ޻Ȥpoststd ⡼
ɤǤϡޥŸˤä pp-token ֤ space 뤬ξ
<  > ޤǤ space ƤäĤΤ header-name Ȳ᤹롣
ɤˤƤ poststd Ǥ <, > ˤ header-name  obsolescent
feature ǤˡWarning ϽФʤˡ#pragma MCPP debug
path, #debug path ǥѥɽ롣
  #if Ǥ single byte ʸ'a' ˤɾȡñ multi-
byte character Υ磻ʸL'' ˤɾϴʸå
ƱǤäƤ⡢single byte ΥʤȤ̵ͭȤ en-
coding Ȥˤä portability Ϥ¤ΤǤ뤬꤬ʤ
UCN ˤĤƤƱͤǤ롣
  #if ӥåȱ黻ɽˤäƷ̤ͤ
ʤ뤬ȾΥޥϣɽȤäƤΤǡȤ
portability ϤۤȤ¸ߤʤαӥåȥեȤ
 operand ޤν portability ˳Τǡ
warning Ф
  Token separator ȤƤʣ white spaces  sequenceStandard
C Ǥ translation phase 3 Ǥ one space ˰̤뤫ɤ
implementation-defined ȤƤ뤬̾ϥ桼Ϥޤäˤɬ
פϤʤPortability ˤʤΤϡpreprocessing directive Ԥ
<vertical-tab> ޤ <form-feed> Ǥ롣MCPP ǤϤ
 space Ѵ뤬λ warning Фʣ space, tab 
sequence  one space ۤäư̤롣
  ȼȤ߹ߥޥˤĤƤ warning ϽФʤ
  #pragma sub-directive ˤĤƤ⸶§Ȥ warning ϽФʤ
ѥΤ #pragma ǧʤϤǤϡMCPP Ȥ
 #pragma once, #pragma __setlocale, #pragma MCPP *, ʳ warning 
Ф MCPP  #pragma ǰְäƤ⡢
warning ФޤGNU C V.3 Ǥ #pragma GCC poison (dependency,
system_header) Τ褦ˡ°ΥץץåϽ뤬 MCPP 
ʤ #pragma ˤĤƤ warning Ф
  C99 ǤϡUCN sequence  # 黻Ҥˤäʸ󲽤硢\ 
\\ Ȥդ˽Ťͤ뤫ɤ implementation-defined ȤʤäƤ뤬
ˤĤƤ warning ϽФʤMCPP Ǥ \ ϽŤͤʤ

  äơMCPP ǤϥץץΥ٥Ǥ portability Υå
ܴۤ˹ԤȤǤޤ
  poststd ⡼ɤǤϡ[2.4] ˤͤΰ㤤Сmcpp_std Υǥե
ȥ⡼ɤƱͤǤ
  ˥󥰤ĽФƤ⡢פξ֤ͤޤ-W0 Υץ
ǵưȡ˥󥰤ϽФޤ

        [5.5.1]     ʸȡ󤪤ӥȤ˴ؤ륦˥

Illegal control character 0x1b in quotation
    ʸƥ롢ʸheader name  white space Ǥʤ
    륳ɤޤϥѥΤǥ顼ˤʤ뤫⤷
    ޤ󡣤ǤʤƤ⡢ʤǤȥ륳ɤʸ
    ƥ롢ʸǤ escape sequence ǽ񤯤٤Ǥ
Illegal multi-byte character sequence "XY" in quotation
    ʸƥ롢ʸheader name  XY ΣХܤ multi-
    byte characterʴˤΣХܤǤХܤ multi-byte
    character ΣХܤǤϤޤ"XY" ɽϲϤˡ
     multi-byte character ȤߤʤХܤ single byte
    character ȤơХܤϼʸȤưޤ
    볰⵬ϰϤΥɤǤС˥󥰤ϽФޤ󡣤
    ϰϤˤºݤˤʸΤʤ꤬Ȥɤˤޤ
    MCPP ϤޤǤϥåޤ󡣵ϰϤϼ̤Ǥ
        encoding            first byte              second byte
        shift-JIS       0x81-0x9f, 0xe0-0xfc    0x40-0x7e, 0x80-0xfc
        EUC-JP          0x8e, 0xa1-0xfe         0xa1-0xfe
        KS C 5601       0xa1-0xfe               0xa1-0xfe
        GB 2312-80      0xa1-0xfe               0xa1-0xfe
        Big Five        0xa1-0xfe               0x40-0x7e, 0xa1-0xfe
        ISO-2022-JP     0x21-0x7e               0x21-0x7e
    ISO-2022-JP ˤʸɤΤۤ shift sequence ȤΤ
    Shift sequence ̤ˤȡUTF-8 ʳϤ٤ multi-byte
    character ϣХȤǤ
    UTF-8 Ǥ multi-byte character ϣХȤޤϣХȤǤꡢ
    ϣХȤ encode ޤХܤ 0xc2-0xefХܤȣ
    Хܤ 0x80-0xbf ϰϤˤޤܺ٤Ͼάޤɤ
    Ƥ⡢ХܤޤǤ٤ϰϤˤʤФʤޤ
    ʤEUC-JP  0x8f + 0xa1-0xfe + 0xa1-0xfe ΣХ encoding
    JIS X 0212 ΤˤϣʸȤƤǧǤ0x8f,
    0xa1-0xfe + 0xa1-0xfe ΣʸȤǧޤη̡
    ˥󥰤Ф#if Υ磻ʸɾʳϡưޤ
    EUC-JP ǤϣХܤ 0x8e ʸJIS X 0201 ΤȾѥ
    ʡˤϣХ encoding ǤΤǡmulti-byte character Ȥư
    ޤ
    Υ˥󥰤ϥåפ #if group ǤϽФޤ
"/*" in comment
     /* Ȥ sequence ޤտޤƽ񤤤ΤǤʤ
    СȤĤ˺Ǥ礦ȤϥͥȤǤޤ
Too long identifier, truncated to "very_long_identifier"
    Identifier Ĺ IDMAX ĶƤΤǡIDMAX ˽̤ޤ
Illegal digit in octal number "089"
    ʤοͥȡ 8 ޤ 9 ʸޤmcpp_prestd Ǥ
    Фޤmcpp_std Ǥ̾ιԤοͥȡˤĤƤȽ
    ޤ#if ˤΥȡ󤬤С Not an integer 顼
    ΰȤʤޤ
Unterminated string literal, catenated to the next line
    ĤƤʤʸƥ̾ϥ顼Ǥ-lang-asm
    (-x assembler-with-cpp, -a) ץǵư줿ϡϹԤ
    ޤʸƥȲᤷơ'\n' ƼιԤϢ뤷ޤ
    ν򤹤åȤϲʤΤǡܤʸ
    ƥϢפεǽȤäƽ񤤤Ƥ

        [5.5.2]     뤷ʤեΥ˥

  Υ˥󥰤 mcpp_prestd ǤФޤmcpp_std Ǥϥ顼ˡ
ϤνǤʤϡΥ˥󥰤̵뤷ƽ³ޤ
η̤Ϥ̯ʥ顼Ǥ礦oldprep ⡼ɤǤ
unterminated macro call ʳϥ˥󥰤Фޤ

End of file with no newline, skipped the line
End of file with \, skipped the line
End of file with unterminated comment, skipped the line
End of file within #if (#ifdef) section started at line 123
End of file within macro call started at line 123
End of file with unterminated #asm block started at line 123
    123 Ԥ #asm б #endasm ޤ

        [5.5.3]     ǥ쥯ƥֹԤ˴ؤƼΥ˥

The macro is redefined
    DEBUG == TRUE ǥѥ뤵줿 MCPP Ǥϡ³ư
    ե̾ȹֹ椬ɽޤ
    ޥȤϰäƤǺޤƤ
    ˰㤤ޤƱ̾ΥޥʣƤϡ
    ƤʤȤΥ˥󥰤Фޤ
    ѥ᡼οƱ
    ִꥹȤƱʤȡ֤Σİʾ white spaces 
    ĤäƤ⣱ĤȤߤʤpoststd Ǥ token separator äƤ
    ʤƤ⼫ưŪ a space ѴΤǡtoken separator ΰ㤤
    ˤʤʤˡ
    mcpp_std Ǥϥѥ᡼̾Ʊpoststd ǤϤϥå
    mcpp_prestd Ǥåʤ

  ΣĤ mcpp_std ξǤ

No space between macro name "MACRO" and repl-text
    #define ԤΥޥִ̾ΥꥹȤȤδ֤˥ڡޤ̾
    ϤꤨʤȤǤ
        #define THIS$AND$THAT(a, b)     ((a) + (b))
    Ȥդ˥ޥ̾˵ʳʸȤƤȡ
        #define THIS    $AND$THAT(a, b) ((a) + (b))
    ȲᤵơΥ˥󥰤Фޤ
"and" is defined as macro
    C++  and ޥȤޤ
    C95 Ǥ <iso646.h> ǥޥȤ "and" Σ̾
    ϡC++ Ǥ operator token ǤC++ ǤϤϥޥȤ
    ȤǤʤΤǤ operator ȤƼƤʤϤ
    Ȥ褦ˡޥȤ뤳Ȥʤ饦˥󥰤
    ޤ

  ΣĤ mcpp_std ξǤ

No sub-directive
    #pragma Ԥ˲ΰ⤢ޤ󡣤ιԤ̵뤵ޤ
Unknown argument "name"
    #pragma name Ȥǥ쥯ƥ֤ϤޤPRAGMA == FALSE ξ
    Фޤ
Unknown encoding "encoding"
    #pragma __setlocale( "encoding") ǻꤵ줿 "encoding" Ȥ
    encoding ϼƤޤ
Too long encoding name "encoding"
    #pragma __setlocale( "long-long-encoding") ǻꤵ줿
    "long-long-encoding" Ȥ encoding ̾ 19 ХȤĶƤΤǡ
    ̵뤷ޤ

Bad push_macro syntax
Bad pop_macro syntax
    #pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro,
    #pragma pop_macro ιʸְäƤޤ #pragma Ǥϰ
    ϥޥ̾ ", " ǰϤߡˤ (, ) ǰϤǡ
     ("MACRO") ȤʤФʤޤʾĹʻͤǤˡ
"MACRO" has not been defined
    #pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro,
    #pragma pop_macro ΰǤ ("MACRO")  MACRO Ϥ⤽ޥ
    Ƥޤ
"MACRO" is already pushed
    #pragma MCPP push_macro( "MACRO")  MACRO ϤǤ push 졢
    ˤθ #undef ƤޤMACRO κʤ push Ǥޤ
    
"MACRO" has not been pushed
    #pragma MCPP pop_macro( "MACRO")  MACRO  push Ƥޤ󡣤
    Ǥ pop 줿Τ⤷ޤ

  GNU C ǤϼΥ˥󥰤Фޤ

Ignored #ident
Ignored #sccs
    #ident, #sccs ιԤ̵뤷ޤ

  ξ ([5.5.3]) ΰʲ #pragma ˴ؤ륦˥󥰤ǤϡPRAGMA =
= TRUE ǤС˥󥰤ϽФƤ⤳ιԤϤΤޤ޽Ϥޤ

  ΣĤ DEBUG == TRUE and/or DEBUG_EVAL == TRUE ξǤ

Unknown argument "name"
    #pragma MCPP debug, #debug ΰȤ "name" ϼƤޤ
No argument
    #pragma MCPP debug, #debug ΰޤ
Not an identifier "123"
    #pragma MCPP debug, #debug ΰ identifier ǤϤޤ

  GNU C ѤǤ #pragma GCC  poison, dependency, system_header
Τɤ줫³Ԥ class 2 Υ˥󥰤ФǼΤƤޤ
GNU C V.3 ǤϥץץåΤǤMCPP Ͻޤ

   mcpp_prestd ǽФޤmcpp_std Ǥϥ顼ˡ

Not in a #if (#ifdef) section in a source file
Line number "0x123" isn't a decimal digits sequence

   OK_IF_JUNK == FALSE ξФޤmcpp_std Ǥ #pragma once,
#pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro, #
pragma pop_macro, #pragma __setlocale, #pragma setlocale, #pragma MCPP
put_defines, #pragma MCPP debug, #pragma MCPP end_debug ǤǤ
mcpp_std Τ¾ξϥ顼oldprep Ǥϥ顼⥦˥󥰤
ʤˡ

Excessive token sequence "junk"

        [5.5.4]     #if ˴ؤ륦˥

  ΣĤ #if, #elif, #assert ΰ˴ؤ륦˥󥰤Ǥ

Macro "MACRO" is expanded to "defined"
    #if ǥޥ MACRO ŸȤ defined ˤʤޤ
    identifier ǤϤʤ黻ҤȤưޤ䤷ʥޥǤ
    Standard C Ǥ undefinedˡ
Macro "MACRO" is expanded to "sizeof"
    #if ǥޥ MACRO ŸȤ sizeof ˤʤޤ
    identifier ǤϤʤ黻ҤȤưޤ䤷ʥޥǤ
    OK_SIZE == TRUE ξǤ
Macro "MACRO" is expanded to 0 token
    ޥ MACRO ĤΥȡŸޤ#if Ǥ줬ȯ
    ȡƤϲ餫Υ顼ˤʤޤΥ˥󥰤ϥ顼
    餫ˤ뤿ΤΤǤ

   #if, #elif, #assert ΰ˴ؤ륦˥󥰤Ǥɾ򥹥
åפʬǤϽФޤ-W8 ץǤϽФˡ

Undefined escape sequence '\x'
    \x Ȥ escape sequence Ϥޤñʤ \x ȤХȤ
    sequence Ȥɾޤ\x ˣʸ³ escape sequence
    Ϥ󤢤ˡUCN Υ­ʤƱͤǤ

   #if (#elif, #assert) Ԥα黻˴ؤ륦˥󥰤Ǥ
Ϥꥹåפʬ˴ؤƤϽФޤ-W8 ץǤϽФˡ
MCPP Ǥμºݤα黻ϡMCPP 򥳥ѥ뤷ϤΥѥΤλ
ˤޤ

Negative number "-1" is converted to positive "4294967295"
    ʤĤȤκ黻η̡Ĥʤ
    Ѵޤϥ顼ǤϤޤ󤬡֤󥽡β餫
    δְ㤤Ǥ礦黻 *, /, %, +, -, <, >, <=, >=, ==, !=, &,
    ^, | ξաӣ黻 ? : 裲裳 operand ˤĤƤϡ
    ʤξϡ¾ĤǤʤѴޤ
Illegal shift count "-1"
    ӥåȥեȱ黻 <<, >> α operand ͤǤޤ long
    ΥӥåĶƤޤ⥽δְ㤤Ǥ礦
"op" of negative number isn't portable
    黻 op η̤ϡoperand ΰޤǤ
    portability ޤop  /, %, >> Τɤ줫Ǥ operand 
    ξ >> 黻Ҥϡѥե̿ CPU νϤδ֤
     portability ϤǤʣӥåȤΥեȤǣǳä̤
    ʤˡǤʤ CPU νϤȤδ֤Ǥ portability ޤ
Result of "op" is out of range
    黻 op ˤ黻η̤ unsigned long ϰϳȤʤޤop
    ϣ黻 *, /, %, +, -ñ - Τɤ줫ǤUnsigned long
    ϥСե뤳ȤʤΤǥ顼ˤϤʤޤ󤬡Ūʱ
    ̤ϰϳȤʤϥ˥󥰤Фޤ

        [5.5.5]     ޥŸ˴ؤ륦˥

  DEBUG == TRUE ǥѥ뤵줿 MCPP ǤϡΥޥɽ졢
ΥޥΤ륽ե̾ȹֹɽޤ

Macro started at line 123 swallowed directive-like line
    123 ԤϤޤäޥ # ǻϤޤԤȤɤ߹ߤޤ
    ֤󡢥ޥƤӽФδְ㤤Ǥ礦ޥʤС# ǻϤޤ
    Ԥ directive line ȤƲᤵϤǤåפ #if
    group ǤϥޥäƤŸʤΤǡιԤ directive line
    ȤƲᤵޤ
Replacement text "sub(" of macro "head" involved subsequent text
    ޥ "head" ִꥹ "sub(" κǥޥƤӽФθΥ
    Ȥޤޤ K&R 1st.  Standard C ˻ޤ
    顼ǤϤޤ󤬡⤷տޤˤμΥޥȤäƤΥ
    ˥󥰤Фʤ顢ϥޥޤϥޥƤӽФδְ㤤Ǥ
    տޤƻȤäΤǤСư۾ʥޥǤ
    Υ˥󥰤 mcpp_std ξǤmcpp_std Ǥ -@compat
    ץꤹȡΥ˥󥰤ϽФޤmcpp_prestd Ǥ
    Ʊݤϵޤ˥󥰤ϽФޤpoststd ǤϺ
    ִꥹȤθΥƥȤϼޤʤΤǡΥ˥󥰤Ϸ褷
    ƽФޤunterminated macro call Υ顼ˤʤȡޤä
    äŸ̤ˤʤȤˡ
Less than necessary N argument(s) in macro call "macro( a)"
    ޥƤӽФΰ­ޤ̾Ϥϥ顼ǤѰ
    ޥǰĤ­ʤäϥ˥󥰤ˤȤɤƤޤ
    GNU C βѰޥ C99 ΤȤδ֤ΰܿξ㳲򸺤餹
    Ǥ

  ΣĤ oldprep ⡼ɤǤ¾Υ⡼ɤǤϥ顼ˡ

Less than necessary N argument(s) in macro call "macro( a)"
    ޥƤӽФΰ­ޤmacro ˤϰ N ɬפǤ­
    ʤˤ 0 ĤΥȡƤơ³ޤ
More than necessary N argument(s) in macro call "macro( a, b, c)"
    ޥƤӽФΰ¿ޤmacro ΰ N ĤΤϤǤ;
    פʰΤƤơ³ޤ

        [5.5.6]     ֹ˴ؤ륦˥

  Ϲֹ˴ؤ륦˥󥰤Ǥ

Line number "32768" is out of range of [1,32767]
    C90, C++ Ǥ #line  [1,32767] ϰϤˤʤФʤޤ
    0 ⥨顼Ǥ__STDC_VERSION__ >= 199901L ޤ __cplusplus >
    = 199901L ξϤΰͭϰϤ [1,2147483647] Ǥ
    ơC90, C++ Ǥ [32768,2147483647] ϰϤϥ顼ǤϤʤ
    󥰤ˤȤɤƤޤ
    mcpp_std ξǤ

  C90 Ǥ #line  32767 Ͼ˶ᤤֹꤷ硢
λǤϥ顼ˤʤʤΤΡ줳ϰϤ򥪡Сޤ
硢MCPP Ǥ warning Фǹֹ򤽤Τޤ䤷³Ƥ
ޤѥΤˤäƤϤʤ⤷ޤ
#line λ꤬ߤ礭ȤǤ

Line number 32768 got beyond range
    ιֹ椬 32768 ãޤλǣ warning 
    ޤ
Line number 32769 is out of range
    ޥ __LINE__ ŸȤ32767 Ķޤ

        [5.5.7]     #pragma MCPP warning (#warning)

#warning
#pragma MCPP warning
    #pragma MCPP warning (#warning) ǥ쥯ƥ֤¹Ԥޤ
    ԤɽޤʰΤΤ˥ȡ󥨥顼Unterminated string
    ˤä #pragma MCPP warning ϼ¹ԤʤˡΥǥ
    ƥ֤ص warning level 1 ΤȤ˷ǺܤƤޤºݤ
     warning level ˴طʤɬɽޤ
    #pragma MCPP warning  mcpp_std ξǡmcpp_prestd Ǥ #warning
    Ǥ

    [5.6]       Warning (class 2)

  ְ㤤ǤϤʤ portability Τ륱ˤĤƤΥ˥
Ǥ

  ΣĤ mcpp_std ξǤ

Parsed "//" as comment
    // ޤǤ򥳥ȤȤƲᤷޤC99  C++ ǤϹˡ
    C90 Ǥ⥦˥󥰤ФǥȤȤưޤ
Variable argument macro is defined
    Ѱޥ C99 λͤǤC90, C95, C++ ǲѰޥ
    ޤ
Empty argument in macro call "MACRO( a, ,"
    ޥƤӽФ˥ΰޤMCPP ǤϤΰϣĤ pp-
    token sequence ǤȤߤʤ reasonable ʽ򤷤ޤ
     C99 ǤϹˡǤΤ C90 Ǥ undefined Ǥꡢ
    portability ޤ',' ʤΤϥǤϤʤ
    Ȥߤʤ顼Ȥ롣ĤΰȣĤΥȤϹʸ塢
    ĤʤɤǤäƤ⥨顼ˤϤʤˡ˥
    񤯤Τϰ̤ˤɤǤϤޤ󡣲ǽʾϡ
        #define EMPTY
    Ȥơ EMPTY 򥫥ʬ˽񤯤ΤɤǤ礦
Skipped the #pragma line
    GNU C V.3 Ǥ #pragma GCC <args> Ȥ pragma ꡢ
    ϥץץåΤ⤢ޤMCPP Ϥϥݡ
    Ƥޤ
    °ΥץץåϽ뤬 MCPP Ͻʤ#pragma ˤ
    ƤϡΥ˥󥰤Фޤ
Not a valid preprocessing token "+12"
    ## 黻ҤˤäƣĤ pp-token Ϣ뤷Ȥ"+12" Ȥ
    invalid ʤΤˤʤޤ̾ϥ顼Ǥ-lang-asm (-x
    assembler-with-cpp, -a) ץǵư줿ϥ顼ˤϤʤ
    

   mcpp_std  poststd ⡼ɤξǤ

Header-name enclosed by <, > is an obsolescent feature <stdio.h>
    <stdio.h> Ȥ header name ѻߤͤǤ"stdio.h" 
    ȤäƤ

  ΣĤΥ˥󥰤ΥƥΤΤǤΥƥ
ǤץǤportability ʤΤǡǰΤ˥˥
Фޤ

#include_next is not allowed by Standard
#warning is not allowed by Standard
    Υǥ쥯ƥ֤ GNU C ǤͭǤʳΤΤǤꡢ
    portability ޤ

Converted \ to /
    #include directive  header name  \ ޤޤƤΤǡ
    / Ѵƽޤ DOS/Windows ΣϣӤǤ path-
    delimiter ǤǤ undefined Ǥ/ Ȥäְۤ㤤
    ޤ󡣤Υ˥󥰤ϣ󤷤ФޤDOS/Windows Ϥ
    implement 줿 MCPP ΤΤǤʤ\  " ľˤ
    Ϥ " ʸƥ delimiter ȤϲᤷʤΤǡ
    unterminated string literal Υ顼Ȥʤˡ
'$' in identifier "THIS$AND$THAT"
    Identifier  '$' ޤޤƤޤΥ˥󥰤ϣ󤷤Ф
    DOLLAR_IN_NAME  TRUE ˤƥѥ뤵줿 MCPP ǤФ
    ΥƥǤ '$'  identifier ͭʸǤ
    portability Ϥޤ¾ΥƥǤ '$' ϣʸ pp-
    token ȤʤΤǡTHIS$AND$THAT  THIS $ AND $ THAT ΣĤ pp-
    token ʬ򤵤ޤʤη̡compile phase ǥ顼ˤʤϤǤ
    ˡ

    [5.7]       Warning (class 4)

  Standard C ǤϤĤ translation limits ˤĤơݾڤ
ͤꤷƤޤץץåϤͤĶ translation limits
äƤۤͤɤȤޤ˰¸륽
portability ¤ޤMCPP ǤϤ translation limits 
"system.H" Υޥ뤳ȤǤդǤ褦ˤʤäƤޤ
mcpp_std ǤϤͤ Standard C κǾͤĶƤϡΤȤ
Ѥ륽ФƤϥ˥󥰤ФޤϤɸإ
䥽ˤäƤȯ̤ˤʤΤǡclass 1, 2 鳰Ƥ


Logical source line longer than 509 bytes
    ԤĹ 509 ХȤĶƤޤ
Quotation longer than 509 bytes "very_very_long_string"
    ʸƥ롢ʸheader name Ĺ 509 ХȤĶƤ
    ޤ
More than 8 nesting of #include
    #include ΥͥȤ٥Ķޤ٥ˤʤä
    ˥󥰤Фޤ
More than 8 nesting of #if (#ifdef) sections
    #if, #ifdef, #ifndef ΥͥȤ٥Ķޤ٥ˤʤ
    Υ˥󥰤Фޤ
More than 1024 macros defined
    Ƥޥ 1025 Ĥãޤοˤ pre-defined
    ޥ header-file 줿ޥޤޤƤޤ
String literal longer than 509 bytes "very_very_long_string"
    # 黻ҤȤä줿ޥŸˤäơ509 ХȤĶĹ
    ʸƥ뤬ޤ

  Υ˥󥰤ϥåפ #if group ǤϽФޤ

More than 32 nesting of parens in #if expression
    #if ΥåΥͥȤ٥Ķޤ٥ˤʤä
    Фޤ
More than 31 parameters
    ޥΥѥ᡼οĶޤ
Identifier longer than 31 bytes "very_very_long_name"
    Identifier ĹХȤĶƤޤ

  __STDC_VERSION__ >= 199901L ξϤ translation limits ϼ
̤ǤIdentifier ĹǤϡUCN  multi-byte-character Ϥ줾
ʸȿޤʥΥХȿǤϤʤˡ

    ԤĹ            :   4095 Х
    ʸƥ롢ʸheader name Ĺ    :   4095 Х
    Identifier Ĺ               :   63 ʸ
    #include Υͥ               :   15 ٥
    #if, #ifdef, #ifndef Υͥ   :   63 ٥
    #if ΥåΥͥ          :   63 ٥
    ޥΥѥ᡼ο          :   127 
    Ǥޥο            :   4095 

  -+ ץ C++ ΥץץꤷϡΤ褦
translation limits ȤޤޥΥѥ᡼κ MCPP
Ǥ 255 ޤǤǤʤΤǡ256 ĤǤϥ顼Ȥʤޤ

    ԤĹ            :   65536 Х
    ʸƥ롢ʸheader name Ĺ    :   65536 Х
    Identifier Ĺ               :   1024 ʸ
    #include Υͥ               :   256 ٥
    #if, #ifdef, #ifndef Υͥ   :   256 ٥
    #if ΥåΥͥ          :   256 ٥
    ޥΥѥ᡼ο          :   256 
    Ǥޥο            :   65536 

  Υ˥󥰤ºݤˤϤ뤵Τǡclass 1, 2 鳰Ƥޤ

Converted 0x0c to a space
     token separator ȤƤ [FF], [VT], [CR][CR]  '\n'
    Ȱ㤦ɤǤˤΥɤ space Ѵޤ줬
    directive Ԥˤ Standard C Ǥ undefined Ǥȡ
    ʸƥ롢ʸΥɤѴޤѴƤ褤Τ
    뤬ʸåȤϽϰ¸ʤΤǡMCPP ǤϤޤݤʤ
    ɬפʥåϥѥΤǹԤǤˡ¾ǡtoken
    separator ȤƤ [TAB]  a space Ѵޤϥѥ
    ̤˲αƶͿʤΤǡʥץץåˤȤäƤ⥳ѥ
    ˤȤäƤ [TAB]  space Ʊ̣ʤˡ˥󥰤Ͻ
    ޤ
    [CR] ФƤΤϤƤϡDOS/Windows ϤΥ UNIX Ϥ˻
    äƤƤΤޤޥѥ뤷褦ȤǤԥɤѴ
    饳ѥ뤷Ƥ[FF] ϼºݤΥ˻Τ
    ֲڡפտޤƤΤǤ礦ʤǤ
Undefined symbol "name", evaluated to 0
    Identifier "name" ϥޥȤͤƤޤ0 ɾ
    Ϸ褷ƥ顼ǤϤޤ󤬡ץδְ㤤Ǥǽ
    ޤ#if defined ΰˤϤΥ˥󥰤ϽФޤ#if
    name .. ȤȤ #if defined name && (name ..) Ȥ뤫ޤ
     MCPP ư -D name=0 Ȥץդ뤳Ȥǡ
    Υ˥󥰤򤱤뤳ȤǤޤC++ Ǥ true, false Ȥ
    ̰ǡ˥󥰤ʤˤ줾 1, 0 ɾޤ
Multi-character wide character constant L'ab' isn't portable
    磻ʸͤϡƱʸåȤνϴ֤Ǥ磻ʸ
     encoding ϰ¸Ǥꡢξ塢Multi-character ɾλ
    ϰ¸ʤΤǡȤä #if ϰܿޤ
    mcpp_std ǤФޤpoststd Ǥ #if ʸǧʤΤ
    顼ˤʤޤΤΤƱͤǤ
Multi-character or multi-byte character constant '' isn't portable
    Multi-character character constant  multi-byte character character
    constant ͤɾλϽϰ¸ʤΤǡȤä #if ϰ
    ޤmcpp_std ǽФޤ

  ΣĤ mcpp_std ξФޤ

Macro with mixing of ## and # operators isn't portable
    ؿͥޥִꥹ ## # Ȥȡ¤Ӥޤ
    ΣĤα黻Ҥ̤ͥ Standard C Ǥ unspecified ʤΤǡ
    ܿޤMCPP Ǥ # ŬѤޤʤؿͥޥ
    ǵո # ## Ȥȡ¤Ӥȥ顼ˤʤޤ#
    黻ҤΥڥɤϥѥ᡼ǤʤФʤʤǤ
Macro with multiple ## operators isn't portable
    ޥִꥹʣ ## 黻Ҥ֤ˣĤΥȡޤ
    ѥ᡼ϤǤޤ## 黻Ҥɾ Standard C
    Ǥ unspecified ʤΤǡΥޥϰܿΤʤ礬ޤ
    MCPP Ǥ ## 黻ҤϺ鱦ؽŬѤƤޤ

    [5.8]       Warning (class 8)

  δְ㤤ǤǽϾʤǰΤդ¥̣ǡΥ
åФޤåΤ -W8 Υץǵư줿
Ǥ

  åפ #if group  preprocessing directive ̾ #if,
#ifdef, #ifndef, #elif, #else, #endif бطåޤ󤬡
-W8 Ǥ Illegal directive, Unknown directive Υå⤷ޤޤ
mcpp_std Ǥ #if ΥͥȤ٥Ķ⥦˥󥰤Фޤ

Illegal #directive "123" (in skipped block)
Unknown #directive "pseudo-directive" (in skipped block)
Ignored #ident (in skipped block)
Ignored #sccs (in skipped block)
More than 8 nesting of #if (#ifdef) sections (in skipped block)
#include_next is not allowed by Standard (in skipped block)
#warning is not allowed by Standard (in skipped block)

   #if ˴ؤ륦˥󥰤Ǥ㤨 #if a || b ȤǤϡa
Ǥ b ɾϹԤޤ󡣤-W8 ȤƵưȡɾ
ʤʬ˴ؤƤ⤳Υ˥󥰤ФޤξϤ
 (in non-evaluated sub-expression) Ȥ񤭤դޤ
overflow  wrap-round ͤǰʸα黻Ԥޤ0 ˤ
ξϷ̤˺ͤȤäưʸα黻Ԥޤ

Constant "123456789012" is out of range
Integer character constant 'abcde' is out of range
Wide character constant L'abc' is out of range
CHARBIT bits can't represent escape sequence '\x123'
CHARBIT*2 bits can't represent escape sequence L'\x12345'
Division by zero
Undefined symbol "name", evaluated to 0
sizeof: Unknown type "type"
sizeof: Illegal type combination with "type"
Multi-character wide character constant L'ab' isn't portable
Multi-character or multi-byte character constant '' isn't portable
Undefined escape sequence '\x'
UCN cannot specify the value "0000007f"
Negative number "-1" is converted to positive "4294967295"
Result of "op" is out of range
Illegal shift count "-1"
"op" of negative number isn't portable

sizeof is disallowed in C Standard
    #if sizeof Τ mcpp_prestd  OK_SIZE == TRUE ξ
    ǤξǤ⤳ Standard C ǤϻȤޤȤ
    򤷤ޤ
"MACRO" wasn't defined
    #undef Ƥʤ̾ꤷƤޤϾʤȤ
    Standard C Ǥϥ顼ǤϤޤ
Macro "macro" needs arguments
    դޥȤƤΤƱ̾ñȤǸƤޤ
    ŸΤޤ޻Ĥޤmcpp_prestd ξФޤmcpp_std
    ǤϲʤΤǡ˥󥰤ϽФʤˡ
String literals "str1" "str2" are concatenated
    ܤʸƥ "str1" "str2" Ϣ뤵 "str1str2" ˤʤ
    ޤ"str1", "str2" Ƚ񤯤ĤǤϤʤäȤΤ뤿ˡ
    դ¥ޤʤwide-character-string-literal  character-
    string-literal ܤƤΤϡC90 Ǥ undefined ǡC++
    Standard ǤƱͤǤC99 Ǥ wide-character-string-literal Ȥ
    Ϣ뤵뤳ȤˤʤäƤޤɤˤƤ MCPP Ǥ wide-
    character-string-literal ȤϢ뤷ޤmcpp_std 
    CONCAT_STRINGS == TRUE ξǤ

    [5.9]       Warning (class 16)

  Trigraph  digraph ϻȤɬפΤʤĶǤϤޤäȤʤΤǤ
δĶǤ⤷餬ФСդפǤ礦-W16 ץ
Ϥ򸡽ФΤǤ¾ǡtrigraph 뤤 digraph Ѥ
Ƥ륽ǤϤΥ˥󥰤ȯ뤳ȤˤʤäƤ뤵Ǥ礦
顢¾Υ˥󥰤Ȥ̤Υ饹ˤƤޤɤˤƤ⡢
 trigraph 뤤 digraph ͭʾ֤ǤФޤ
 mcpp_std ξǤ

2 trigraph(s) converted
    ʪΣĤ trigraph sequence Ѵޤ tri-
    graph ΤĤǽ񤤤ΤǤ礦
2 digraph(s) converted
    ιΣĤ digraph sequence Ѵޤ digraph 
    Ĥǽ񤤤ΤǤ礦
    mcpp_std Υǥեȥ⡼ɤǤϡHAVE_DIGRAPHS == FALSE ǤС
    ץäƤ digraph 򼡤Τ褦̾ token Ѵ
    ϤޤʤäơѥΤ digraph бƤɬ
    Ϥʤˡ
        <%  ->  {           <:  ->  [           %:      ->  #
        %>  ->  }           :>  ->  ]           %:%:    ->  ##
    poststd ⡼ɤǤ translation phase 1 ̾ pp-token 
    ѴƤޤޤΰ㤤ϡdigraph  # 黻Ҥˤʸ󲽤
    оݤˤʤä˸ޤǥեȤǤ digraph sequence Τޤʸ
    󲽤ޤpoststd Ǥ̾ pp-token Ѵ줿Τʸ
    ޤޤʸƥ digraph sequence 
    character sequence ä硢ǥեȤǤϤΤޤޤǤ
    poststd ǤϤб pp-token  character sequence Ѵ
    ޤ
    ǥեȥ⡼ɤǤϤΥ˥󥰤 digraph ΡѴפоݤȤ
    ƤΤǡpreprocessing-directive Ԥ˸ƾäƤޤ digraph
    ϥȤޤ

    [5.10]      ǥå

    ǥå          fatal   error           warning class
                            error             1     2     4     8    16

"..." isn't the last parameter      [5.4.7]
"/*" in comment                             [5.5.1]
"MACRO" has not been defined                [5.5.3]
"MACRO" has not been pushed                 [5.5.3]
"MACRO" is already pushed                   [5.5.3]
"MACRO" wasn't defined                                        [5.8]
"__STDC__" shouldn't be redefined   [5.4.7]
"__STDC__" shouldn't be undefined   [5.4.8]
"__VA_ARGS__" without corresponding "..."
                                    [5.4.7]
"and" is defined as macro                   [5.5.3]
"defined" shouldn't be defined      [5.4.7]
"op" of negative number isn't portable      [5.5.4]           [5.8]
## after ##                         [5.4.7]
#error                              [5.4.10]
#warning                                    [5.5.7]
#include_next is not allowed by Standard          [5.6]       [5.8]
'$' in identifier "THIS$AND$THAT"                 [5.6]
2 digraph(s) converted                                              [5.9]
2 trigraph(s) converted                                             [5.9]
CHARBIT bits can't represent escape sequence '\x123'
                                    [5.4.6]                   [5.8]
CHARBIT*2 bits can't represent escape sequence L'\x12345'
                                    [5.4.6]                   [5.8]
Already seen #else at line 123      [5.4.3]
Bad defined syntax                  [5.4.5]
Bad push_macro syntax                       [5.5.3]
Bad pop_macro syntax                        [5.5.3]
Buffer overflow expanding macro "macro" at "something"
                                    [5.4.9]
Buffer overflow scanning token "token"
                            [5.3.3]
Bug:                        [5.3.1]
Can't open include file "file-name"
                                    [5.4.11]
Can't use the character 0x24        [5.4.5]
Can't use a character constant 'a'  [5.4.5]
Can't use a string literal "string"
                                    [5.4.5]
Can't use the operator "++"         [5.4.5]
Constant "123456789012" is out of range
                                    [5.4.6]                   [5.8]
Converted 0x0c to a space                               [5.7]
Converted \ to /                                  [5.6]
Division by zero                    [5.4.6]                   [5.8]
Duplicate parameter names "a"       [5.4.7]
Empty argument in macro call "MACRO( a, ,"        [5.6]
Empty character constant ''         [5.4.1]
Empty parameter                     [5.4.7]
End of file with \, skipped the line
                                    [5.4.2] [5.5.2]
End of file with unterminated comment, skipped the line
                                    [5.4.2] [5.5.2]
End of file with no newline, skipped the line
                                    [5.4.2] [5.5.2]
End of file with unterminated #asm block started at line 123
                                    [5.4.2] [5.5.2]
End of file within #if (#ifdef) section started at line 123
                                    [5.4.2] [5.5.2]
End of file within macro call started at line 123
                                    [5.4.2] [5.5.2]
Excessive ")"                       [5.4.5]
Excessive token sequence "junk"     [5.4.4] [5.5.3]
File read error             [5.3.2]
File write error            [5.3.2]
Header-name enclosed by <, > is an obsolescent feature <stdio.h>
                                                  [5.6]
Identifier longer than 31 bytes "very_very_long_name"   [5.7]
Ignored #ident                              [5.5.3]           [5.8]
Ignored #sccs                               [5.5.3]           [5.8]
Illegal #directive "123"            [5.4.4]                   [5.8]
Illegal control character 0x1b in quotation
                                            [5.5.1]
Illegal control character 0x1b, skipped the character
                                    [5.4.1]
Illegal digit in octal number "089"         [5.5.1]
Illegal multi-byte character sequence "XY"
                                    [5.4.1]
Illegal multi-byte character sequence "XY" in quotation
                                            [5.5.1]
Illegal parameter "123"             [5.4.7]
Illegal shift count "-1"                    [5.5.4]           [5.8]
Illegal UCN sequence                [5.4.1]
In #asm block started at line 123   [5.4.3]
Integer character constant 'abcde' is out of range
                                    [5.4.6]                   [5.8]
The macro is redefined                      [5.5.4]
Less than necessary N argument(s) in macro call "macro( a)"
                                    [5.4.9] [5.5.5]
Line number "32768" got beyond range        [5.5.6]
Line number "0x123" isn't a decimal digits sequence
                                    [5.4.4] [5.5.6]
Line number "32769" is out of range         [5.5.6]
Line number "2147483648" is out of range of [1,2147483647]
                                    [5.4.4]
Line number "32768" is out of range of [1,32767]
                                            [5.5.6]
Logical source line longer than 509 bytes               [5.7]
Macro "MACRO" is expanded to "defined"      [5.5.4]
Macro "MACRO" is expanded to "sizeof"       [5.5.4]
Macro "MACRO" is expanded to 0 token        [5.5.4]
Macro "macro" needs arguments                                 [5.8]
Macro started at line 123 swallowed directive-like line
                                            [5.5.5]
Macro with mixing of ## and # operators isn't portable
                                                        [5.7]
Macro with multiple ## operators isn't portable         [5.7]
Misplaced ":", previous operator is "+"
                                    [5.4.5]
Misplaced constant "12"             [5.4.5]
Missing ")"                         [5.4.5]
Missing "," or ")" in parameter list "(a,b"
                                    [5.4.7]
More than BLK_NEST nesting of #if (#ifdef) sections
                            [5.3.3]
More than 8 nesting of #if (#ifdef) sections            [5.7] [5.8]
More than 8 nesting of #include                         [5.7]
More than 32 nesting of parens in #if expression        [5.7]
More than NEXP*2-1 constants stacked at "12"
                                    [5.4.5]
More than NEXP*3-1 operators and parens stacked at "+"
                                    [5.4.5]
More than 1024 macros defined                           [5.7]
More than NMACPARS parameters       [5.4.7]
More than 31 parameters                                 [5.7]
More than necessary N argument(s) in macro call "macro( a, b, c)
                                    [5.4.9]
Multi-character or multi-byte character constant '' isn't portable
                                                        [5.7] [5.8]
Multi-character wide character constant L'ab' isn't portable
                                                        [5.7] [5.8]
Negative number "-1" is converted to positive "4294967295"
                                            [5.5.4]           [5.8]
No argument                         [5.4.4] [5.5.3]
No header name                      [5.4.4]
No identifier                       [5.4.4]
No line number                      [5.4.4]
No space between macro name "MACRO" and repl-text
                                            [5.5.3]
No sub-directive                            [5.5.3]
No token after ##                   [5.4.7]
No token before ##                  [5.4.7]
Not a file name "name"              [5.4.4]
Not a formal parameter "id"         [5.4.7]
Not a header name "UNDEFINED_MACRO"
                                    [5.4.4]
Not a line number "name"            [5.4.4]
Not a valid preprocessing token "+12"
                                    [5.4.9]       [5.6]
Not a valid string literal          [5.4.9]
Not an identifier "123"             [5.4.4] [5.5.3]
Not an integer "1.23"               [5.4.5]
Not in a #if (#ifdef) section       [5.4.3]
Not in a #if (#ifdef) section in a source file
                                    [5.4.3] [5.5.3]
Operand of _Pragma() is not a string literal
                                    [5.4.12]
Operator ">" in incorrect context   [5.4.5]
Out of memory (required size is 0x123 bytes)
                            [5.3.2]
Parsed "//" as comment                            [5.6]
Preprocessing assertion failed      [5.4.10]
Quotation longer than 509 bytes "very_very_long_string"
                                                        [5.7]
Recursive macro definition of "macro" to "macro"
                                    [5.4.9]
Replacement text "sub(" of macro "head" involved subsequent text
                                            [5.5.5]
Rescanning macro "macro" more than RESCAN_LIMIT times at "something"
                                    [5.4.9]
Result of "op" is out of range      [5.4.6] [5.5.4]           [5.8]
sizeof is disallowed in C Standard                            [5.8]
sizeof: Illegal type combination with "type"
                                    [5.4.6]                   [5.8]
sizeof: No type specified           [5.4.5]
sizeof: Syntax error                [5.4.5]
sizeof: Unknown type "type"         [5.4.6]                   [5.8]
Skipped the #pragma line                          [5.6]
String literal longer than 509 bytes "very_very_long_string"
                                                        [5.7]
String literals "str1" "str2" are concatenated                [5.8]
This is not a preprocessed source
                            [5.3.4]
This preprocessed file is corrupted
                            [5.3.4]
Too long header name "long-file-name"
                            [5.3.3]
Too long identifier, truncated to "very_long_identifier"
                                            [5.5.1]
Too long line spliced by comments
                            [5.3.3]
Too long logical line       [5.3.3]
Too long number token "12345678901234"
                            [5.3.3]
Too long output line        [5.3.3]
Too long pp-number token "1234toolong"
                            [5.3.3]
Too long quotation "long-string"
                            [5.3.3]
Too long source line        [5.3.3]
Too long token              [5.3.3]
Too many include directories "dir"
                            [5.3.3]
Too many include files      [5.3.3]
UCN cannot specify the value "0000007f"
                                    [5.4.1]                   [5.8]
Undefined escape sequence '\x'              [5.5.4]           [5.8]
Undefined symbol "name", evaluated to 0                 [5.7] [5.8]
Unknown #directive "pseudo-directive"
                                    [5.4.4] [5.5.4]           [5.8]
Unknown argument "name"                     [5.5.3]
Unterminated character constant 't understand.
                                    [5.4.1]
Unterminated expression             [5.4.5]
Unterminated header name <header.h  [5.4.1]
Unterminated macro call "macro( a, (b,c)"
                                    [5.4.9]
Unterminated string literal
                                    [5.4.1]
Unterminated string literal, catenated to the next line
                                            [5.5.1]
Variable argument macro is defined                [5.6]
Wide character constant L'abc' is out of range
                                    [5.4.6]                   [5.8]
Without #asm                        [5.4.3]


Х

    [6.1]       Хɤ

  ץץ Standard C Ŭ٤򸡾ڤ뤿 Validation Suite 
äΤǡMCPP ΥȤȤ˸ޤStandard C ΥץץΤ
٤Ƥε򸡾ڤǤΤˤĤǤMCPP ϤȤ
ƥåƤޤ¿νϤǥѥ뤷ƥåƤ
ޤäơХͤϤۤȤɤʤĤǤޤ
ĤĤäƤ붲Ͻʬޤ
  ⤷ԲĲưȯ줿顢Ҥ𤯤
  ⤷"Bug: ..." ȤǥåФ顢ϴְ㤤ʤ MCPP
ޤϽϤΡʤ֤ MCPP Ρ˥ХǤޤȤ㤯ʡ֥
פǤ⡢򿩤碌뤳Ȥ MCPP ˽ʤ顢ХǤ

    [6.2]       malloc() ϢΥХå

   kmmalloc Ȥ malloc() Υ饤֥꤬ޤmcpp-porting.
txt  [4.extra] ȡˡ
  ⤷ malloc() 󥯤 MCPP  2120  2124 ʤޤ 120
 124ˤޤǤΥ顼ֹ exit 뤳ȤСϴְ㤤
 MCPP ޤϽϤΡʤ֤饤֥ؿΡ˥ХǤ
  ޤƥȤ˻Ȥץ륽νΤۤ

    #pragma MCPP debug memory

Ƚ񤤤ƤȡθĽꤪӽλ˥ҡץ˴ؤ󤬽Ϥ
ޤ Heap error: ... ȤåФ뤳ȤС
ְ㤤ʤ MCPP ޤϽϤΥХǤ
  ΥХȯ줿顢ץ륽γʬ #if 0  #endif
ǤϤǥƥȤ򷫤֤ХȯʬʤǤߤƤ
  malloc() Ϥʤ٤Ǥ󥯤ƥƥȤƤ

    [6.3]       Х

  ХˤϼΤ褦ʥǡդƤ褦ꤤޤ

  MCPP ܿϡ
  ХȻפΤƸǤʤ٤ûץ륽
  ν̡

    [6.4]       Τո

  ХΤۤˤ⡢MCPP λȤꡢǥåΥɥ
νʤɤˤĤƤո򤪴󤻤
  ոȾ comp.std.c, fj.comp.lang.c  newsgroup ޤϥ᡼
Ǥꤤޤ


                                                                     eof
