                    M C P P - P O R T I N G . T X T
                         == How to port 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.
            Augmented GNU C-compatible features.
                                                                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++.
            Created configure script.
                                                                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 *.
            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 ⡼ɤ˲äƤ¾γƼ⡼ɤ

ƽϤ˰ܿˡ
    [3.1]       ܿߤν
        [3.1.1]     ̤
        [3.1.2]     FreeBSD / GNU C V.2.*, V.3.*
        [3.1.3]     Linux / GNU C V.2.*, V.3.*
        [3.1.4]     CygWIN / GNU C V.2.*
        [3.1.5]     LCC-WIN32 V.3.*
        [3.1.6]     Visual C++ .net
        [3.1.7]     Borland C V.4.*, V.5.*
            [3.1.7.1]   MS-DOS Ѥ mcpp  WIN32 Ϥ
                        ѥ
        [3.1.8]     Plan 9 ed.4 / pcc
    [3.2]       DECUS cpp бƤ
    [3.3]       noconfig.H, configed.H, system.H
    [3.4]       system.c, mbchar.c
    [3.5]       lib.c
    [3.6]       ɸإå
    [3.7]       makefile MCPP Ȥäꥳѥ
        [3.7.1]     Plan 9 / pcc ǤΥѥ
    [3.8]       MCPP 򥳥ѥǤ
    [3.9]       ѥ뤹ϤȥåȤν
    [3.10]      бƤʤ
    [3.11]      MS-DOS Υǥ
ƽϤ˰ܿˡܺ
    [4.1]       noconfig.H, configed.H, system.H 
        [4.1.1]     PART 1  åȥƥ
            [4.1.1.1]   ޥ
            [4.1.1.2]   Include ǥ쥯ȥ
            [4.1.1.3]   ֹνϻͤ¾
            [4.1.1.4]   Ϥθͤ˱
            [4.1.1.5]   Multi-byte character
            [4.1.1.6]   åȤȥۥȤ˶̤
        [4.1.2]     PART 2  ۥȥƥ
        [4.1.3]     PART 3  MCPP ưͤ
            [4.1.3.1]   ⡼ɤλ
            [4.1.3.2]   ư⡼ɤκλ
            [4.1.3.3]   üʻ
            [4.1.3.4]   Translation limits λ
    [4.2]       system.c
    [4.3]       mbchar.c
    [4.4]       lib.c
    [4.extra]   malloc()
ХȰܿ
    [5.1]       Хɤ
    [5.2]       malloc() ϢΥХå
    [5.3]       Х
    [5.4]       ܿ
    [5.5]       GNU C ʳνϤǤ configure ξ
    [5.6]       ǡäƤаܿƤߤޤ
    [5.7]       ڥåȤˤ¾νϤΥƥ
    [5.8]       Τո
MCPP ĹƻΤ
    [6.1]       ۣǯ
    [6.2]       V.2.3 
    [6.3]       ̤Ƨեȥ¤ȡפ˺


ס

  MCPP  Martin Minow  DECUS cpp 򸵤 kmatsuiʾ ˤŪ
ľåץץåǤMCPP Ȥ̾ Matsui cpp Ȥ̣
Ǥϥ󶡤ΤǡƽϤǻȤˤϡνϤ˹
ƥ˼㴳ѹäǥѥ뤷ơMCPP μ¹ԥץ
ɬפޤ*
  ΥɥȤϥƽϤ˰ܿˡƤޤǤ
ä¹ԥץưͤˤĤƤϡmcpp-manual.txt Ȥޥ˥
򻲾ȤƤ
  ΥɥȤϤ٤ free software Ȥ󶡤ޤ
  MCPP ϼΤ褦ħäƤޤʤ [1.1] - [1.2]  mcpp-manual.
txt ȽʣƤˡ

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

    [1.1]       ϣӤϤФʤ portable ʥ

  GNU/Linux, DOS/Windows ¿ΣϣӤ򥵥ݡȤƤ porbable ʥ
ץåǤꡢΥ Standard C (ANSI/ISO 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 פȾΤ¸Υץ
åˤ¿꤬뤫狼ޤ*

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

  *  cpp  V.2.2 ޤǤñ cpp ȸƤǤ̤ cpp ʶ
    ΤǡV.2.3  MCPP ȸƤ֤ȤˤΥɥȤǤ V.
    2.2 ޤǤΥС MCPP ȸƤ֡ޤΥɥȤ̾ V.
    2.2 ޤǤ cpp.doc ȤƤV.2.3  porting.txt ѹ
     V.2.5  mcpp-porting.txt ѹ伫Ȥ̾⡢V.2.
    2 ޤǤ Psycho ȤƤV.2.3  kmatsui ѹ


򡡡

    [2.1]  DECUS cpp  Martin Minow ˤäƺ졢1984/05  usenet /
net.sources ǸޤDECUS ȤΤϡDEC Users' Society Ȥ
 DEC ҤΥԥ塼Υ桼롼פǤDECUS cpp  DEC 
PDP-11 / RT11, PDP-11 / RSX, VAX / VMS, VAX / ULTRIX Υƥ
ΣøϤΤ˽񤫤줿åץץåǤܿɤ
ƤΤǡ¾Υƥ˰ܿ뤳ȤŪưפǡꥸʥǤ
⤹Ǥ DEC ʳΤĤ UNIX ƥбƤ褦Ǥ
    [2.2]  䤬С󥢥åפθˤΤϡC Users' Group եǥ
 #243 ǤΥˤ뽤򸫤ȡԤˤǽ
 85/06 ȤʤäƤޤθ塢ԤС󥢥åפ򤷤ƤΤ
ɤΤޤ
    [2.3]  θ 88/12 ޤǤ˲ͤˤä MS-DOS ΤĤν
ˤܿޤCUG ΥǥäƤΤϤΥСǤ
    [2.4]  ftp.oreilly.com/pub/examples/imake/DECUS-cpp.tar.gz ˤ⥽
ꡢ time-stamp  93/02 ȤʤäƤޤºݤƤ CUG 
ΤŤ85/01 ΤΤǤʤ˴ޤޤƤ Martin Minow 
README ˤȡΥץ public domain ȤʤäƤޤʤ
README Τ 84 ޤ 85 ǯΤΤȻפˡ
    [2.5]  89/04  Gigo ˤä OS-9/6x09  Microware C ˰ܿ
Τ NIFTY-SERVE / FOS9 / lib 2 ϿƤޤ
    [2.6]  MCPP V.2 ϡ䤬򸵤Ū˽ľΤǤܿ
򤵤˸夵Standard C ˴б뤿ᡢե
ʬλѤ¿Υޥɲäؿѿɲáʬ䡦񤭴
̾˹ԤäƤޤ̤⥪ꥸʥǤΣܤˤʤäƤޤ
ɥȤȸڥåȤϤ٤ơ䤬ޤä񤤤ΤǤ
  Ϥ free software ȤƸޤ伫Ȥ DECUS Ȥϲδ
⤢ޤ
  ʤꥸʥǤˤǿդƤޤ󤬡MCPP 椹
ϡDECUS cppפޤϡֵǡפȸƤ֤Ȥˤޤ
    [2.7]  Standard C ΥޥŸμˡˤĤƤϡE. Ream  MS-
DOS  PDS Ǥ CPP V.5.3 (1989/08, CUG #319) Υ⻲ͤˤ
ޤΤۤGNU C / cpp ư䡢J. Roskind  JRCPP Υ
Ȥ⤤ĤμƤޤ
    [2.8]  MCPP V.2.0 ϸڥå V.1.0 ȤȤ 1998/08  NIFTY SERVE
/ FC / LIB 2 Ǹ졢٥ҤΥȤˤžܤޤ
    [2.9]  MCPP V.2.1 ϡV.2.0  C99 1998/08 draft б뤿ν
äΤǤڥå V.1.1 ȤȤ 1998/09  NIFTY SERVE /
FC / LIB 2 ӥ٥ҤΥȤƱ˥ץɤޤ
    [2.10] MCPP V.2.2  V.2.1  1998/07 ˷ޤä C++ Standard (ISO/
IEC 14882:1998) б update ΤǤڥå V.1.2 ȤȤ
 1998/11  NIFTY SERVE / FC / LIB 2 ӥ٥ҤΥȤƱ
ץɤޤ
    [2.11] MCPP V.2.3  V.2.2  C99 б update  Linux
/ GNU C 2.95, GNU C 3.2 ؤΰܿɲäơGNU C / cpp Ȥθߴ
夵ΤǤޤ¹ԻץɲäѹޤV.
2.3 ǤϥɥȤαѸǤޤMCPP °븡ڥå
ˤϡGNU C / testsuite ΰȤƼưŪ˥ƥȤ¹Ԥ뤳ȤΤǤ
edition ɲäޤ
    [2.12] MCPP  V.2.3 γȯǡڥå V.1.3 ȤȤˡ
ȶ (IPA) ʿǯ١̤Ƨեȥ¤ȡפ˿
͵ץȥޥ͡ˤäƺ򤵤졢2002/07 - 2003/02 δ֤ IPA
λȿУͤνΤȤ˳ȯʤޤѸǥɥ
Ȥ⤳ΥץȤǡͭ²ҡϥˤ
˻䤬ȥƥäƤǤäΤǤΥץ
Ȥ cvs repository  ftp site Ѱդ졢V.2.3 Ϥ 2002/08
 pre-release 1 2002/12  pre-release 2 2003/02 ˥꡼Ǥ
ȯޤθ塢2003/03  V.2.3 patch 1 ФƤޤ*
    [2.13] MCPP Ϥʿǯ٤ˤ̤Ƨեȥ¤ȡפ˰
  PM ˤäƷ³ƺ򤵤졢2003/06 - 2004/02 δ֤ IPA λ
ȰϣУͤνΤȤ V.2.4 ؤ update Ȥʤޤ
ơ2003/11 ˤ V.2.4 prerelease ȯޤΥС
 Visual C++ .net ؤΰܿɲä졢ޤMCPP  make ư
configure ץȤޤʤMCPP ϤޤΤʥ饤
ɽ򤷤ƤޤǤλ BSD Υ饤ɽ
򤹤褦ˤʤޤˡ2004/02 ˤϥ꡼Ǥȯޤ
ΥСǤ multi-byte character νĥ졢Plan 9 / pcc
ˤܿޤޤѸǥɥȤϥ
ܸǤ˹碌 update ޤ
    [2.14] 2004/03 ˤ MCPP V.2.4.1 ꡼ޤϺƵŪ
ޥŸˡΤǤ
    [2.15] 2005/03 ˤ MCPP V.2.5 ꡼ޤΥС
ǤϡPOST_STANDARD ȤѥΥ⡼ɤ STANDARD ⡼ɤˤμ
ԻץΰĤȤƵۼ졢OLD_PREPROCESSOR Ȥѥ
 PRE_STANDARD ⡼ɤμ¹ԻץȤƵۼޤƵ
ŪޥŸˡϺƽƴʤΤȤʤޤޤGNU C V.3.
3, 3.4 бǡ16 ӥåȥƥǤνϤ˴ؤɥ
¿ޤ

  * ̤Ƨեȥ¤ȡ(Exploratory Software Project) γפ
    ΤȤΤ뤳ȤǤ롣

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

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

    MCPP ΥӥɥȤȸڥåȤϳȯ revision 
    ơ CVS repository ֤Ƥ롣 tar-ball 
    download Ǥ롣

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

    ΤȤ anonymous ftp Ǥ롣

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

    ޤΤȤˤϰ web page 롣

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

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

        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

    Υ֥եΥƥȥեϡNIFTY 
    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


ƽϤ˰ܿˡס

  MCPP ΥϣܤΥإåեȣܤ *.c ե뤫ʤäƤ
ϣӤϤ˰¸ʬ configed.H, noconfig.H, system.H,
system.c ΣܤΥˤޤȤƤޤޤ饤֥ؿΰ
äˤ륽 lib.c ˤޤäơMCPP 򲿤餫νϤǻ
ˤϡ˹碌ƤΥեѹäɬפޤ
  MCPP 򥳥ѥ뤹ˤϣĤˡޤĤ configure 
ץȤ¹Ԥơconfig.h Ȥإåե Makefile ư
ˡǤȤñ make; make install ȤǤߤޤconfiged.H
ȤإåեϤξ˻Ȥޤconfigure  UNIX 
Υƥ CygWIN ǤȤޤ
  ⤦ĤϳƽѤκʬեȤäƥإåեѹä
ɬפʤ餵˥إåեԽǡνѤ makefile 
Ȥä make ˡǤnoconfig.H ȤإåեϤξ˻
ޤʬե makefile  noconfig Ȥǥ쥯ȥˤ
Configure λȤ륷ƥǤ⡢إåեľܡԽ뤳Ȥ
٤򤹤뤳ȤǤޤʬեϤǤ˰ܿߤν
ѤΤΤޤ

    [3.1]       ܿߤν

  ǤϺʬեȤˡˤĤޤConfigure ˤĤ
 INSTALL 򸫤Ƥ

  伫ȤưȤΤǤýϤϼΤΤǡΤˤ MCPP 
ܿƤޤʤΥ򥳥ѥǤ줿ץ
åư뤳ȤǧƤޤ CPU  i386 Ϥ
ȤäƤޤ*

    FreeBSD 5.3                 GNU C V.3.4.2
    VineLinux 3.1               GNU C V.2.95.3, V.3.2, V.3.3.2, V.3.4.3
    CygWIN 1.3.10               GNU C V.2.95.3
    WIN32                       LCC-WIN32 V.3.2
    WIN32                       Visual C++ .net 2003
    WIN32, MS-DOS               Borland C++ V.4.02J, V.5.5J
    Plan 9 ed.4                 pcc

  νϤ Standard C ⡼ɤΥץץå뤿νϤ
ƴñǡnoconfig.H, system.H οĤΥޥѹǤ
system.c ѹɬפޤ
  noconfig ǥ쥯ȥ *.dif Ȥե FreeBSD 5.3 / GNU C 3.4
Ѥ noconfig.H, system.H ƽѤ˽뺹ʬեǤVisual
C++ .net 2003 ˤȤȡsrc ǥ쥯ȥ

    patch -c < ..\noconfig\vc2003.dif

Ȥȡޤpatch  UNIX ɸŪʥޥɤǡMS-DOS 
ܿƤޤMS-DOS 5.0 ɸդƤ patch ȤϤޤäʪ
Ǥ
  Include ǥ쥯ȥλʤɤϡʬեˤ뽤Ȥ̤ˡ桼
ʬΥƥ˹碌ƽʤФʤޤ
  ƽ򥳥ѥ뤹뤿γƽѤ makefile ź
դƤޤ[3.7] ȡˡ

    copy ..\noconfig\visualc.mak Makefile

Ȥ src ǥ쥯ȥ˥ԡޤ
  ʲκȤ src ǥ쥯ȥǹԤޤȤäǤʤ¤ꡢ
noconfig.H νǤ

  *  ΤۤMCPP V.2.2 ޤǤϼΤΤ򥵥ݡȤƤθ塢
    ϤνϤȤʤʤäV.2.3 ǤϥȥɥȤ
    ĤƤV.2.4 ǤϤ

        MS-DOS                          Turbo C V.2.0
        OS-9/6x09 level 2               Microware C

      V.2.5 ǤϼνϤ˴ؤɥȤˤϤޤ
    ĤƤ뤬⼡ΥСǤϺͽǤ롣

        GO32 / DJGPP V.1.12-M4          GNU C V.2.7.1
        MS-DOS                          LSI C-86 V.3.3 

        [3.1.1]     ̤

  ʲΤɤνϤǤ⡢ǥեȤ include directory 
C_INCLUDE_DIR1, C_INCLUDE_DIR2 Ȥޥ˽񤤤ƤޤC Ȱۤʤ
C++ ͭ include directory ϡ CPLUS_INCLUDE_DIR1,
CPLUS_INCLUDE_DIR2, CPLUS_INCLUDE_DIR3 ˽񤭤ޤʤΥǥ쥯ȥ
ϼ¹Ի˴Ķѿ -I ץǻꤹ뤳ȤǤˡ
  Include directory ϤΤۤsystem.c ǤꤵƤޤUNIX Ǹ
 system.c ꤵΤϤ OS-specific ʤΡ̾ /usr/
includeˤȤ site-specific ʤΡ̾ /usr/local/includeˤ
DOS/Windows ϤΣϣӤ˴ؤƤϡsystem.c Ǥ include directory ϲ
ꤵޤ
  ޤɬפʤ CPU_STD1, CPU_STD2 Ȥ߹ߥޥ̾ѹ
ޤ
  Multi-byte character  encoding ϥǥեȤǤϡUNIX ϤǤ EUC-JP
DOS/Windows ϤǤ shift-JISPlan 9 Ǥ UTF-8 ȤƤޤɬפʤ
MBCHAR Ȥޥ񤭴¾ encoding ѹޤ32 ӥåȰʾ
ΥƥǤ multi-byte character encoding ϼ¹Ի˴Ķѿץ
#pragma ѹ뤳ȤǤޤ
  ϤˤäƤ shift-JIS  Big5  encoding бƤʤᡢ
multi-byte character  '\\' Ʊ 0x5c ͤΥХȤ
tokenization ǥ顼ˤʤ뤳ȤޤϤǤ MCPP 
üʽ򤷤ƥѥη٤䤤ޤˤĤƤ [4.1.1.5]
򸫤Ƥ
  źդ makefile ˤĤƤϡϤΥХʥ֤Ƥǥ쥯ȥ
ɬפ˱ƽ񤭴ޤ

        [3.1.2]     FreeBSD / GNU C V.2.*, V.3.*

   FreeBSD 5.3  GNU C V.3.4.* ǥѥ뤷 FreeBSD 5.3
Ѥ MCPP ֤ˤʤäƤޤΤޤޥѥ뤹ФǤ
Ǥ
  GNU C ¾ΥСǤС

#define VERSION_MSG     \
    "GNU C compiled by GNU C 3.4"



#define COMPILER_EXT_VAL    "3"
#define COMPILER_EX2_VAL    "4"
#define COMPILER_CPLUS_VAL  "3"

ȤʤäƤȤΥСֹѹޤCOMPILER_EXT_VAL  GNU
C  major version number COMPILER_EX2_VAL  minor version number
񤭤ޤCOMPILER_CPLUS_VAL  __GNUG__ ޥͤǡ
COMPILER_EXT_VAL Ʊˤʤޤ

  GNU C V.2.7-2.95 ǤСΣĤΥޥ򤽤줾 FALSE,
199409L ѹޤ

#define HAVE_INTMAX_T       TRUE
#define STDC_VERSION        0L

  FreeBSD ΥС 5.* ǤʤС

#define SYSTEM_EXT_VAL  "5"     /* V.4.*: 4, V.5.*: 5   */

ͤѹޤ
   include directory  FreeBSD 5.3 ɸȰäƤϡ

#define CPLUS_INCLUDE_DIR1  "/usr/include/c++"
#define CPLUS_INCLUDE_DIR2  "/usr/include/c++/backward"

ȤʤäƤǥ쥯ȥѹޤCPLUS_INCLUDE_DIR3, C_INCLUDE_DIR1
ɬפ⤷ޤ
  GNU C V.3 Ǥϥץץѥ (cc1, cc1plus) ˵ۼƤ
äΤǡMCPP Ȥˤϡgcc, g++ θƤӽФ shell-script ֤
ơmcpp => cc1, mcpp => cc1plus νǼ¹Ԥ褦ˤʤФʤ
ޤ󡣤ˡˤĤƤϡmcpp-manual.txt [3.9.7] 򸫤Ƥ
  ¾ UNIX Ǥ⥳ѥ餬 GNU C ǤСΥСɽ䡢
include ǥ쥯ȥꡢϣӸͭȤ߹ߥޥꡢѤ
ǤΤǤϤʤǤ礦[4.1.1] ȡˡ

        [3.1.3]     Linux / GNU C V.2.*, V.3.*

  Linux / GNU C ǤϤޤ

#define SYSTEM      SYS_FREEBSD



#define SYSTEM      SYS_LINUX

ѹ

#define COMPILER_SP3_VAL    "int"



#define COMPILER_SP3_VAL    "long int"

ѹޤ
  ơFreeBSD ξƱ褦ˡVERSION_MSG, COMPILER_EXT_VAL,
COMPILER_EX2_VAL, COMPILER_CPLUS_VAL, CPLUS_INCLUDE_DIR1,
CPLUS_INCLUDE_DIR2, C_INCLUDE_DIR1, HAVE_INTMAX_T, STDC_VERSION Υޥ
ͤѹޤ
  Linux  distribution ˤäɸ include directory ۤʤ뤳Ȥ
Τǡ

    echo '' | gcc -xc -E -v -
    echo '' | g++ -xc++ -E -v -

ȤƳΤƤꤷƤ
  ޤƥɸ GNU C Ȥ̤ΥС򥤥󥹥ȡ뤷
ϤΥСͭ include ǥ쥯ȥ꤬̤˺Ǥ礦顢
Υǥ쥯ȥ嵭Υޥǻꤷޤvlinux_gcc32.dif Ȥʬ
ե VineLinux  GNU C V.3.2 䤬󥹥ȡ뤷Ǥ

  noconfig ǥ쥯ȥ vlinux_gcc2953.dif, vlinux_gcc32.dif,
vlinux_gcc332.dif FreeBSD / GNU C V.3.4 ѤΥ VineLinux 3.1 /
GNU C V.2.95.3, V.3.2, V.3.3.2 Ѥ˽뺹ʬեǤ

  ʤglibc  getopt()  POSIX ɸΤΤȤϻͤۤʤΤǡ
Ȥ鷺ˡlib.c ΤΤȤäƤnoconfig.H  Linux Ǥϥǥե
Ȥ glibc ȤƤȽǤޤ

        [3.1.4]     CygWIN V.1.* / GNU C 2.*

  CygWIN V.1.3.10 / GNU C V.2.95.3 Ǥ noconfig.H  cyg1310.dif ˤ
褦ѹäޤ
  ¾ version ǤϡVERSION_MSG, C_INCLUDE_DIR1, CPLUS_INCLUDE_DIR1,
COMPILER_EXT_VAL, COMPILER_EX2_VAL, COMPILER_SP3_VAL Υޥѹ
뤳ȤбǤǤ礦GNU C 3.* ˤĤƤϡ[3.1.2] 򻲾ȤƤ


        [3.1.5]     LCC-WIN32 V.3.*

  LCC-WIN32 V.3.2 Ǥ lcc32.dif Τ褦ѹäޤ
  ¾ version Ǥ VERSION_MSG ޥѹޤ
  LCC-WIN32  long long ˤϤĤƤϥХäƻȤޤǤ
ʤȤ V.3.2 (2003/08) ǤϤȻȤ褦ˤʤäƤޤ

        [3.1.6]     Visual C++ .net

  Visual C++ .net 2003, 2002 ǤϤ줾 vc2003.dif, vc2002.dif Τ褦
ѹäޤ
  Visual C ¾ΥСǤϡVERSION_MSG ޥѹۤ
_MSC_VER ȤȤ߹ߥޥͤ COMPILER_EXT_VAL Ȥޥ
Ѥ뤳Ȥǡޤ_M_IX86 ȤȤ߹ߥޥͤ
COMPILER_SP2_VAL ȤޥѤ뤳Ȥбޤޤ
Visual C ϾʤȤ V.6.0 ʹߤϥץץå c1.dll, c1xx.dll Ȥ
ѥ˵ۼ줿褦ǤץץåΩƤС
Ǥ ONE_PASS Ȥޥ FALSE Ȥޤ[4.1.1.3] ȡˡ

        [3.1.7]     Borland C++ V.4.*, V.5.*

  Borland C V.5.5 / bcc32 Ǥ bc55_w32.dif Τ褦ѹäޤ
  Borland C V.4.0 / bcc / large memory model Ǥ bc40_16l.dif Τ褦
ѹäޤ
  Borland C/C++ ̤ΥСǤ VERSION_MSG Τۤ__TURBOC__,
__BORLANDC__, __BCPLUSPLUS__ ȤȤ߹ߥޥͤ򤽤줾 noconfig.
H  COMPILER_STD2_VAL, COMPILER_EXT_VAL, COMPILER_CPLUS_VAL Ȥޥ
Ѥ뤳Ȥǡбޤ[4.1.1.1] ȡˡDigraphs 
__STDC_VERSION__ μƤСǤСHAVE_DIGRAPHS,
STDC_VERSION ѹޤ
  Borland C 4.* ޤǤΥСǤϡ

#define SEARCH_INIT     CURRENT

Ȥޤ
  ޤWIN32  (bcc32) ǤϤʤ MS-DOS  (bcc) ξ

#define SYSTEM              SYS_WIN32

ǤϤʤ

#define SYSTEM              SYS_MSDOS

Ȥޤ

            [3.1.7.1]   MS-DOS Ѥ cpp  WIN32 Ϥ
                        ѥ

  ޤܿŪνϤ MCPP 򥳥ѥ뤹ϤȤɬ餺
ƱǤʤƤɤΤǡ㤨 Borland C Ѥ MCPP  MS-DOS ν
Ǥ LSI C-86 ǥѥ뤷Ƥ⤫ޤޤ󡣤ξϤΤۤ
ɥѥȤˤʤޤդ LSI C-86 Ѥ MCPP  Borland C /
bcc32 ǥѥ뤹뤳ȤǤޤWIN32 ǥѥ뤹С
MCPP  WIN32 Ǥưޤ󤬡tranlation limits 礭Ǥޤ

  Ǥ Borland C 4.0 / bcc32  MS-DOS  Borland C 4.0 Ѥ cpp 
ѥ뤹ˤȤޤnoconfig.H ǤϼΤ褦ˤޤ

#define SYSTEM              SYS_MSDOS
#define COMPILER            BORLANDC
#define HOST_SYSTEM         SYS_WIN32
#define HOST_COMPILER       BORLANDC
#define VERSION_MSG     \
    "Borland C compiled by Borland C V.4.0/bcc32"

  noconfig.H  PART 1  target-compiler ѤˤPART 2  host-
compiler ѤˤޤBorland C ƱΤξ PART 2 ϥǥեȤ
ޤޤǤޤʤˡ
  źդ bc4_16_by_bc4_32.dif  MS-DOS  Borland C V.4.0  MCPP 
Borland C V.4.0 / bcc32 ǥѥ뤹뤿򤹤뺹ʬեǤ
makefile  noconfig/borlandc.mak Ȥ󥹥ȡ뤹ǥ쥯ȥ
񤭴ơ-DWIN32 Ȥץդ make ޤ

        [3.1.8]    Plan 9 ed.4 / pcc

  Plan 9 Ǥ plan9r4.dif ѹäƥѥ뤷ޤ
  plan9r4.dif ¾ *.dif ȤϷäƤޤPlan 9 ˤ diff Ϥ
ޤpatch ޤ󡣤ǡplan9r4.dif ˤ diff -c ǤϤʤ
diff -e ˤ뺹ʬ񤭽Фơθ

    w

ȤιԤ񤭲äƤޤäơȤäƥ
񤭴ˤϡΤ褦ˤޤ

    ed noconfig.H < ../noconfig/plan9r4.dif

  Plan 9 ǤΥѥ¾ΥƥȤϤʤäƤޤˤĤ
Ƥ [3.7.1] 򸫤Ƥ

    [3.2]       DECUS cpp бƤ

  PDP-11  RT-11 / DECUS C, RSX / DECUS CVAX  VMS / VAX-11 C
PDP-11 / UNIX, VAX / ULTRIX βΣ (pcc ?) ˤ DECUS cpp б
褦ǤMS-DOS  Microsoft C, Lattice C ΤʤŤǤˤб
Ƥ褦ǤϤˤ⤦פȻפ졢ޤ伫Ȥƥ
󥹤ǤʤΤǡޤ

    [3.3]       noconfig.H, configed.H, system.H

  system.H  HAVE_CONFIG_H Ȥޥ 1 Ƥ configed.
H  include Ǥʤ noconfig.H  include ޤconfiged.H,
noconfig.H ˤ PART 1  PART 2 Ȥʬꡢsystem.H ˤ PART 3
ޤ
  ΥեˤϡƽϤ˰ܿɬפʤĤΥޥ
ƤޤޤܿƤʤϤ˰ܿˤϡPART 1 ˿
ʤԤ­ޤޤStandard C ʳΥ⡼ɤ MCPP 
ˤϡPART 3 ˤĤΥޥؤޤ
  PART 1 ϣϣӤ target Ϥ˰¸ǡPART 2  host Ϥ
¸ PART 3  MCPP ưͤǤ
  ǥեȤȰ㤦ǰܿϡΥեΤɬ
ܤ̤Ƥ

    [3.4]       system.c, mbchar.c

  configed.H (noconfig.H), system.H ΥޥǤϵۼǤʤϣӤ
Ϥκۤϡsystem.c ǵۼƤޤ̤νϤ˰ܿˤϡ
˿ԤԤΥ­ȤɬפˤʤǤ礦
  Υե˵ҤƤΤϡMCPP ưΥץusage ʸ
include ǥ쥯ȥꡢإåե䥽ե򥪡ץ󤹤Σ
ӸͭΥǥ쥯ȥѥΰ#pragma νϸͭγĥǥ쥯
ƥ֤νǤۤȤɤ target OS  target ϤǤ

  V.2.4  mbchar.c Ȥե뤬ɲäޤˤ
multi-byte character Υ롼ʸפΥơ֥뤬ޤ̤
 multi-byte character encoding ϡ˽롼
ʸסơ֥­ޤ

    [3.5]       lib.c

  饤֥ؿΤStandard C ˤʤ getopt(), stpcpy() Σäˤ
򤳤˽񤤤Ƥޤޤmemmove(), memcmp(), memcpy(),
strstr(), strcspn()  Standard C ˤϤޤŤϤǤϤʤ
⤢ΤǡåѰդޤϡ֥åž̿
 CPU ǤϡΣĤ stpcpy() ϥ֥ǽľۤɤˡ
  getopt()  glibc ΤΤʳĥܤƤƤäƤäʤ
ǡΤΤȤäƤ
  memmove() ϤʤΤ memcpy()  memmove() λͤäƤ
⤢ޤʸŤ BSD ϤνϤΤ褦Ǥˡξ noconfig.H
ޤϥƥ strings.h 

    #define memmove( dst, src, size)    memcpy( dst, src, size)

Ƚ񤤤ƤФߤޤ
  fgets() ϤɤνϤˤ⤢ΤǤλͤ Standard C Ȥϰ
äƤ礬ΤǡåܤƤޤ°ΤΤǤ
ѾʤǤ礦Standard C ǤϡХȤɤޤʤ EOF Ȥʤ
ϥХåեˤϲ񤭹ޤʤȤˤʤäƤΤǤʤäľ
ɤԤХåե¸ˡ'\0' 񤭹ǤޤΤ
ޤ fgets() Ǥϥե뤬 <backslash><newline> ǽ
äƤ <newline> ʤǽäƤοǥåԹ
ФǤ
  fgets() ʳΥ饤֥ؿϤ⡢Ϥˤä̯˰㤦
ͤ˰¸ȤϤƤʤΤǡɤνϤΤΤǤХ
פǤ礦
  MCPP ǻȤäƤؿϤդ줿ΤФǤޤ㤨 #if 
Ǥɾˤ strtoul()  atol() Ȥ鷺ǤäƤޤ
strtoul() ϸŤϤˤϤʤatol() Ǥ out of range Υå
ʤǤ
  lib.c  xyz ȤؿȤˤϡnoconfig.H (configed.H)  PART 2
ˤ HOST_HAVE_XYZ Ȥޥ FALSE ޤconfiged.H Ǥ
åȽϤȥۥȽϤȤƱǤȲꤷƤޤۤʤ
 PART 2 Խɬפޤ

    [3.6]       ɸإå

  MCPP ΥǤ stdio.h, ctype.h, errno.h ̵ include Ƥ
ޤʤϤϤޤʤǤ礦Υإåեɬ
 Standard C ε˽äƤɬפϤޤstdlib.h, string.h,
stddef.h, time.h  Standard C ǵꤵƤΤǤŤϤ
ϤʤΤǡξɬפʴؿޥľܻȤ褦
noconfig.H (configed.H)  PART 2 ˽񤤤ƤޤƱǽδؿ̾
äƤΤȤθƤޤ
  ʬ #if 1 - #else - #endif, #if 0 - #else - #endif ǰϤ
Τǡɬפ˱Ƥ 1  0 դˤƤ
  configed.H ǤϥåȽϤȤäƤΤǡۥȽϤ
äƤϡPART 2 Խޤ

    [3.7]       makefile  MCPP Ȥäꥳѥ

  noconfig ǥ쥯ȥˤ *.mak ϸ̤νѤ makefile Ǥ
٤꤬Ǥޤmake ΤΤϳƽϤ°ΤΡޤϤΥ
ƥɸŪʤΤꤷƤޤVisual C Ǥ make ǤϤʤ nmake 
Ȥޤ
  ޤϤ xyz ȤȡFreeBSD / GNU C ʳǤ

    patch -c < ../noconfig/xyz.dif

Ȥ noconfig.H, system.H ޤ˼ʬΥƥ˹碌
noconfig.H  C_INCLUDE_DIR? Υޥ򥨥ǥǽޤơ
Ѥ noconfig/xyz.mak  Makefile ˥ԡǥ쥯ȥ
ʬΥƥ˹碌ƽǡ

    make
    make install
    make clean

ȤƤ
  ¾νϤǤϡ򻲹ͤɬפ makefile 񤤤Ƥ
ΰ¸طñǡ

    main.c, control.c, eval.c, expand.c, support.c, system.c, mbchar.c
         system.H, internal.H ˰¸
    lib.c  system.H ˰¸
    system.H  configed.H ޤ noconfig.H ˰¸

ȤطˤʤäƤޤsystem.H  internal.H  include ɬ
פޤ
  åϥƥλȤʬ NMACWORK + (NEXP * 30) + (sizeof
(int) * 100) ɲäƤMODE == STANDARD ǤϤ (sizeof
(char *) * 12 * RESCAN_LIMIT) ɲäޤNMACWORK, NEXP, RESCAN_LIMIT
 system.H Ƥޥˡ
  MS-DOS Τ褦˥磻ɥɤ shellʥޥɥץåˤŸ
ƥǤϡMCPP ǤŸʤ褦˥ѥ뤷Ƥۤ
Ǥ-o ץ󤬻ꤵʤ¤ꡢ裲ϥեλȤ
ʤΤǡˡ

  MCPP ȤȤä MCPP ꥳѥ뤹ˤϡϤΥץץå
Τ٤ˤμ¹ԥץ򤪤ޤ㤨 FreeBSD, Linux,
CygWIN ǤС° cpp0  cpp0_gnuc ȤǤ rename MCPP
 mcpp_std ȤƤޤλ˻ȤΤ cpp0 ˥󥯤Τ
Ǥ礦ʤȤץץå mcpp_std Ȥȡ

    ln -sf mcpp_std cpp0

ȤޤDOS/Windows ǤϻȤΤ cpp.exe ˥ԡޤ*
  ξϽᤫ顢

    make NAME=mcpp_std

ȤС rename ʤƤߤޤƱȤ BC make Ǥ make
-DNAME=mcpp_std Ȥ롣UCB make Ǥ -D դƤդʤƤɤGNU
make Ǥ -D դƤϤʤˡ
  źդ makefile Ǥ freebsd.mak, linux.mak ʳ make install ǤϤ
ޤϤʤΤǡäƤ°Υץץåϡ
make install ǾäƤޤȤΤʤ褦ˡ餫̾Υե
ԡƤƤ
  Visual C, Borland C Τ褦ʣѥѥ MCPP Ȥäƥꥳѥ
뤹ϡMCPP νϥե򥳥ѥͿ륽եȤ
ޤ㤨 main.c ȤץץΤ main.i Ȥä
̾ǽϤơ cl  bcc32 ˥ѥ뤵ˡ

  MCPP Ȥäƥꥳѥ뤹ϡإåե "pre-preprocess"
εǽȤȡץץ֤ṳ̂ޤźդ makefile 
ȤϡUCB make, GNU make, MS nmake Ǥϡ

    make PREPROCESSED=1

BC make Ǥ

    make -DPREPROCESSED=1

ȤȡưŪ˥إåե pre-preprocess ǥѥ뤷
LCC-Win32  make Ǥ if ʸˤʬǤʤΤǡmakefile
ƥꥳѥ뤹ɬפޤƤ makefile Τ
˽񤤤Ƥޤ

  UCB make, GNU make, MS nmake ǤϡMALLOC=KMMALLOC Ȥץ
դ make ȡ䤬񤤤 malloc() 󥯤ޤˤĤƤ
[4.extra] 򸫤ƤBC make ǤƱȤ -DKMMALLOC Ȥץ
ǻꤷޤLCC-Win32 make ǻ malloc() 󥯤뤿ˤϡ
makefile ɬפޤ

  * FreeBSD Ǥ cpp ֤ǥ쥯ȥ /usr/libexec Ǥ롣mcpp-
    manual.txt [2.1] 򻲾ȤΤȡ
    Vine Linux 2.6 (i386) Ǥ /usr/lib/gcc-lib/i386-redhat-linux/2.95.3
    ȤҤɤǥ쥯ȥˤʤäƤ롣Linux / GNU C Ǥ
    distribution 䤽 version ˱ makefile ΤΥǥ쥯ȥλ
    񤭴ɬפ롣Include directory ⤤ΤǡΤ
    ʤФʤʤ
    ޤGNU C 2.95  3.2 Ǥ cpp Τۤ cpp0 ꡢgcc Ƥ
    ФΤ cpp0 ΤۤǤ롣
    ʤmcpp-manual.txt [3.9.5], [3.9.7] ⻲ȤΤȡGNU C V.3 Ǥ
    ץץѥ (cc1, cc1plus) ˵ۼƤޤäΤǡ
    MCPP Ȥˤ gcc, g++ θƤӽФ shell-script ֤ɬ
    롣

        [3.7.1]     Plan 9 / pcc ǤΥѥ

  Plan 9 ˤ Dennis Ritchie ν񤤤ץץå Ken Thompson ν
ѥ餬ޤѥϥץץǽ¢ΤǤ
ʤ#if Ƥʤˡ
  ѥ顦ɥ饤Фˤ cc  pcc ΣĤޤCc ϥץץ
ƤӽФ˥ѥƤӽФΤǤPcc ʤ portable cc
for ANSI & POSIX environment ϥץץåƤӽФƤ饳ѥ
ƤӽФΤǤInclude directory ⤳ξԤǰۤʤäƤޤ
  MCPP Υˤ #if ȤƤΤǡpcc ǤʤȥѥǤ
󡣤ΤϡMCPP  pcc ǥѥ뤷 Ritchie  cpp 
֤ƻȤˡǤ
  Plan 9 ǤϤޤmake  mk Ȥ̾ΥޥɤȤʤäƤꡢmakefile
 mkfile Ȥ̾ˤΤǤmkfile ν񼰤¾ make ȤϤ
ʤäƤơPlan 9 ѤΤΤȤʤäƤޤޤif, else ϻȤ
ΤǡѥλѤ mkfile 񤭴ɬפޤ

  MCPP 򥳥ѥ뤹ˤ MCPP  src ǥ쥯ȥǡnoconfig.H  [3.
1.9] ˤ褦ˡѹäǡ

    cp ../noconfig/plan9.mk mkfile
    mk
    mk install
    mk clean

Ȥޤȡmcpp_std Ȥ̾μ¹ԥץब /$objtype/bin/
ǥ쥯ȥ˥ԡΤǡ

    cp /$objtype/bin/cpp /$objtype/bin/cpp_ritchie

Ȥ Ritchie cpp ¸ǡ

    cp /$objtype/bin/mcpp_std /$objtype/bin/cpp

Ȥޤ$objtype ȤĶѿ CPU  x86 ξ 386 ȤʤΤǡ
ľ 386 ȥפФߤޤ

  MCPP  "pre-preprocess" ǽȤä MCPP ꥳѥ뤹ˤϡ
mkfile 

    PREPROCESSED=0

ȤԤ

    PREPROCESSED=1

Ƚ񤭴ǡ

    mk preprocessed

Ȥޤmk install ʲϾ嵭ƱͤǤ

    [3.8]       MCPP 򥳥ѥǤ

  ƽϤ˰ܿ뤿ˤϤĤ꤬ɬפǤMCPP Υ
ѥ뤹뤳ȼΤϡK&R 1st. λͤƤϤǤн
ʬǤޤΤ˸СK&R 1st.  Standard C Ȥζ̻ͤ
нʬǤ
  C++ Ǥ⥳ѥǤޤC++ Ǥ뤫ɤϡ#ifdef __cplusplus
ȽǤƤˡμǥѥ뤷ޤ

  1.  lib.c ʳ *.c  *.cc 뤤 *.cpp  rename 롣
  2.  make 롣MCPP Ȥä "pre-preprocess"  cpp  -+ 
ץդ롣

  źդ *.mak ǤϡϤˤä make  CPLUS=1 ޤ -DCPLUS=1 
ץդƵưޤC++ ǥѥ뤷ƤåȤϲ
⤢ޤ

  char դǤʤǤ⤫ޤޤ
  ư黻פǤ

  ץץåƱͤǡɤ Reiser model cpp MCPP
 OLD_PREPROCESSOR ⡼ɤ˶ᤤˤǤĤǤ#if  int 
ȤʤΤ䡢ɾʤꤤʤΤǤפǤ礦
MCPP ȤȤäƥꥳѥ뤹⡢MCPP μ¹ԥץ system.
H Ǥɤ⡼ɤ򤷤ΤǤ⤫ޤޤʤɸ
إåΥ⡼ɤ MCPP λʤͤȤƤä̤Ǥ
ˡ

  ΥϽϤ̯ʺ˱ƶʤ褦˽񤤤Ƥޤ
Standard C ǿߤ줿ǽϻȤäƤޤStandard C ˴б
ץץåΥ portable ˽񤯤ˤϡˡΤɬ
ΤǤ*
  äȤ⡢ºݤ˳ƽϤǥѥ뤹뤿ˤϡˤνϤΥ
򤹤ɬפޤϤäƤߤʤȲФƤ뤫狼ޤ
󡣻䤬ܿĤνϤǤ⡢ХǤ뤳ȤΤ᤽βˡ
򸫤ĤޤǤˤʤλ֤äƤޤäȤ󤫤ޤ

  * printf() Ǥ long long  length modifier εҤˤʸ
    ƥϢȤ Standard C λͤȤäƤ롣Length modifier
    Ϥˤäưۤʤ뤿ᡢˡȤ뤷ʤΤǤ롣ơ
    long long ĽϤʸƥϢ뤬ǤʤȤȤϤ
    ϤǤ롣

    [3.9]       ѥ뤹ϤȥåȤν

  MCPP Υ򥳥ѥ뤹ϡʥۥȡˤȡˤä
 MCPP μ¹ԥץȤϡʥåȡˤȤϡɬƱǤ
ɬפϤޤ󡣤줬äƤϡnoconfig.H (configed.H) 
SYSTEM, COMPILER ǥåȤꤷHOST_SYSTEM, HOST_COMPILER ϥۥ
ȤꤷޤޤPART 1 ˤϥåѤΤΤǡPART 2
ˤΤϥۥѤǤsystem.c ϼȤƥåѤΤΤ
lib.c ϥۥѤǥѥ뤷ޤ
  Τ褦¤ޤ
  ۥȽϤϥåȽϤƱϣӾΤΤǤ뤫ޤϥ
ѥǤ뤳ȤɬפǤ
  ۥȽϤ long (unsigned long) ϥåȽϤΤ
ϤƤϤޤ󡣤 Standard C ǵꤵƤǤ⤢
C99 Ǥ long long (unsigned long long) ˤĤƱȤޤ

  ʤǸۥȤȥåȤȤΤϡѥΤ
ϴطޤ󡣥ѥ뤹ΤϥѥΤλŻǡץ
åϸ§ȤƤˤϴΤޤCpp ֥ѥˡװ
ϡΥѥ餬ǸåȽϤǤۥ
ȽϤȤƤϥѥǤʤΤȤȤˤʤϤǤCpp
֥ѥǡץѥ뤹ϡΥѥ餬ۥ
ȽϤǡѥΥåȤåȽϤȤʤޤ
  UNIX ư Windows ѥץΥϤ MCPP 褦
ʾϡnoconfig.H  PART 1  MBCHAR  EUC_JP ǤϤʤ SJIS Ȥ
ʤmulti-byte character encoding λϥåȤΤ˹
碌ޤencoding ϼ¹Ի˻ꤹ뤳ȤǤˡ
  MCPP ǤϡMCPP 򥳥ѥ뤹ۥȽϤʸåȤȤ
ȤåȽϤʸåȤȤϤȤ ASCII ǤȲꤷƤ
ѥΥۥȤȥåȤʸåȤˤĤƤƱͤǤ
⤷ξԤʸåȤۤʤϡmbchar.c  type_*[] ɬפʤ
noconfig.H  ALERT, VT 򥿡åȽϤΤ˹碌ʸƥ
Ϣ MCPP ǤϤʤ褦ˤСCONCAT_STRINGS  FALSE Ȥ
ɤΤǤϤʤȻפޤʸƥʸ numeric
escape sequence ʳʸϥѥΥѥΤѴ
ܤʸƥϢ⤷ƤΤǤСˡ ASCII ʳʸ
åȤ⥯ѥȤΤȤäȤʤΤǡ褯狼


    [3.10]      бƤʤ

  MCPP бƤʤΤϡüʸåȤĽϤü CPU 

  EBCDIC ˤбƤޤEBCDIC  mbchar.c  type_*[] Ȥʸ
פΥơ֥ؤбǤΤǤϤʤȻפޤ
ΤȤˤϥƥȤĶޤ
  ޤ黻Ǥʤ CPU ˤ⡢бƤޤ󡣣
ʤϡ#if ǥСեȯˡʤ뤫⤷


    [3.11]      MS-DOS Υǥ

  MCPP  MS-DOS νϤ˰ܿϡǥˤä
translation limits ȥ®٤ۤʤΤǡŪ˱Ŭʥ
ǥ򤹤ɬפޤ
  ץνˤ small data memory model Ǥ⤹ߤޤ
ޥɴİʾ⤢äꡢ1 KB ʾ˵ڤĹʥޥ
äꡢĹĥޥͥȤƸƤӽФꤹ륽򥳥
ѥ뤹ɬפʤ顢large data ǥǥѥ뤷ƤƤ
small data ǥǥѥ뤷 cpp ٤ƣ䡢®٤٤
뤬ˡ
  MCPP ǽȤˤ large code ǥǥѥ뤹ɬפ
ޤsmall code ǥξϡsystem.H  OK_MAKE  DEBUG_EVAL 
FALSE ˤʤɤơεǽʤ褦ˤޤ


ƽϤ˰ܿˡܺ١

    [4.1]       noconfig.H, configed.H, system.H 

  Υإåե˵ҤƤ뤳Ȥΰ̣ϡƤɤФ
ȻפޤȤ¿񤭹ǤޤǰΤ˰ʲ
񤤤Ƥޤ
  PART 1, PART 2  noconfig.H (configed.H) ˤꡢPART 3  system.H
ˤޤ

  ޤåȥƥMCPP ܿ륷ƥˤȥۥȥƥ
MCPP 򥳥ѥ뤹륷ƥˤꤷޤ

SYSTEM
    åȽϤưϣӤꤷޤϣӤ̾Ϥľ
    Ƥޤ̾ƤʤϣӤŬƤ
COMPILER
    åȽϤꤷޤѥ̾Ϥľ
    ޤ̾ƤʤѥŬƤ
VERSION_MSG
    -v ץ usage() ʸɽ뤿ΥСʸ
    ǽ񤭤ޤ
HOST_SYSTEM, HOST_COMPILER
    ۥȣϣӡۥȽϤꤷޤåȤƱϡ

    #define HOST_SYSTEM     SYSTEM
    #define HOST_COMPILER   COMPILER

    ȤƤޤ

  SYSTEM, COMPILER ̿̾ˤϰε§ޤ򸫤ۤ
狼䤹Ǥ礦ġˤʤäƤޤSYSTEM ϥ
롼ɥեΥѥꥹȤηϣɸΥ󥯥롼ɥǥ쥯ȥ
Τ뤿ˤȤƤʤΤǡޤͤɬפϤޤ

    [4.1.1]     PART 1  åȥƥ

        [4.1.1.1]   ޥ

CPU_OLD, CPU_STD1, CPU_STD2, SYSTEM_OLD, SYSTEM_STD1, SYSTEM_STD2,
    SYSTEM_EXT, SYSTEM_EX2, COMPILER_OLD, COMPILER_STD1, COMPILER_STD2,
    COMPILER_EXT, COMPILER_EX2
    MCPP  pre-define ϸͭΥޥ̾ʸƥǻ
    ꤷޤפʤΤʤǤޤ0 ĤΥȡ
    Ϥʤˡ*_OLD Τ '_' (underline) ǻϤޤʤ
    ήΥޥǡ MCPP ¹Ի -S <n> ץ <n> 
    1 ʾꤹ pre-define ޤ*_STD?, *_EXT, *_EX2 Ǥ
    ɬ _ ǻϤޤޥ̾ꤷޤ*_STD1  __ ǻϤޤΤǡ*
    _STD2  __ ǻϤޤä __ ǽΤǤSYSTEM_EXT, SYSTEM_EX2,
    COMPILER_STD1, COMPILER_STD2, COMPILER_EXT, COMPILER_EX2 ǤϤΥ
    ͤ SYSTEM_EXT_VAL, SYSTEM_EX2_VAL, COMPILER_STD1_VAL,
    COMPILER_STD2_VAL, COMPILER_EXT_VAL, COMPILER_EX2_VAL ǻꤷޤ
     "" ǰϤʸƥǻꤷޤ0 ĤΥȡ
    Ÿޥ "" ޤꤵʤСΥޥ
     1 ˤʤޤ¾ predefined ޥCPU_*, SYSTEM_OLD,
    SYSTEM_STD1, SYSTEM_STD2, COMPILER_OLD ǻꤵΡˤϤ٤ 1
    ͤޤ
CPU_SP_OLD, CPU_SP_STD
    ϸͭüʻޥ̾ʸƥǽ񤭤ޤ
    Ϥ٤ 1 Ȥʤޤ
SYSTEM_SP_OLD, SYSTEM_SP_STD
    ϸͭüʻޥ̾ʸƥǽ񤭡
     SYSTEM_SP_OLD_VAL, SYSTEM_SP_STD_VAL ޤ
COMPILER_SP1, COMPILER_SP2, COMPILER_SP3
    ϸͭüʻޥ̾ʸƥǽ񤭡
     COMPILER_SP1_VAL, COMPILER_SP2_VAL, COMPILER_SP3_VAL ޤ
COMPILER_CPLUS, COMPILER_CPLUS_VAL
    -+ ץC++ ץץˤꤷϸͭ
    λޥ̾Ȥͤ嵭Ʊ褦ʸƥǻ
    ޤCOMPILER_CPLUS_VAL ꤷʤȡΥޥͤ 1 ˤʤ
    ޤ̾ '_' ǻϤޤΤǤʤФʤޤɬפʤ
    COMPILER_CPLUS ΤΤʤǤޤ

  ʾǻ줿ޥϤ٤ -N ץ̵Ȥʤޤ

        [4.1.1.2]   Include ǥ쥯ȥ

C_INCLUDE_DIR1, C_INCLUDE_DIR2, CPLUS_INCLUDE_DIR1, CPLUS_INCLUDE_DIR2,
    CPLUS_INCLUDE_DIR3
    MCPP ǥɸإåե include directory ꤷޤ
    CPLUS_INCLUDE_DIR?  C++  include directory äΤΤȰäƤ
    ˡꤷޤMCPP ư -+ ץꤹ뤳
    ȤͭȤʤˡUNIX  /usr/include, /usr/local/include  system.
    c ꤵΤǡC_INCLUDE_DIR? ˤϤʳνϸͭΤΤ
    ꤷޤ
ENV_C_INCLUDE_DIR, ENV_CPLUS_INCLUDE_DIR
    MCPP ǥɸإåե include directory ¹Ի˴
    ѿǻꤹΤˡδĶѿ̾ޤ
    ENV_CPLUS_INCLUDE_DIR  C++  include directory ꤹĶѿ
    ̾ǤǥեȤǤϤ줾 "INCLUDE", "CPLUS_INCLUDE" 
    ޤGNU C ˼ "C_INCLUDE_PATH",
    "CPLUS_INCLUDE_PATH" ǥեȤǤ
    ѥϤγsystem.c ꤵΡ-I ץꤵ
    Τޤʤ̤ͥˤĤƤ mcpp-manual.txt [4.2]
    򻲾ȡˡ
ENV_SEP
    δĶѿʣΥѥ񤯻 separator ʸǽ񤭤ޤ
    /usr/local/abc/include:/usr/local/xyz/include Ƚ񤯻 ':' 
    C:BC55/INCLUDE;C:BC55/LOCAL/INCLUDE Ƚ񤯻 ';' Ǥ
SEARCH_INIT
    åȽϤ include ե򥵡Υ롼񤭤ޤ
    #include "../dir/header.h" Ȥäǥ쥯ƥ֤ˡ
    include ǥ쥯ȥ򥵡ˤɤΥǥ쥯ȥ򥵡Τ
    Ȥ롼Ǥȥǥ쥯ȥ꤫Хѥ򥵡
    ϤǤ CURRENT Ȥեinclude ˤΤǥ쥯ȥ
    Хѥ򥵡ϤǤ SOURCE ȤޤξԤȹ
    碌Ǥ (CURRENT & SOURCE) Ȥޤ

        [4.1.1.3]   ֹνϻͤ¾

LINE_PREFIX
    MCPP  compiler-proper ˥ե̾ȹֹ
    ޤ

    #line 123 "fname"

    ȤäΥηǥեȤȤʤäƤޤ¾ηȤ
    ϤǤϡ "#line " ʬ֤ sequence ʸƥ
    ǽ񤤤Ƥޤ

    # 123 "fname"

    Ȥʤ "# " ɤǤʤȼηʤ餽˹
    ޤʾˤäƤ system.c  sharp() ˽­ʤ
    Фʤʤ⤷ʤˡ
    ϤˤäƤϡGNU C Τ褦ˡ°ץץåνϤϣܤ
    ǤϤʤcompiler-proper ϣܤηǧ礬ޤ
    ̤ˤϡܤΤۤäΥƱǰΤǹޤ
    ȸޤCompiler-proper ǧСƱϣӾǤ cpp
    ϽϤäƤ⣱ĤǤ­뤯餤Ǥ
    ¹Իץ󤬰㤦Ȥ꤬ΤǡºݤˤϤñ
    ǤϤޤ󡣤ޤGNU  tool ˤ GNU C / cpp ͭνϷ
    򤢤ƤˤƤΤ⤢ΤǡGNU C ǤϤ̵ۤ
    ǤGNU C ѤǤϤǥեȤˤƤˡ
    Visual C++ .net  Borland C Τ褦ʣѥѥʤ MCPP
    ȤϡȤ߹ߥץץå˽ϤϤȤˤʤΤǡMCPP
    νϤϣäΥˤʤäƤʤФʤޤ󡣤äơֹ
    ϤϣܤηǤʤФʤޤ

EMFILE
    <errno.h>  too many open files (for the process) ̣ errno
    ͤɽޥ EMFILE ǤʤϡEMFILE 򤽤Υޥ̾
    ޤʤ<errno.h> Τ˽񤭲äƤ⤫ޤʤˡ
ONE_PASS
    åȽϤץץåʬΥƤʤ֥ѥ
    ѥפǤФ TRUE ˡǤʤ FALSE 
     TRUE Ȥȡ#pragma MCPP put_defines (#put_defines) 
    ϡϤλޥϤ٤ƥȤǰϤǽϤޤ
    ѥǤ MCPP νϤ򤳤ͿȺ٥ץץ뤳
    ȤˤʤΤǡ򤱤뤿Ǥ
    GNU C V.3 ϥѥѥȸޤΩץץ
    åȤȤǤΤǡΥޥ FALSE ȤƤޤ
FNAME_FOLD
    ե̾ʸȾʸ̤ʤϣӤǤϤ TRUE 
    Ǥʤ FALSE Ȥޤ

        [4.1.1.4]   Ϥθͤ˱

HAVE_PRAGMA
    #pragma ǧ compiler-proper ǤФ TRUE Ȥ
    ʤ FALSE Ȥޤ
EXPAND_PRAGMA
    MODE == STANDARD  -V199901L ץꤷ #pragma Ԥ
     STDC ʳǤХޥŸоݤȤʤϤǤϡ
    TRUE ޤǥեȤǤ FALSE ȤƤޤVisual C Ǥ
    #pragma ԤΰϾ˥ޥŸоݤȤʤΤǡ TRUE Ȥ
    MCPP  Visual C ѤǤ⡢C99  #pragma ΰ STDC 
     MCPP ǻϤޤʤޥŸоݤȤޤ

HAVE_DIGRAPHS
    Digraphs Ƥ TRUEǤʤ FALSE Ȥ
    ޤ
CAN_CONCAT_STRINGS
    ܤʸƥ뤬ѥˤäϢ뤵ϤǤϡ
     TRUE Ȥޤ
STDC
    åȽϤλޥ __STDC__ Υǥեͤޤ
    __STDC__ Ƥʤ 0 Ȥޤ
STDC_VERSION
    åȽϤλޥ __STDC_VERSION__ Υǥեͤ
    ޤ__STDC_VERSION__ Ƥʤ 0L Ȥޤ

CHARBIT, UCHARMAX, LONGMAX, ULONGMAX
    åȽϤ <limits.h>  CHAR_BIT, UCHAR_MAX, LONG_MAX,
    ULONG_MAX ͤ񤭤ޤunsigned long ΤʤϤǤ ULONGMAX 
    LONG_MAX ͤȤޤ<limits.h> ʤƤϴñǤ

HAVE_C_BACKSLASH_A
    åȽϤΥѥΤ '\a', '\v' Ȥ escape sequence
    ǧϤ TRUE ˤǤʤ FALSE ˤޤ

        [4.1.1.5]   Multi-byte character

  MBCHAR Ȥޥ multi-byte character  encoding ꤹ
Ǥ16 ӥåȥƥǤϡꤵ줿 encoding Ȥޤ
32 ӥåȰʾΥƥǤϡο encoding ٤Ʊ
˼ޤMBCHAR ϥǥեȤ encoding ꤹǡ¹Ի
 encoding Ķѿץ#pragma ѹ뤳ȤǤޤʻ
ˤĤƤ mcpp-manual.txt  [2.3], [2.8], [3.4] 򻲾ȡˡ

MBCHAR
    åȤ multi-byte character ʤܸǤϴ encoding
    μޤ
    16 ӥåȥƥ 32 ӥåȰʾΥƥΤɤǤǤ
    encoding ϼ̤Ǥ
        EUC_JP  :   ܤ extended UNIX code (UJIS)
        SJIS    :   ܤ shift-JIS (MS-Kanji)
        GB2312  :    EUC-like  GB-2312ʴλ
        BIGFIVE :   Ѥ Big Fiveλ
        KSC5601 :   ڹ EUC-like  KSC-5601 (KSX 1001)
    Ϥ shift-states ʤʸХȤ
    encoding Ǥʤmulti-byte character, wide character 
    encoding ХȤǤˤ⤫餺wchar_t ХȤηˤ
    äƤϤ⤢ޤץץå wchar_t ηˤϴΤ
    ޤ󡣥Ǥ multi-byte character  wide character Х
    ȤƤΤǡ˽äƽ򤷤ޤ
    32 ӥåȰʾΥƥǤϼ encoding Ǥޤ
        ISO2022_JP  :   ISO-2022-JP1 Ȥݵʤܸ
        UTF8    :   unicode  encoding ΣǤ UTF-8
    ISO-2022-*  shift-states  encoding ǤUTF-8 ϣХȤ
    unicode 򣱥ХȤʤХȤ encode ΤǤϣХ
    Ȥˤʤޤ
    MBCHAR  0 硢16 ӥåȥƥǤ multi-byte
    character νϼޤ󤬡32 ӥåȰʾΥƥǤ
    multi-byte character ν򤷤ʤΤǥեȤλͤˤʤǡ
    Ķѿץ#pragma Ǽ¹Իѹޤ

SJIS_IS_ESCAPE_FREE
    ѥΤ shift-JIS ν򤹤 TRUE Ȥʤ
     FALSE Ȥޤ
    Shift-JIS ǤϴΣХܤ '\\' Ʊ 0x5c ͤˤʤ뤳Ȥ
    ޤѥΤ shift-JIS ǧʤϡ escape
    sequence ȲᤷƤޤtokenization ǥ顼ˤʤޤ
    SJIS_IS_ESCAPE_FREE  FALSE ȤȡMCPP 䤤ޤʤ
    ǽϤλˡʸƥޤʸ shift-JIS 
    裲ХȤ 0x5c Ǥäϡ 0x5c ΥХȤ⤦
    äޤˤäơѸǤΥѥ shift-JIS б
    뤳ȤǤޤ
BIGFIVE_IS_ESCAPE_FREE
    ƱͤˡѥΤ Big Five ν򤹤Ϥ TRUE Ȥ
    ʤ FALSE Ȥޤ
IS02022_JP_IS_ESCAPE_FREE
    ƱͤˡѥΤ ISO-2022-JP ν򤹤Ϥ TRUE
    Ȥʤ FALSE ȤޤIS0-2022-* Ǥ '\\' ФǤʤ
    '\''  '"' ȰפХȤиޤISO2022_JP_IS_ESCAPE_FREE
     FALSE ξ MCPP ϡ'\\', '\'', '"' ȰפХȤľ
    ٤ 0x5c ΥХȤ򣱤ޤ

  ʤmulti-byte character ˴ؤ륳ѥưϼ¹ԤδĶ
ˤäѤ礬ޤʬλȤĶ˹碌ꤷƤ
ˤĤƤϡmcpp-manual.txt  [2.8] ⻲ȤƤ

        [4.1.1.6]   åȤȥۥȤ˶̤

  ΣĤص塢PART 1 ˽񤤤ƤޤåȽϤȥۥ
Ϥηľ TRUE ȤǤʤ FALSE 
ޤHAVE_LDBL ϸҤ OK_SIZE  TRUE ξȤΤǤ

HAVE_UNSIGNED_LONG
    unsigned long ȤǡĽϤǤϤ TRUE Ȥޤ
HAVE_LONG_LONG
    long long ȤǡĽϤǤϤ TRUE Ȥޤ
    Visual C  Borland C 5.5 Τ褦ˡlong long Ϥʤ __int64 Ȥ
    Ʊη printf() ɽ뤿 length modifier 
    ѰդƤϡ TRUE Ȥޤ
HAVE_LONG_DOUBLE
    long double ȤǡĽϤǤϤ TRUE Ȥޤ
HAVE_INTMAX_T
    intmax_t ȤǡƤФ TRUE Ȥޤ

LL_FORM
    åȽϤ long long äƤϡνϤκ
    ͤ printf() ɽ뤿 length modifier ʸ
    ޤC99 Ǥ "j" ǤޤC99 Ǥ long long 
    length modifier  "ll" (ell-ell) ǤVisual C, Borland C 5.5 Ǥ
    __int64 ͤɽ "I64" Ȥޤ

        [4.1.2]     PART 2  ۥȥƥ

  configed.H ǤϥåȽϤȥۥȽϤȤƱǤȲꤷ
ޤۤʤ PART 2 ľɬפޤ

PROTO
    Compiler-proper ؿΥץȥΤǤΤǤФ
    TRUE ȤǤʤ FALSE Ȥޤ
HOST_HAVE_GETENV
    Ϥ getenv() ȤؿäƤФ TRUE ȤǤ
     FALSE ȤޤåȤΣϣӤĶѿäƤ
    ɬפޤ
HOST_HAVE_GETOPT, HOST_HAVE_STPCPY, HOST_HAVE_MEMMOVE, HOST_HAVE_MEMCPY,
    HOST_HAVE_MEMCMP, HOST_HAVE_STRSTR, HOST_HAVE_STRCSPN
    ۥȽϤΥ饤֥ getopt(), stpcpy(), memmove(), memcpy(),
    memcmp(), strstr(), strcspn() Ф줾 TRUE ˡʤ
    FALSE ޤFALSE Ȥ줿ؿˤ lib.c ΤΤȤޤ
FILENAMEMAX
    ۥȽϤ <stdio.h>  FILENAME_MAX ͤǤFILENAME_MAX 
    ϡMS-DOS Ǥ 80¾ΣϣӤǤ BUFSIZ ȤƤƤޤޤ
    
HOST_HAVE_C_BACKSLASH_A
    ۥȽϤΥѥΤ '\a', '\v' Ȥ escape sequence 
    ǧʤϡ FALSE ˤޤ

  Ȥϥ饤֥ؿsize_t ηǤФ狼Ǥ
礦

        [4.1.3]     PART 3  MCPP ưͤ

            [4.1.3.1]   ƼΥ⡼ɤλ

MODE
    ޥŸˡȤǥ쥯ƥ֡Ȥ predefined ޥ
    ץץåκȤʤưλͤꤷޤPRE_STANDARD,
    STANDARD Σ郎ޤΥޥϤ줾 0, 1 ͤ
    ޤ

PRE_STANDARD
    C90 ΥץץͤǤK&R 1st. ϤǤ
STANDARD
    Standard C (C90, C99, C++98) ΥץץͤǤ

      STANDARD  PRE_STANDARD Υ⡼ɤȤǤϡޥŸˡΰ㤤¿
    ޤStandard C  pre-Standard Ȥΰ㤤Ȼפäƴְ㤤
    ޤ󡣺Ǥ礭ʰ㤤ϡؿͥޥʰդޥˤŸǡ
    ˥ޥޤޤƤ硢MODE == STANDARD Ǥϰ˴
    ŸƤ鸵ޥִꥹΥѥ᡼֤ΤФơ
    PRE_STANDARD ǤŸ˥ѥ᡼ִƥŸ
    뤳ȤǤ
      ޤMODE == STANDARD ǤľܤˤܤˤޥκƵŪŸϤ
    ޤPRE_STANDARD ǤϺƵŪʥޥȡŸ˥顼
    Ȥʤޤ

      ˤ \ ΰ MODE ˤäưۤʤꡢMODE == STANDARD Ǥ
    tri-graph θ塢tokenization  <backslash><newline> 
    sequence ޤMODE == PRE_STANDARD Ǥʸƥ
    ˤ #define Ԥˤ˸¤äƤޤ

       tokenizationʥȡʬ䡢ȡڤФˤ MODE
    ˤä̯˰㤤ޤ
      MODE == STANDARD Ǥϡtoken base ǤưפȤ¤
    tokenization ԤޤŪˤϡMODE == STANDARD Ǥϡޥ
    ŸȤ space ơ token ȤΰտޤʤϢ
    뤬ȯΤɤޤMODE == PRE_STANDARD ŪصŪ
    Ū tokenization ȡcharacter base ǤΥƥִפˤ
    ŸˡκפĤƤޤ
      ˤĤƤϡcpp-test.txt  [1] 

      MODE == STANDARD Ǥ preprocessing number Ȥͥȡ
    ̤˰ޤPRE_STANDARD Ǥϡͥȡϣäȡ
    󤪤ưȡƱǤǤ 'U',
    'u', 'LL', 'll'ưǤ 'F', 'f', 'L', 'l'  ȡ
    ΰȤǧޤ
      磻ʸʸƥʸ MODE == STANDARD Ǥñ
    ΥȡȤǧޤ

      Digraph, #error, #pragma, _Pragma() operator  MODE == STANDARD
    ǤʤȻȤޤ-S <n> ץstrict-ansi ⡼ɡˤ -+ 
    ץC++ ץץåȤưˤ MODE == STANDARD Ǥ
    ȤޤPre-defined ޥ __STDC__, __STDC_VERSION__  MODE
    == STANDARD λ졢PRE_STANDARD λޤ[4.1.
    3.2] ǽҤ٤ OK_DIGRAPHS, CONCAT_STRINGS  MODE == STANDARD Ǥʤ
     TRUE ˤǤޤ
      UCN (universal-character-name)  MODE == STANDARD ǤȤޤ
    
      Trigraphs  MODE == STANDARD ǤǤޤ
      #if defined, #elif  PRE_STANDARD ǤϻȤޤ#include, #line
    ΰ˥ޥȤȤ PRE_STANDARD ǤϤǤޤPre-defined
    ޥ __FILE__, __LINE__, __DATE__, __TIME__  PRE_STANDARD λ
    ޤ
      ¾ǡ#assert, #asm (#endasm), #put_defines, #debug  MODE ==
    PRE_STANDARD λǤޤ
      #if  MODE == STANDARD Ǥ long / unsigned long ޤ long
    long / unsigned long long ɾޤMODE == PRE_STANDARD Ǥ
    long ɾޤ

      ǥåν⡼ɤˤäƾäƤޤˤĤ
     mcpp-manual.txt  [5] 򸫤Ƥ

      ʾ˽Ҥ٤Ȱʳ K&R 1st.  Standard C ȰۤʤΤʵ
    ʤȤˤĤƤϡMODE == PRE_STANDARD Ǥ C90 ε˽
    

      ѥ MODE Τۤˡ¹Իץǻꤵ
    ɤ⤢ޤMODE == STANDARD ǥѥ뤵줿 MCPP ˤϼ
    "post-Standard" ⡼ɤꤹ륪ץ󤬤ꡢMODE ==
    PRE_STANDARD ǥѥ뤵줿 MCPP ˤ "Reiser cpp" ⡼ɤ
    륪ץ󤬤ޤޤMODE == STANDARD ˤ "compat" ⡼
    ɤȤüʥץ⤢ޤϤ⥳ѥ
    ϴطޤ

                [4.1.3.2]   ư⡼ɤκλ

OK_SIZE
     TRUE ˤȡ#if, #elif Ԥ sizeof (type) Ȥޤ
     TRUE ˤ GNU C ǥѥ뤹ϡʤȤ eval.c
    ΥѥǤ -ansi, -pedantic, -pedantic-errors ץդ
    ʤǤ

CPLUS
    -+ ץ C++ ΥץץåȤưˡɸȤ߹
    ߥޥ __cplusplus ͤ˻ޤISO C++ Standard 
     199711L Ǥ-V ץˤäƼ¹ԻѹǤޤ
OK_TRIGRAPHS
    Trigraphs  TRUEǤʤ FALSE Ȥޤ
    MODE == PRE_STANDARD ǤϤɤˤƤ trigraph ϼǤ
    ޤ
TFLAG_INIT
    OK_TRIGRAPHS == TRUE ξ trigraph ν֤ꤷޤ
     TRUE ˤȡdefault  trigraph ǧ졢-3 ץ
    ǵưǧޤFALSE ξϵդ default ǧ-3
    ץǧ褦ˤʤޤ
OK_DIGRAPHS
    Digraphs Ϥ TRUE ޤMODE == STANDARD
    ǤϡHAVE_DIGRAPHS == FALSE νϤξ硢digraphs  MCPP ̾
    ΥȡѴޤ
DIGRAPHS_INIT
    OK_DIGRAPHS == TRUE ξ digraph ν֤ꤷޤ
     TRUE ˤȡdefault  digraph ǧ졢-2 ץǵ
    ưǧޤFALSE ξϵդ default ǧ-2 
    ǧ褦ˤʤޤ
OK_PRAGMA_OP
     TRUE ˤȡ__STDC_VERSION__ >= 199901L λ _Pragma()
    operator ͭˤʤޤα黻Ҥ C99 ΤΤǤ
     MODE == STANDARD Ǥ TRUE ˤǤޤ
OK_UCN
    MODE == STANDARD  -V199901L ޤ -+ ץꤷ UCN
    (universal-character-name) ͭˤˤϡ TRUE 
    ǥեȤǤ TRUE ȤƤޤ
OK_MBIDENT
    MODE == STANDARD  -V199901L ץꤷȤ identifier
     multi-byte character Ȥ褦ˤˤϡ TRUE 
    ޤǥեȤǤ FALSE ȤƤޤ
CONCAT_STRINGS
    ܤʸƥ MCPP Ϣ뤷ޤΤɬפʺǾ¤
    escape sequence Ѵ⡢ΩäƤޤCAN_CONCAT_STRINGS
    == FALSE νϤΤΤΤǤCONCAT_STRINGS  OK_UCN
    򶦤 TRUE ȤƤ⡢UCN  multi-byte-character ؤѴϤޤ
     MODE == STANDARD λ TRUE ˤǤޤ
    ʤϢǤϡʸκǸ夬ʤޤϣʤ escape
    sequence ǡʸƬΤޤϢ뤹Ȥ escape
    sequence ΰȤʤäƤޤΤϡԤʸ򣳥
     escape sequence ѴϢ뤹Ȥˡǡư
    򤷤ƤޤȤBorland C ˤϣ escape sequence ˴ؤ
    ̯ʥХʻͤޤMCPP ǤʸƥϢ뤬
    ΥХαƶ򤹤褦˹פƤޤ

expr_t, uexpr_t
    Ǥ礭η typedef ޤintmax_t, uintmax_t Ȥ
    ФˡǤʤ long long, unsigned long long 
    ĽϤǤϤˡǤʤ __int64, unsigned __int64 
    ĽϤǤϤˡǤʤ long, unsigned long ˡunsigned
    long ʤϤǤ long, long ޤʤC99 Ǥ long
    long, unsigned long long ɬܤȤʤäƤޤ
EXPR_MAX
    uexpr_t κͤޤ

  * UCN  C++, C99 λͤǡUnicode ʸͤ \u ޤ \U ǻϤޤ
     escape sequence ɽΤǤmcpp-manual.txt [3.7],
    cpp-test.txt [1.8], [3.5] ȡˡ

        [4.1.3.3]   üʻ

DOLLAR_IN_NAME
     TRUE ˤȡ̻ $ Ȥ褦ˤʤޤ
TOP_SPACE
     TRUE ˤȡƬΥȤޤ white spaces ʸ§Ȥ
     a space ˰̤ǡ˽ϤޤFALSE ˤȺޤ
    äΥǤϹƬ white spaces ˤϲΰ̣ʤΤ FALSE Ǥ
    ޤʤϤʤΤǤ֥ץå֤Ȥ
    ʰȿ ѥ뤹ʤɤˤϡTRUE ǥѥ뤷Ƥ
    ȤɬפˤʤޤMCPP ðʳβθΥץץå
    ήѤˤ⡢ɬפˤʤ뤫⤷ޤ󡣥ǥեȤǤ TRUE Ȥ
    ƤޤPRE_STANDARD  #asm Ƥϡ#asm ֥å
    Ǥ TOP_SPACE ɤǤȹƬ white spaces Ϻ
    tokenization Ԥޤ
OK_MAKE
     TRUE ˤȡmakefile Ѱ¸طԤϤ -M* ץ
    ޤ

  ΣĤ MCPP ȤΥǥХåѤΤΤǤtokenization ޥ
Ÿ #if Ԥɾȥ졼뤳ȤǤޤ

DEBUG
     TRUE ˤȡǥХåѤΥ롼ޤ
DEBUG_EVAL
     TRUE ˤȡ#if, #elif Ԥ˴ؤǥХåѥ롼
    ޤ

        [4.1.3.4]   Translation limits λ

RESCAN_LIMIT
    ޥŸκθ٤ޤMODE == PRE_STANDARD 
    ϺƵŪʥޥŸˤä̵¥롼פȯޤ줬Υ
    ߥåȤˤҤäޤMODE == STANDARD ǤϺϾʤΤǡ
    ޤ礭ͤꤹɬפϤޤ
NBUFF
    ԡʥʪԤι \ ä³ԡˤκĹ +1 
    ޤȤ a space ѴιԡʥȤˤäʣ
    Ԥˤޤ뤳Ȥ⤢ꤦˤ⤳ĹˤޤäƤʤ
    ʤޤ
NMACWORK
    ޥŸŪʥХåեΥޤʤĤ
    ΥޥŸ̡ʥޥƤӽФʣԤˤޤϡ
    Ÿ̡ˤϤΥˤޤäƤʤФʤޤ󡣤
    ϤޤĤΥޥִꥹȤŪ˵ݤκĹ
    ƤȤޤ
NWORK
    MCPP νϤĹޤ compiler-proper μ
    Ĺ+1 ۤƤϤޤ󡣤ޤNBUFF, NMACWORK ͤ
    Ƥ⤤ޤNWORK < NMACWORK ξ硢ޥŸιĹ
    ۤϡMCPP ʲιĹʬ䤷ƽϤޤʸ
    CONCAT_STRINGS == TRUE ξϢʸƥˤĹ
     NWORK-2 ϰϤ˼ޤäƤʤФʤޤʸƥĹ
    ȤΤϡchar ǿΤȤǤϤʤǤʸ
    ƥȤȡĹǤ롣ξü " ޤߡ\n ϣХȤ
    롣磻ʸƥǤƬ L ޤˡ
IDMAX
    ̻ҤκĹޤĹ̾⥨顼ˤϤʤޤ󤬡
    Ĺڤͤޤ
NMACPARS
    ؿͥޥΰκޤ UCHARMAX 礭
    ϤǤޤ
NEXP
    #if ԤμΥåǤͥȥ٥θ٤ޤ
    ͥȥ٥뤬ľܷޤ櫓ǤϤʤΤˤϡȡ
    οΣܡ黻ҥȡοΣܤޤǻȤ롣ä
    ФǣĤȿˡ
BLK_NEST
    #if (#ifdef, #ifndef) section Υͥȥ٥θ١#if, etc. 
    ˥ͥȤǤ뤫ˤޤ
NINCLUDE
     include directory κޤ#include Υͥ
    ٥ΤȤǤϤʤͥȥ٥ˤ¤Ϥʤˡ
SBSIZE
    ޥŪ hash ʬषƵݤ hash table ǿ
    ޤɬΥ٥ǤʤФʤޤ󡣥ޥο꾮
    ưˤޤ礭ۤϤ®ʤޤ

  줾礭ͤˤۤɻͤϾˤʤޤNWORK, NBUFF,
NMACWORK, SBSIZE 礭Ȥ礭ʥ򿩤ޤη̡
ɥ쥹֤ξƥǤϥޥο¤ޤΤˤϥ
οΤΤǤϤʤ줾ΥޥĹιפꡣ
Ūʷ internal.H  struct defbuf ˽񤤤Ƥˡ
NWORK  system.H  default ͤΤޤޤǡMS-DOS Υ⡼ǥǥ
ѥ뤷 MCPP ξ硢ñʥޥǤпɴĤޤǤ
ǤĹʥޥ¿ȸ٤ϤäȲǤ礦
  NMACWORK, NEXP, RESCAN_LIMIT ϥå񤷤ޤ
  ¾ΤΤϥϤۤɬפȤޤ󤬡system.H ΥǥեȤͰ
ˤƤѾΰ̣ϤۤȤɤʤǤ礦
  C90, C99 ׵᤹ translation limits κ٤ system.H κǸ
ۤ˽񤤤ƤޤC++ Standard  translation limits 񤤤Ƥ
ϣäȰۤʤꡢ׵ͤǤϤޤ

    [4.2]       system.c

  ȤƥåȽϤ˴ؤ뤤ĤƤޤ

PATH_DELIM
    ϣӤ path-delimiter ƤޤPATH_DELIM  \ ȤƤϤ
    ޤʥץΤĤǡˡDOS/Windows ϤǤ / ȤƤޤ
    桼ץǤϤ \ ȤޤŪˤ / 
    ޤ
OBJEXT
    Ϥ뤤륪֥ȥեҤʸƥ
    ޤUNIX νϤ "o"DOS/Windows νϤ "obj"
    Ǥ -M* ץꤷ makefile Ѱ¸طԤ
    Ϥ˻ȤΤǤ

do_options()
    MCPP ưΥץƤޤޤ implement 
    ʤϤ implement ˤϡν°Υѥɥ
    Ф˹碌ơ˲Ԥ­ȤɬפǤ礦do_options()
    ɲäϡбƼ set_opt_list(), usage() ˤ
    ­ޤ
    do_options()  getopt() ƤӽФޤΤᡢĤΥץ
    ʸϰʤΤɤ餫˷ʤФʤޤ-P  -P-
    ȤäץλȤϸ§ȤƤǤޤʤ°
    ΥץץåȤθߴΤɬפʾϡ̵Ǥʤ
    -M ץμ򻲾ȡˡޤ-trigraphs ȤäĹץ
     t 򥪥ץʸȤ rigraphs Ȥ뤳ȤǼ
    ޤ
set_opt_list()
    MCPP Υץʸꤷޤ
usage()
    Usage ʸ񤫤Ƥޤե٥åȽˤʤäƤޤ
set_sys_dirs()
    Include directory ꤷƤޤnoconfig.H (configed.H) Υޥ
    C_INCLUDE_DIR?, CPLUS_INCLUDE_DIR? ǻꤵ줿ϸͭΥǥ쥯
    ȥΤۤUNIX ϣϣӤǤ /usr/include, /usr/local/include ⤳
    ꤷƤޤnoconfig.H, configed.H Υޥ ENV_C_INCLUDE_DIR,
    ENV_CPLUS_INCLUDE_DIR 줿̾δĶѿˤ include
    directory  set_env_dirs() ꤵˡ

do_pragma()
    #pragma νƤޤMCPP Ȥʤ #pragma sub-
    directive noconfig.H (configed.H) Υޥ HAVE_PRAGMA  TRUE 
    ϤΤޤ޽Ϥ compiler-proper ϤǤʤ
    warning ȤȤ˼ΤƤޤMCPP Ȥ #pragma MCPP debug 
    ϤƤӽФؿǽޤMCPP Ȥ #pragma sub-
    directive ϸ§Ȥ MCPP Ȥ̾ǻϤޤ褦ˤƤޤ
    ΰϸ§Ȥ MCPP ʤ #pragma ƱͤǤ
    #pragma MCPP put_defines, #pragma once ϽϤޤ󡣥إåΡ֥
    ץץפεǽȤäơϤ٥ץץΤĤ
    뤿Ǥmcpp-manual.txt  [3.1] ȡˡStandard C ǤϽ
    ϸͭγĥ directive  #pragma sub-directive ȤƼ뤳
    ˤʤäƤޤδؿ #if MODE == STANDARD  #endif ǰϤǤ
    ޤ
do_old()
    Standard C ˹פʤ preprocessing directive #pragma sub-
    directive Ǥʤ #assert, #asm, #endasm, #include_next, #warning, #
    put_defines, #debug ˤɬפʾϡν򤹤ؿ­
    ǡ餽ƤӽФ褦ˤޤƤӽФؿ
     #if MODE == PRE_STANDARD  #endif ǰϤߤޤʤGNU C 
    Ǥ #include_next, #warning  MODE == STANDARD ǤȤ褦ˤ
    Ƥˡ

    [4.3]   mbchar.c

  ˤ multi-byte character 롼󤬤ޤMCPP ΰܿǤ
Υե򤤤ɬפ̤ϤʤϤǤ̤ multi-
byte character encoding ϡʸפΥơ֥Ƚ
롼񤭲ä뤳Ȥˤʤޤ
  Multi-byte character Ȥߤϡ16 ӥåȥƥѤ 32 ӥåȰ
ΥƥѤȤǰäƤꡢ꡼ξʤ 16 ӥåȥƥѤϼ
Ǥ encoding ꤵƤޤ

char type[]
    16 ӥåȥƥѤʸפΥơ֥ǤʸåȤ
    ASCII Ǥ뤳ȤȤơEUC-JP, shift-JIS, KS C 5601, GB 2321-
    80, Big Five ΤΤ implement Ƥޤϥ桼ʸ
    ʳˤΥꥢޤǤޤ¾ʸåȤξϡ˽­
    ɬפޤShift-states ΤʤХ encoding ǤС
    system.H  MBCHAR Υơ֥бǤϤ
    Ǥ
short type_*[]
    32 ӥåȰʾΥƥѤʸפΥơ֥ǤΣĤΥơ
    ֥뤬ꡢ줾첼 encoding ʸפƤޤ
    ʸåȤ ASCII Ǥ뤳ȤȤƤޤ
        type_euc[]  :   EUC_JP, GB2312, KSC5601
        type_bsl[]  :   SJIS, BIGFIVE
        type_iso2022_jp[]   :   ISO2022_JP
        type_utf8[] :   UTF8
char * encoding_name[][]
    Multi-byte character encoding ̾Υơ֥Ǥ

set_encoding()
    #pragma MCPP setlocale-m ץ󡢤ӴĶѿ LC_ALL,
    LC_CTYPE, LANG ν򤹤롼Ǥ
mb_init()
    Multi-byte character encoding ˱򤹤롼Ǥ
mb_read_*()
    Multi-byte character ɤ롼ǤΣĤޤ
    δؿϤ줾첼 encoding  multi-byte character ѤΤΤǤ
        mb_read_2byte() :   EUC_JP, GB2312, KSC5601, SJIS, BIGFIVE
        mb_read_iso2022_jp()    :   ISO2022_JP
        mb_read_utf8()  :   UTF8
mb_eval()
    Multi-byte character, wide character ʸͤɾ롼
    Ǥ#if ɾǻȤޤ

  Multi-byte character  encoding ˤĤƤϼʸȤơ
Ĥλ򻲾Ȥޤ

    Ken Lunde "Understanding Japanese Information Processing"
            , 1993/09, first edition, O'Reilly & Associates, Inc.
    ²졦²ǻҡʸɤ
            , 1999/09, ŵؽǶ

    [4.4]       lib.c

  ϤˤäƤϻäƤʤ⤷ʤ뤤ϤäƤͤ
饤֥ؿΥ˽񤤤Ƥޤ줾졢#if !
HOST_HAVE_XYZ  #endif ǰϤǤΤǡHOST_HAVE_XYZ == FALSE λ
 XYZ ؿȤޤ

    [4.extra]   malloc()

  kmmalloc -- ǥХåǽ malloc()פȤΤϡ䤬äǽ񤤤
malloc(), free(), realloc(), calloc()  portable ʥǤϥ
ΨȤȤˡǥХåΤĤͤƽ񤤤Ƥޤǥ
åѤΥ롼źդƤޤ󥯤Ƥȡפ̥Х
ҤääƤ뤳Ȥޤ*1, *2
  noconfig/*.mak  -DKMMALLOC -D_MEM_DEBUG -DXMALLOC Ȥץ
ͿƤΤϡλ malloc() ȥǥХå롼󥯤뤿
ΤǤ󥯤 MCPP EFREEP, EFREEBLK, EALLOCBLK, EFREEWRT,
ETRAILWRT Ȥ顼ֹ exit 뤳ȤС MCPP 
Х̣ޤ
  ȤˡMS-DOS / Borland C  large data memory model ǥѥ뤹
ϡ° malloc()ʤȤ free()ˤϰ۾®٤٤Τǡ
δؿȤƤ MCPP ǤϤʤ٤򤱤ƤWIN32 /
Visual C++  malloc() ⤫ʤ٤Τǡ򤱤ȤǤ
  BSD_MALLOC, DB_MALLOC, MALLOC_DBG ȤޥΤɤ줫 1 
MCPP 򥳥ѥ뤹ȡ malloc() Ȥ̤Τ줾ǥХåǽ
ä malloc() ȤޤˤƤ⡢°ΤΤǤϤʤ
malloc() Ȥˤϡѥ뤹˥饤֥äƤʤФ
ޤ󡣤ˤĤƤ kmmalloc ΥɥȤ򸫤Ƥ

  *1 kmmalloc ϼΤȤˤ롣
        http://download.vector.co.jp/pack/dos/prog/c/kmmalloc-2.5.lzh
  *2 CygWIN Ǥϥ饤֥ȤΩƤ¾ malloc() Ȥʤ褦ˤʤ
    ƤΤǡ malloc() ϻȤäƤʤ


ХȰܿ𡡡

    [5.1]       Хɤ

  ץץ Standard C Ŭ򸡾ڤ뤿 Validation Suite 
MCPP Ȥä˸ƤޤStandard C ΥץץΤ٤Ƥε
򸡾ڤǤΤˤĤǤMCPP ϤȤäƥå
Ƥޤ⡢嵭Τ٤ƤνϤǥѥ뤷ƥåƤ
ޤäơХͤϤۤȤɤʤȻפޤޤ
ĤĤäƤ붲⤢ޤȤˤޤܿƤʤϤ˿
ܿϡϤΥХˤҤäǽޤ
  ⤷ԲĲưȯ줿顢Ҥ𤯤κݤˤϡ
Υå򤪴ꤤޤ

  Standard C ⡼ɤξ硢ʬ Standard C ˴ְ㤤Ϥʤ
Τ뤿ᡢޤ Validation Suite ȤäƤߤ롣GNU C /
testsuite λȤ륷ƥǤϡconfigure  make check ǼưƥȤ
Ǥ롣
  ʬ MCPP ΰܿ˴ְ㤤ϤʤɤɥȤΤ롣
  ХƸ륵ץ륽Ф롣
  ХФʬ #pragma MCPP debug <args>  #pragma MCPP
end_debug ǤϤ MCPP ưȥ졼Ƥߤ롣 <args> 򤵤
䤷Ƥܺ٤˥ȥ졼Ƥߤ롣

  ⤷"Bug: ..." ȤǥåФ顢ϴְ㤤ʤ MCPP
ޤϽϤΡʤ֤ MCPP Ρ˥ХǤޤȤ㤯ʡ֥
פǤ⡢򿩤碌뤳Ȥ MCPP ˽ʤ顢ХǤ
  Standard C ⡼ɰʳΥ⡼ɤ MCPP  Validation Suite 
ϡְִ㤤פ餱ư򤷤ޤϻͤǤʤǤ˽Ϥʤ
Ϥˡɤͤ [4.1.3] 򸫤Ƥ

    [5.2]       malloc() ϢΥХå

  䤬񤤤 kmmalloc Ȥ malloc() Υ饤֥꤬ޤ[4.extra]
ȡˡ
  ⤷Τ malloc() 󥯤 MCPP  120  124ʽϤ
äƤ 2120  2124ˤΥ顼ֹ exit 뤳ȤС
ϴְ㤤ʤ MCPP ޤϽϤΡʤ֤饤֥ؿΡ˥ХǤ
  ޤƥȤ˻Ȥץ륽Τɤ

    #pragma MCPP debug memory

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

    [5.3]       Х

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

  MCPP ܿϡ
  ܿˡsystem.H ˡ
  ХȻפΤƸǤ륵ץ륽
  ν̡

    [5.4]       ܿ

  MCPP ϤۤȤɤνϤŪñ˰ܿǤ褦˽񤤤ƤĤ
Ǥ䤬äƤϤϾǤ䤬äƤʤϤؤ
ܿޤΤɤ԰¤⤢ޤνϤؤΰܿ
ԤƤޤ򥽡˥եɥХåơʤΤˤ
Ȼפޤ
  ܿϼΤ褦ʷǤꤤޤ

  ϡ
  noconfig.H (configed.H), system.H, system.c ꡣʤ٤ꥸ
ʥȤκʬե뤬ɤñʤΤʤʸϡʥˤǤ⡢̤¿
ФΥեݤȤǤġ

  ܿǤɤΤˤϡޤץץåؤơ
إåե "pre-preprocess" εǽȤäƼʬȤꥳѥ뤷
ƤߤΤüᤤǤ礦
   Standard C ⡼ɤǤ Validation Suite Ȥޤ
ϥեο¿ΤǡǥХå򷫤֤ˤϼ֤ꤹޤ
ǥХåϤޤn_std.c 򥳥ѥ뤷ơ˥ѥ롦¹Ԥ
ɤ򸫤ޤ°Υѥɥ饤ФǤ MCPP ϤˡΤ
ץ⤢ޤˤĤƤ mcpp-manual.txt  [2.1] 򸫤
 MCPP ̤Ƥ饳ѥ뤹⤢ޤΣĤΥ
˽ǤСܿƤޤ
  ⤷줬ޤʤϡ n_std.t ȤץȤäơɤ
Τܤǥåޤ줬ޤä顢e_std.t, m_*.t,
unspcs.t, warns.t, misc.t åޤ"post-Standard" ⡼ɤǤ
n_post.t, e_post.t Ȥޤ
   cpp -QCz23 Ȥץդƽޤpost-Standard
⡼ɤǤ -3 ԲġˡSTDC == 0 ǥѥ뤷Ƥ -S1 -V199409L
ץդޤ-C ץǥȤϤΤǡ
̤꤫ɤ狼ޤ
  -Q ץǿǥå mcpp.err Ȥե˽Ϥ
ǡڡ㡼ɤߤޤ
  -z ץǡإåեνϤϾάޤ
  -2 -3  digraph  trigraph ͭˤʤޤ-S1 -V199409L 
__STDC__  1  __STDC_VERSION__  199409L ˤʤޤ
  C99 бΥƥȤ򤹤뤿ˤϡ-V199901L ץդ n_std99.t,
e_std99.t Υå򤷤ޤ
  Validation Suite  cpp_test.c ȤץȤȡn_*.c, i_*.c
ΥץΥƥȤưŪ˹ԤȤǤޤʤϡߤĤ
ǡܺ٤Ϥ狼ʤޤe_*.?, u_*.?, unspcs.?, warns.? Υ
ȤϴޤޤʤMCPP ȤΥƥȤ򤹤뤿ˤϡn_std.c 򥳥ѥ
ۤᤤˡ

  ʤValidation Suite  V.1.3  GNU C  testsuite бޤ
äơMCPP  GNU C Τɤ줫ΥС˰ܿϡGNU C /
testsuite 󥹥ȡ뤵ƤСGNU C Υץץå MCPP 
ȡMCPP μưƥȤǤޤˤĤƤ cpp-test.txt [2.
2.3], mcpp-manual.txt [3.9.5]-[3.9.7] 򸫤Ƥ

    [5.5]       GNU C ʳνϤǤ configure ξ

  MCPP V.2.4 ʹߤ UNIX ϥƥǤ configure Ǥ褦ˤʤޤ
UNIX ϥƥǤ GNU C ʳνϤˤĤƤϻϤޤä
ΤʤΤǡconfigure ǤϤĤΥץꤷƤʤ
ʤޤ
  ΥץǻꤹƤˤĤƤϡνϤȤäƤͤ
ΤäƤ뤫ޤĴ٤뤳ȤǤϤǤ狼ϤҶ
Configure ˼Ǥ椭Ȼפޤ
  Configure ˤĤƤ INSTALL 

    [5.6]       ǡäƤаܿƤߤޤ

  ܿޤʤϡΤ褦Τ餻
  ΥǡդƤС֤ܿǤ뤫⤷ޤ
Configure λȤĶǤϡΥǡΤΤʤʬ
configure ˤäΤ뤳ȤǤޤ

  1.  ϣӤȤΥѥꥹȤηʻ UNIX , DOS/Windows , OS-9 
Τʤˡ
  2.  Ϥ̾ȥС
  3.  ʸåȤ ASCII ǤʤФɤʸåȤ
Multi-byte characterʴˤ encoding ϥե JIS  EUC-JP 
ȤⲿShift-JIS Τ褦 <backslash> Ʊɤ multi-byte
character ˴ޤޤ encoding ξ硢ѥΤϤǧ뤫
  4.  ShellʥޥɥץåˤʸȾʸ̤뤫
  5.  ե̾ʸȾʸ϶̤뤫
  6.  ¹Իץ󡣥ѥɥ饤ФϤ륪ץ
󡣥ץץåñΤưΥץgetopt() ǼǤʤ
ΤԲġˡ
  7.  ץץåʬΥƤϤȤ⤤ѥ
ѥ餫
  8.  νϤλޥȤ͡C++ λϤɤʤ뤫ʥѥ
ɥ饤Ф -D ץǥץץåϤޥȡץ
åȤޥȤ̤뤳ȡˡ
  9.  ؿΥץȥǤ뤫
  10.  unsigned long 뤫
  11.  long long, long double Ϥɤlong long 硢printf()
Ǥ long long  length modifier ϲlong long ʤƤƱ
η뤫
  12.  <limits.h> ʤ顢CHAR_BIT, UCHAR_MAX, LONG_MAX, ULONG_MAX
͡<limits.h> ʤФΣĤ͡ʣХȤӥåȤʤ
system.H ΥǥեͤƱϤˡ
  13.  <stdio.h>  FILENAME_MAX Ф͡
  14.  #pragma ̤Ϥɤ#pragma ԤΰϥޥŸо
Ȥʤ뤫
  15.  getenv() ؿ뤫Include directory ꤹĶѿˤϤ
̾ȤĶѿʣΥѥ򵭽Ҥ separator ˤϲ
Ȥ
  16.  ̾Ȥ include directory#include ǥإåե򥵡
ε§
  17.  \a, \v ϻȤ뤫
  18.  const ҤϻȤ뤫
  19.  إåե <string.h>, <stdlib.h>, <stddef.h>, <time.h> Ϥ
뤫size_t, time_t Ϥɤ
  20.  ɬפʴؿǡ饤̵֥Τ뤫
  21.  ѥΤʸƥϢ뤬Ǥ뤫
  22.  ѥΤ digraph ǧ뤫
  23.  ̻Ҥ $ Ȥ
  24.  #asm, #endasm Ϥ뤫ǤϤޤ줿֥åΥѥ
ؤμϤϤɤ¾εʳ directive ˤϤɤʤΤ

  25.  ץץåǽ٤ #pragma sub-directive ˤϲ뤫
  26.  ѥΤĹϤɤΤ餤ޤǤValidation
Suite ˤ test-l/l_37_8.c 򥳥ѥ뤹Ȥ狼ˡ
  27.  ѥΤǤϡ̻ҤϲХȤޤǼ̤뤫
  28.  ֤ϤɤΤ餤
  29.  ѥ塢Ρ֥֥ȥեפҤϲ
UNIX νϤ .o  MS-DOS νϤ .obj Ρˡ
  30.   t_line.c Ȥץץץå̡̤ñ
ΥץץåȤޤϥץǥץץνϤꤹ
ˡϹֹȥե̾ξ򥳥ѥΤϤˡ򸫤뤿
ΤΤǤ롣<stdio.h> ƤĹΤǡ򥫥åȤƺǽΣ
ԤȺǸΣԤнʬǤ롣
  ˡ#line 1000 줿̤ #line 1000 "t_line.c" Ȥʤ餺 #
1000 "t_line.c" Ȥ¾ηˤʤϤǤϡʬ #line 1000
"t_line.c" ȽؤƥѥΤϤơǧǤ뤫ɤ
򸫤#line 1000 "t_line.c" ǥ顼ˤʤʤ error line; ιԤ
顼åФϤǤ뤬λ˹ֹ椬ɤФ뤫ˡ

/* t_line.c */
#include    <stdio.h>

#line 1000

    error line;

main( void)
{
    return  0;
}

  ۥȽϤȥåȽϤ㤦ϤˤĤƾ嵭Υǡ
СȤʤǤ礦
  ¤٤Ƥߤȡå٤Ȥ֤󤿤󤢤ޤ͡
¿νϤǤϰܿߤνϤȶ̤¿Ǥ礦顢
ưΰܿǤФۤɤμ֤ǤϤʤϤǤŪ֤
Τϼ¹Իץ #pragma˵ʳͤμǤ
ư褦ˤʤäƤ顢ˤäƤ椯ȤǤޤͣݤ
ΤϡϤΥХˤҤääǤ

    [5.7]       ڥåȤˤ¾νϤΥƥ

  䤬äƤϤΥץץåθڥåȤǥƥȤ̤ϡ
cpp-test.txt [5] ˤޤȤƤޤ
  ¾νϤˤĤƥƥȤ̤Τ餻ܤ¿Τ
ʤμ֤Ǥ
  cpp_test.c ˤƥȤǤм֤ϤʤΤǡǤ⤪
ޤGNU C ξϡڥåȤˤ뼫ưƥȤǤޤ

    [5.8]       Τո

  ХΤۤˤ⡢MCPP λȤꡢǥåMCPP Υ
Validation Suite Standard C ᡢɥȤνʤɤˤĤ
Ƥո򤪴󤻤
  ̣ǺäץץåǤV.2.0 ޤǤǤ⣶ǯȾ⤫ƶŤ
˶ŤäϫǤŤĤǤˤǤɤΤˤȻפäƤޤ
åץץåˤĤƤϡλäƤʤϤؤΰܿȥƥȰʳϡ
٤ȡäựΤ뤳ȤϤ٤ƤäĤǤ¿Ȥ
ĤäƤС줿Ȼפޤ
  Martin Minow ΥϤȤƤ⤭줤ʡΤʤ狼䤹Τǡ
ɤǤˤȤäƤϤ֤ٶˤʤޤˤäƥ
»ʤ졢ʤʤäȤˤΤݤ
Ǥ
  Τ˶̣ĿͤϤʤ¤ƤȻפޤ¿Υ
ȤȾԤƤޤ
  ոȾ comp.std.c, fj.comp.lang.c  newsgroupޤϥ᡼
Ǥꤤޤ


MCPP ĹƻΤꡡ

    [6.1]       ۣǯ

  1992/01  DECUS cpp 򤤤ˤϡĹˤʤȤ̴
פޤǤ٤ߤˤ礳äȥС󥢥åפƤߤ褦Ȼפ
äΤǤ
  ϤơɤޤʤȥȤ狼ꡢ餤
ɤߤޤɤߤΤ륽äǤ⤢ޤˤĤ
ͤ C90 б˥С󥢥åפޤޤǤṲ̄

  ǻϼʬ C90 ΥץץͤΤˤΤäƤʤ
Ȥ˵դޤP. J. Plauger & Jim Brodie "Standard C" (1989) 
Ȥfunction-like ޥŸˡϡҤä֤
ΤǤʤˮϤƤˡǵʽäơץ
ץ˴ؤʸϤ򤯤֤ɤߤޤη̡C90 Υץץ
ŪʤΤȤ¿ǰۤʤäƤ뤳Ȥ狼ޤ#, ## 
Ҥɲä줿ȤϡΤۤΰʬˤʤäΤǤ
  Ȥ function-like ޥŸ롼ˤϤʤƬǺޤޤE.
Ream  cpp Υ򻲹ͤˣֹͤơC90 ѥޥŸ롼
񤭤ޤ䤬ץΥ르ꥺǤʤ˰̿ͤ
ϡˤˤʤȤǤ1992/04 ΤȤǤ
  ơƽۤơ٤ cpp ϤޤȻפäΤǤ
Ȥ줫餵ˣǯޤꤿäƤޤޤȤäƤ⡢
֤ˤϤۤƬǺޤϤʤäΤǤˤ⤫餺֤Ϥ
󤫤ޤͤͤ˰Ƥơcpp ˽椷ʤʤ
⤢ޤǤϤޤ󡣤δ֤ˤäΤϼ
褦ʤȤǤ

  ͤ򤵤Τˤ롣Standard ⡼ɤǤϵʤ˴б롣
  Standard C Υ⡼ɤ濴˥ץ๽¤ǡ¤ƹ롣
  Portability 夲뤿ᡢΥѤ롣
  ǥХå򤹤롣ϤΥХн褹롣
  ƥȥץहʤ Validation Suite 롣
  ¾νϤΥƥȤ򤹤롣
  ɥȤ񤯡
  1997/07 ˤϿѥäᡢƻȤ WindowsNT/95, X
Window System ȤΥեȤΥ󥹥ȡȽɤ줿Ƥ뤦
 C99-1997/11 draft ФơؤбɬפȤʤä

  Ǥ֤ΤäΤϥɥȤǤȤ˸ȾΣǯ餤ϥ
򤤤ä֤ϤۤξǡɥȽ񤭤ȤȾƤ
ޤѤʬ̤ˤʤäƤޤޤ֤ä
Τ̤¿ФǤϤޤ󡣥ɥȤ񤤤Ƥȡͤ
ΤʤȤȽФƤΤǤΤӤ˵ʽɤ֤
򾯤Ĥޤ򤤤ä֤ϾʤƤ⡢Ͼʤ
ޤ󡣵ʽץץǤϤʤΤ ANSI C 
Rationale ޤƤ褯ɤǤߤޤϥץץå뤳Ȥ̤
 C90 ٶ򤷤褦ʤΤǤˤϤ̤ơC90 ε
Τİ뤳ȤǤޤ
  ƥȥץϽϴñʥץܤ񤤤ǤȤ
񤤤 cpp ƥȤ뤿Ӥ˰ճʥХĤΤǤǡC90
ץץƥȤ Validation Suite 񤯤Ȥˤޤ
ơValadation Suite 񤯤Ȥ̤ơC90 餫
ˤʤäƤޤC90 Ե§ʬбΤϡʬˤȤäƤϤ鷺
路ФǤޤ̣ΤʤȤǤ̣ΤʬΤ
Ϥ뤫¿äȤϳΤǤ
  κȤ̤ƻ䤬ؤΤϡΤ褦ʤȤǤ

  ץλͤϡܺ٤ʥɥȤ񤭽ޤǳꤷʤ
  ץΥǥХåϡͤƥȤ륵ץ뤬ޤǽ
ʤ

  ιͤϴŪʤΤǤΤȤϴǤϤޤ椫
ʤΤ¿ץ㳰ǤϤޤ󤬡ˤϴפ
̣ʬ⤢ޤϤϤΰĤǤ礦
  ̣鲿ǯ⤫ŰŪˤ뤳ȤǤȤޤˤ
⣶ǯȾĹޤʤ˻֤򤫤ƴʥץäơ
ä줬ȤΤȤ䤬ä³Ƥޤ̣Ǻץ
ȤƤϡΤ餤Ϥθ٤ʤΤǤ礦ϡ̣ݤ
ʤȤϤʤ褦ˤ褦ȻפäƤޤ
  MCPP Ϥ⤦äƤޤäΤǡƥʥ󥹤򤷤Ƥ
ǤäǤ鳧󡢥ȡ𡢰ܿ򤪴ꤤޤ

    [6.2]       V.2.3 

  V.2.0 塢 V.2.1, V.2.2, V.2.3  update 򷫤֤
ƤޤC99 ˾ǧ줿 ISO / C++ бꡢб
䤷ꡢХȤäȤΤƤǤ
  V.2.2 ޤǤϴñ update ǤƤޤV.2.2  V.2.0 飳
äƤޤ󡣤ȤV.2.3  V.2.2 飴ǯޤ⤿äƤޤ
ޤοդ¿˻ˤʤꡢ֤ȤʤʤäΤʸǤ2000
/07  60 ФˤʤäơŻ򽵣˸餷Ƥ顢餫֤Ȥ
ˤʤꡢcpp ޤ
  V.2.3 ϻ֤Ǥʤ֤ŪäƤޤGNU C V.2.9x ˼
ƤߤȤGNU C / cpp ȤθߴݤΤˤʤäʤ
ФʤʤȤ狼äǤץ򤤤Ĥɲäĥͤ
ޤޤΥ顼򥦥˥󥰤˳ʲꡢȯ륦
˥󥰤ǥեȤΥ˥󥰥饹Ϥꤷơʤˤ
¤¤Ƥޤ
  ѹ¿ϸΤΤǤꡢڤΤǤϤޤǤ
Ȥ C90  "traditional" ʻͤΰ C99 λͤξΩʤ
ФʤʤȤΤϡϤʤϤܰդʤȤǤ줬ߤ
ץ󥽡μ¾ǤСˤٹ碌ΤϤ򤨤ޤ
  ʤˤ¤Ȥǡ¾νѤǤ⡢°Υץ
å֤ƻȤˤϻȤ䤹ʤäȻפޤ

    [6.3]       ̤Ƨեȥ¤ȡפ˺

  V.2.3 ؤ update ǡMCPP  Validation Suite Ͼ
ȶ (IPA) ʿǯ١̤Ƨեȥ¤ȡפȤΤ
򤵤ޤޤޤλȤΤȤΤäΤǱ礷ƤߤȤ
 ͵ץȥޥ͡㤬򤷤Ƥ줿ΤǤ 2002/07 
 2003/02 ޤǤ IPA λȿУͤνΤȤˡȯʤ
뤳ȤˤʤޤɥȤα⡢ϥ뤬Ƥ뤳
Ȥˤʤޤ
  Ūեȥʤ⡢֤򤫤Υ饤ե
Τ褦ˤʤäƤޤäΤǤδ٤ˤϼޤ˽
뵡񤬤ʤǰʻפ򤷤Ƥޤε񤬤ĤͿ줿ΤǤ
ϤΥץȤԤ뤿ᡢŻ򽵣˸餷ޤ
  䤬ΥץȤǤ뤳ȤȤͤƤΤϡΤ褦ʤ
Ǥ

  ѸǤΥɥȤ롣ȤäơMCPP ȸڥåȤ
Ūɾξ˽ФƤ椯ýϤȾꥫȤʤäƤ븽
ǤϡѸǥɥȤ¸ߤɾڤΤɬܤǤ롣
  ޤǤϥե꡼νϤɾȰܿμоݤȤƤ
ΤμפʽϤθڥåȤˤɾȡMCPP Τؤΰܿʤ
롣
  ޤбƤϤˤĤƤ⡢꿷Сб
롣

  MCPP ñʤåץץåǤýϤΰˤ
̤ƧեȥפȤƤ̤ܶ˷礱뤭餤뤿ᡢ PM 鼡
Τ褦ʽޤ

  GNU C 3.x б롣
  GNU C 3.x  testsuite ǻθڥåȤѤǤ褦ˤ롣
  ȯ򥪡ץʷǿʤƤ椯

  伫Ȥ⤳ϤҤꤿȤǤΤǡǷײɲäޤ
  ȤηײٱٱŤͤޤޤǥå
ޤޤȤ򤹤뤿Ӥ˻ȤäȤΤʤեȥ
ȤäơΤӤ˻֤ޤGNU C 򥽡饳ѥ
ΤƤǤϤĤΥȥ֥˸ޤ̤Υ
Ȥι̤αΥåȽˤ⡢ʤλ֤
ξ塢Ȥ֤ޤȯޤץȤϻΤν
Ϥؤбײΰǰ̤Ȥʤޤ
  ϤޤǰĤη򿼤äƤ椯褦ʤȤƤʤäΤǡ
򾯤褦ȤȤҤɤ֤äƤޤΤǤޥ奢ץ
ޤ򷡤겼ˤϡ򤷤ʤФǤ뤳ȤǤϤ
ޤ󡣤̤˽Фˤϡ򤤤餫ʤФ
ʤΤǤ
  򹭤ǡϿ PM νޤơĤ̤и
եȥȯȤΤ˿뤳ȤǤޤʬ
ʸϤʤ줿ʸäƤΤ⡢Ѥ줷ȤǤ
֤ɤΤ϶줷ȤǤƤϤɤ⿷ǳڤȤǤ

  ̤Ƨեȥ¤ȡפϤǤޤǤϤޤǤʿ
ǯ٤ˤ⡢ ץȥޥ͡㤬 MCPP ³ץ
ȤȤƺ򤷤Ƥ줿ΤǤơǯ٤Ѥ߻ĤβȤ
ơˤȤäƤ̤иΰΤĤβ˼ȤळȤȤʤޤ
  ΣǯΥѥ˥ȥ֥뤬ȯϡɥ OS 
upgrade ǤˤĤΥȥ֥˸ޤ̤иΥ
ȥνˤ֤פȯϤϤ٤쵤̣Ǥäౡ
ŪˤʤäƤ֤ץȤͤ˶ŤΤ¹
ưˤưʤäƤȤ⡢ۤμǤ(*)
ϣУͤɸ̵ΤʤȤꤷƤ줿ǡƤˤä
Ȳ˼ȤळȤǤޤ
  Visual C++ ؤΰܿPlan9 ؤΰܿconfigure ץȤκISO-
2022-JP, UTF-8 ޤ¿ͤ multi-byte character encoding ؤб
ã뤳ȤǤޤޤɤȤΩʤ
ʤԤȤƤϤΤˤȤߤޤܸǤȱѸ
ǤΥɥȤιȤ֤ΤȤ⡢ϥζϤã
뤳ȤǤޤ
  ̤ˤäơϰϣУͤ鲿ȡ֥ѡꥨפȤɾ
뤳ȤǤޤμϤˤȤäƤϲʬɾǤĹǯˤ
 MCPP Ѥ߽ŤͤǧƤΤȻפѴǤޤ

  ǯ᤯ˤ錄̤ƧեȥפΥץȤˤäơMCPP 
ʼ C/C++ ץץå˻ž夬äĤǤǯΥޥ
ץޤȤϤʤ褯äȼʬǤǼƤޤ

  ̤ƧեȥΥץȤäƤ⡢MCPP βɺȤ³
ƤޤޤĤβ꤬ĤäƤޤβã
MCPP ڤ뤿ˡ¤˼Ȥߤ³Ƥ椯ĤǤ

  *  2004 ǯ 2 ˻

                                                                   [eof]
