                          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 pre-release 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 pre-release 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


                              ܼ


    [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 __put_defines,
                    #pragma __preprocess, #pragma __preprocessed,
                    #put_defines, #preprocess, #preprocessed
        [3.1.1]     إåե pre-preprocess
    [3.2]       #pragma __once, #pragma once
        [3.2.1]     إåե #pragma __once 񤭹ġ
    [3.3]       #pragma __include_next, #pragma __warning_cpp,
                    #include_next, #warning
    [3.4]       #pragma __push_macro, #pragma __pop_macro,
                    #pragma push_macro, #pragma pop_macro,
                    #pragma __setlocale, #pragma setlocale
    [3.5]       #pragma __debug_cpp, #pragma __end_debug_cpp,
                    #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 __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 __warning_cpp, #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 μ¹ԥץɬפޤ*
  Υޥ˥奢ǤϡǤνϤ˰ܿ줿¹ԥץλ
Ƥޤʰܿˡ˴ؤ뵭ܤ˴ޤǤˡ˾ܺ٤
Τꤿ鲿餫νϤ˰ܿƤߤϡ
porting.txt ȤɥȤ򻲾ȤƤ
  ΥɥȤϤ٤ free software Ȥ󶡤ޤ
  ޥ˥奢Ƥˡޤ MCPP ΥħҲ𤷤Ƥޤ
ʤ [1.1]  [1.2]  porting.txt ȽʣƤˡ

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

    [1.1]       ϣӤϤФʤ portable ʥ

  GNU/Linux, DOS/Windows ¿ΣϣӤ򥵥ݡȤƤporbable ʥץ
ץåǤꡢΥ 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. Υ⡼ɡ
 "Reiser" model cpp Υ⡼Ƽ cpp ֥Ȥ뤳Ȥ
롣ˤϼ post-Standard ⡼ɤޤǤ롣ޤStandard C ⡼
 C++ ΥץץåȤư¹ԻץäƤ롣
  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 __debug_cpp ⤢롣إåե
"pre-preprocess" ƤȤǤ롣
  ʾγƼ֥⡼ɡפϼ¹ԻǤϤʤMCPP Υѥ˻ꤹ
ˤʤäƤ롣 MCPP Υޤ뤿ȡѻʼ¹Իץ
򤱤뤿Ǥ롣
  ĤͭѤʼ¹ԻץƤ롣˥󥰤Υ
٥ꤹ륪ץ䡢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 Ȥʤޤ

  øεʤȤƤϽ 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.2 ޤǤ Psycho ȤƤV.2.3 
    kmatsui ѹ
  *2 ̤Ƨեȥ¤ȡ(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

    Υ֥եΥƥȥեϡ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 ϾʤȤ V.2.6.2 ʹߤǤ -Wp Ȥޥƥץ
ȡɤʥץǤ cpp ϤȤǤޤ㤨С

    cc -Wp,-W31,-Q23

Ȥȡcpp  -W31 -Q23 ȤץϤޤCpp Ϥ
ץ -Wp, ³ , Ƕڤä¤٤ޤ*1, *2
  ¾νϤǤ⡢⤷ѥɥ饤ФΥСμΥ
ƥץɲäۤɤǤ礦㤨С-P<opt> Ȼꤹ
 P Ȥä -<opt>  cpp Ϥ褦ˤƤȡɤʥץ
ǤȤ褦ˤʤΤǤ
  tool/lcc.dif  LSI C-86 V.3.30c / lcc.c 뤿κʬե
Ǥˤϡlcc.c Τǥ쥯ȥ

    patch -c -B_ < lcc.dif

ȤޤPatch  UNIX ɸŪʥޥɤǡDJGPP, DOS/WIN32 ˤ
ܿƤޤMS-DOS 5.0 Ʊ̾ɸॳޥɤȤϤޤäʪǤ
ν򤹤ȡ-P<opts>  P Ȥä -<opts>  cpp Ϥ褦
ʤޤΥץϲǤȤȤǤޤcpp -W 31
ǤϥץʸȰȤδ֤ space 뤳ȤǤޤlcc -
PW31 ȤäץǤϡP μˤ W μˤ space ƤϤ
ޤ

  MCPP ȤˤϡϤΥץץå֤٤Ŭ̾
Ƥޤλˡ°ΥץץåäƤޤȤΤ
褦餫̾Υե˥ԡƤƤ
  ʤFreeBSD 2.* ʹߤǤ 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> ץϤȤθߴΤΤΤ
    ΤǤ
    ʤGNU C V.2.6.0  gcc ˤϤΥץϤʤä
  *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]       ưΥץλˡ

  񼰤ϼηǤcpp Ȥ̾ϽϤ MCPP μˤä
̤̾ˤʤޤ

    cpp [-<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 ϤΤ
Ӥ˻ͤȿžޤ¾ΥץϺǸ˻ꤵ줿ΤͭǤ
  ʸȾʸϸ§Ȥƶ̤ޤޥɥץå (shell) 
ʸȾʸ̤ʤϡMCPP Ǥ̤Ǥޤ *
  륹å饯 DOS/Windows Ǥ - Ǥꡢ/ ǤϤ

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

  * MS-DOS ǤϣϣӤ϶̤ʤ COMMAND.COM ϶̤ΤǡMCPP 
    ̤롣

    [2.3]       ̤Υץ

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

-C
    ΥȤϤ롣 UNIX  lint ǥå
    ɬפʤΤǤ롣lint ϻȤʤƤ⡢ǥХåͭѤʥ
    Ǥ롣ȤϥԤƬ˰ܤƽϤ롣
    ȤνϥޥŸǥ쥯ƥ֤ν˹ԤΤ
    ꡢȤϥޥƤӽФˤ뤫⤷ʤǤ롣
-D <symbol>[=[<value>]]
-D <symbol(a,b)>[=[<value>]]
    ޥ symbol 롣ƤޥǤ __STDC__,
    __STDC_VERSION__, __FILE__, __LINE__, __DATE__, __TIME__,
    __cplusplus ʳǤСΥץѹǤC99 
    __STDC_HOSTED__  GNU C V.3 Τ褦 -D ץ
    ⤢Τǡ㳰Ū˵Ĥˡ=<value> ꤵƤ value 
    άƤ 1 bcc, bcc32 ǤϾάˤϣ
    ΥȡΤǡȤϰ㤦Ȥաˡ= ˤ϶
    ƤϤʤ= θ˶򤬤ФΥޥϣĤΥȡ
    롣
    ΥץǤϡĤޥǤ롣
    ΥץϲǤǤ롣
-E
    顼äƤ⤽줬 fatal ʤΤǤʤϡλˡפ
    status ֤ͤ顼򥦥˥󥰤Ʊ褦˰ѥ
    åޤ³Ƥꤿ˻ȤStandard C ʸˡå򤹤
    ȴˡȤƻȤ⤢ʿǥåˤϱƶʤ
    פȡּԡפ status ͤˤĤƤ [4.1] fatal error Ǥ
    ˤĤƤ [5.3] 򻲾ȡˡ
-I <directory>
    Include directory Υѥ̤ directory ꤹʥ
    ѥˤĤƤ [4.2] 򻲾ȡˡdirectory ̾ space ޤޤ
    ϡdirectory ̾Τ "  " ǰϤळȡ
-I 1, -I 2, -I 3
    #include "header" ηΥǥ쥯ƥ֤Ǻǽ˥ǥ쥯
    ȥδꤹ롣-I1 Ǥϥȥǥ쥯ȥꡢ-I2 Ǥϥ
    ʥ󥯥롼ɸˤΤǥ쥯ȥꡢ-I3 ǤϤ򥵡
    ʾܺ٤ [4.2] 򻲾ȡˡ
-j
    ǥåνϤǤϥղþϽϤԤοǥ
    åϤʥǥեȤǤϣԤοǥå³ơ
    ΥԤɽ롣ե뤬 include 줿ΤǤ
    ϡinclude ιԤ缡ɽˡޥ˴ؤǥå
    ǤϡŸΥޥ缡ɽ롣
    GNU C  testsuite ǻθڥåȤȤϡΥץ
    ơGNU C / cpp Ʊǥåˤɬפ롣
-o <file>
    ץץΥ file ˽Ϥ롣άϥѥ
    ȤʤΤǡ̵Ƥ褤ץǤ뤬ѥɥ饤Фˤ
    ƤϤΥץȤΤ롣ְäƥ磻ɥɤŸ
    δɤǤ
    ʸȾʸ̤ʤƥǤ -O <file> Ǥɤ
-P
    ѥΤ˹ֹϤά롣äΥץץå
    ʳӤήѤ˻ȤץǤ롣
-Q
    ǥåʥȥǥ쥯ȥΡcpp.err Ȥ̾Υե
    ˽Ϥcpp.err ϸ˥ڥɤƤ椯Τǡ뤳
    ȡˡ
-U <symbol>
    Ƥޥ symbol ä__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 ǳƼΥޥꤹ뤳Ȥǡ
ΰۤʤưͤΥץץåǤޤλͤ򤳤Ǥϡ֥
ɡפȸƤ֤ȤˤޤʤƤ porting.txt  [4.1.3] 򻲾ȡֻ
͡פ֥⡼ɡפȤϤˤ̯ѸǤ뤬ñˡֻ͡פǤϣĤλ
ʤ褦ʹ뤷¾Ŭʸդפ⤫ФʤΤǡ֥⡼ɡפ
ƤˡʲǽФƤ MODE, STDC, TFLAG_INIT, etc. ʸ̾
__ ǻϤޤʤΡˤϤ٤ system.H ޥǤ[3], [4],
[5] ǤƱͤǤΥޥϤޤǤ MCPP Ȥ򥳥ѥ뤹
˻ȤǡǤä MCPP ¹ԥץˤϤΥޥϻ
äƤϤޤ󡣴㤤ʤ褦ˤƤΥޥ˥奢ǤϳƼ
⡼ɤǰۤʤư¤٤ƵܤƤΤǡˤʤäƤޤ
ޤ󤷤Ƥ
  ʤޥ PRE_STANDARD, STANDARD, POST_STANDARD ͤϤ줾 0, 3,
9 Ƥޤ

  MODE == STANDARD λϼΥץ󤬻Ȥޤ

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

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

  MODE >= STANDARD λˤϼΥץ󤬻Ȥޤ

-2
    Digraphs νȿž롣DIGRAPHS_INIT == FALSE ξϤ
     digraph ǧ褦ˤʤꡢդξǧʤʤ롣
-+
    C++ ΥץץåȤư롣ޥ __cplusplus 
    ʤͤ system.H Ƥ롣ǥեȤ 1ˡ// 
    ԤιޤǤ򥳥ȤȲᤷ::, .*, ->* 򤽤줾ñΥȡ
    Ȥǧ롣#if Ǥ true, false ȤȡϤ줾 1,
    0 ɾ롣__STDC__, __STDC_VERSION__ ƤС
    ʤGNU C ѤǤ GNU C / cpp ȤθߴΤ
    __STDC__ Ϻʤˡ_ ǻϤޤʤޥ롣
    extended characters  UCN ؤѴϤʤ*2, *3, *4
-S <n>
    C Ǥ __STDC__ ͤ <n> ѹ롣C++ Ǥ̵뤵롣<n>  [0,
    9] ϰϤοͤǤʤФʤʤ<n>  1 ʾǤС_ ǻϤޤ
    ʤޥunix, MSDOS ˤ̵ˤ롣
    S  __STDC__ ΰ̣Ǥ롣Υץꤷʤȡ__STDC__
    ϥǥեȤͤȤʤLSIC Ǥ 0¾Ǥ 1ˡ
    GNU C ǤǤ -pedantic, -pedantic-errors, -lang-c89 Ǥ -S1 
    ƱȤˤʤΤǡμ -S ̵뤵롣
-h <n>
    ޥ __STDC_HOSTED__ ͤ <n> 롣

  MODE != POST_STANDARD  TOP_SPACE == TRUE ξϼΥץ󤬻
ޤ

-a
    Υ֥饽˸뼡Τ褦ʵˡ򥨥顼ˤ̤
    1.
        #APP
    Ȥä # ǻϤޤԤäΥǥ쥯ƥ֤˹פʤ硢ιԤ
    Τޤ޽Ϥ롣
    2.
        "Jugemjugem
        gokouno
        surikire"
    ȤäΤήιԤޤʸƥ
        "Jugemjugem\ngokouno\nsurikire"
    ȤԤϢ뤹롣
    3.  ## 黻Ҥˤ token Ϣǣä pp-token ȤƤ̵ token
    Ƥ⡢顼ˤʤ
     GNU Υʤɤ˻ΤǤ*5

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

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

-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 Ǥ롣

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

  MODE >= STANDARD Ǥ -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ˡ
    -S1 -V199901L Ȥ __STDC_VERSION__ >= 199901L ˤʤäϼ
    褦 C99 λͤȤʤ[3.7] ȡˡ
    1.  // ޤǤ򥳥ȤȤư*3
    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 ǻϤޤΤǤʤ¤ޥŸ
    оݤȤʤʥǥեȤǤ 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++ ǤȤ
    褦ˤƤ롣*4
    C++ Ǥ -V199901L Ȥ __cplusplus >= 199901L ˤȡC99 ߴ
    ⡼ɤȤʤꡢ嵭 2  5 εǽĥԤ1 ̵ͭ6 Ϥ
    Ʊ͡ˡ MCPP ȼγĥǤꡢC++ Standard ˤϰȿ롣
    ʸʸζ̤򤷤ʤƥǤϡΥץ -T Ǥ롣
    Plan 9 / pcc ǤϤΥץ -s Ǥ롣
    ʤΥޥ __STDC__, __STDC_VERSION__, __cplusplus λ
     -D ץϻȤʤ̤Υ桼ޥȶ̤뤿Ǥ
    롣

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

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

  OK_MAKE == TRUE ǥѥ뤵줿 MCPP ǤϼΥץ󤬻Ȥޤ
  ʣΥե뤬硢٤ƤΥˤĤƤ -M* 
ץդƼ¹ԤơνϤޡȡmakefile ɬפʰ¸
طҹԤޤΥץ GNU C / cpp ΤΤ˹碌
Ƥޤ㤤ޤ*

-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

  * 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, LSI C-86 ǤϼΥץ󤬻Ȥޤ

-b
    ֹäΥΥǽϤ롣
    ޤLSI C Ǥ #pragma ǥ쥯ƥ֤̾ cpp  #p ȥڥ
    ̤ compiler-proper ϤΥץդȤ #
    pragma Τޤ޽ϤMCPP Ȥʤ pragma ξˡ
    ʸȾʸ̤ʤƥǤϡΥץ -B Ǥ롣
    ץץå饳ѥΤؤιֹμϤ

    #line 123 "filename"

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

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

-m <x>
    ǥ x ˻ꤹ롣x  LSI C, Lattice C Ǥ t, s, d, p,
    l, h Τɤ줫ǡ¾νϤǤ 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 ˤʤ롣

  Visual C, LSI C-86 ǤϼΥץ󤬻Ȥޤ

-w
    -W0 ץƱ

  LCC-Win32 ǤϼΥץ󤬻Ȥޤ

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

  Visual C ǤϼΥץ󤬻Ȥޤ

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

  Plan 9 / pcc ǤϼΥץ󤬻Ȥޤ

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

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

-trigraphs
    Trigraph ǧ-3 ǤȿžͭˡMODE == STANDARD ξ
    
-digraphs
    Digraph ǧ-2 Ǥȿžͭˡ

-nostdinc
    ¾νϤǤ -I- ץƱ
-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 θˡ˲ä롣

-pedantic, -pedantic-errors
    -W7 (-W1 -W2 -W4) ץƱ
-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 ץƱ

-lang-c, -x c
    C ΥץץԤꤷʤƤƱ
-lang-c89, -std=c89, -std=gnu89, -std=c90
    -S1 ץƱꤷʤƤƱC90 Ǥʤ C95 λ
    ޤޤ롣
-lang-c99, -lang-c9x, -std=c99, -std=c9x, -std=gnu99, -std=gnu9x
    -S1 -V199901L ץƱ
-lang-c++, -x c++, -std=c++98
    C++ ΥץץԤ-+ Ʊ
-lang-asm, -x assembler-with-cpp
    -a ƱMODE == POST_STANDARD ǤϤΥץϻȤʤ
-std=iso<n>:<ym>
    ʤΥСꤹ롣<n>  C Ǥ 9899 ǤꡢC++ Ǥ
    14882 Ǥ롣<n>  9899 ξϡ<ym>  1990, 199409, 1999,
    199901 Ǥ롣<n>  14882 ξϡ<ym>  199711 Ǥ롣<ym>
    ˤ¾ͤꤵ줿ϡ__STDC_VERSION__ ޤ __cplusplus
    ͤ199901 Ȥ褦ˣǻꤹ뤳ȡˡ

-undef
    -N ץƱ
-dD, -dM
    ץץκǸˤλͭʥޥ #define Ԥηǽ
    Ϥ롣
    -dD ץǤϥץץ̤Ϥ롣ޤ줿
    ϥȤȤƽϤ롣-dM ץǤϥץץ̤Ͻ
    ϤʤޤʤǵꤵƤɸޥϥ
    ȤƽϤ롣

-A <predicate(answer)>
    Υץϥ顼ˤϤʤ MCPP ǤϲбʤGNU C 
    ϤΥץϥ #assert <predicate(answer)> Ƚ񤤤Τ
    Ʊ̤ˤʤ뤬#pragma Ǥʤĥǥ쥯ƥ֤ Standard C Ǥ
    ǧʤΤǤ롣ޤޤǤΤȤ gcc ϥǥեȤǤ -D
    ץƱΥޥ cpp ϤƤΤǡºݤˤϤۤȤ
    ξ硢پϤʤ#assert ȤäƤ뵩ʥǤʤ¤ˡ
-traditional
    COMMENT_INVISIBLE, STRING_FORMAL Ȥ TRUE ǥѥ뤵줿
    MCPP ǤͭʻꤷʤƤƱˡ¾Υ⡼ɤǤϥ顼ˤʤ롣

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

-$
-g <n>
-iprefix <dir>, -iwithprefix <dir>, -iwithprefixbefore <dir>
-idirafter <dir>
-remap
-noprecomp

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

    [2.7]       Ķѿ

  MCPP ǥǥեȤꤵƤʤ system include ǥ쥯ȥϡ
ѿǻꤷƤɬפޤǥեȤꤵƤ system
include ǥ쥯ȥˤĤƤϡ[4.8] 򸫤Ƥޤinclude ǥ
쥯ȥΥȴĶѿ̾ˤĤƤϡ[4.2] 򸫤Ƥ
  GNU C Ǥ version ˤäưۤʤŪ system include ǥ쥯ȥ
ȤޤΤ noconfig.H ޤ config.h ǻꤵƤʤ
ΤСˤĤƤϴĶѿ꤬ɬפǤ
  ޤglibc 2 Υꥳѥ򤹤ϡGCC_VERSION ȤĶѿ
꤬ɬפǤꤹ٤ͤ gcc -v ޤ cpp -v Ǥ狼ޤ
  㤨СVine Linux 2.5 (i386) / GNU C 2.95.3  bash Ȥϡ
~/.bash_profile ˼Τ褦˽񤤤Ƥޤ

    export GCC_VERSION="\"2.95.3 20010315 (release)\""

  FreeBSD  tcsh Ȥ ~/.login ˤǤ⼡Τ褦˽񤭤ޤ

    setenv GCC_VERSION '"2.95.3 20010315 (release)"'

  FreeBSD Ǥ̾Ȥ system include ǥ쥯ȥ /usr/include,
/usr/local/include ʤΤǡC_INCLUDE_PATH, CPLUS_INCLUDE_PATH 
̾ɬפޤ󡣤ƥɸΥСȤϰ㤦С
 GNU C 򥤥󥹥ȡ뤷ɬפˤʤ뤳Ȥޤ

  Ķѿ 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.  ¹Իץ -m <encoding> ǻꤵ줿 encoding
  3.  Ķѿ LC_ALL, LC_CTYPE, LANG ǻꤵ줿 encoding̤ͥ
    νˡ
  4.  MCPP 򥳥ѥ뤹ꤵ줿ǥեȤ encoding

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

    EUC-JP  :   eucjp, euc, ujis, jajpeucjp
    shift-JIS   :   sjis, shiftjis, mskanji, jajpsjis
    GB-2312 :   gb2312, cngb, euccn, zhcn, zhcneuccn
    BIG-FIVE:   bigfive, big5, cnbig5, euctw, zhtw, zhtweuctw
    KSC-5601:   ksc5601, ksx1001, wansung, euckr, kokr, kokreuckr
    IS0-2022-JP1    :   iso2022jp, iso2022jp1, jis, jajpjis
    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 μ¹ԥץ̾ cpp32_std.exe Ȥˡ
    ֥ӥɥޥɥ饤:   nmake
    ֽϡ                :   cpp32_std.exe
    ־õޥɡ        :   nmake clean
    ֥ӥɥޥɡ    :   nmake CPP=cpp32_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 Ǥ #pragma Ԥϸ
§ȤƤΤޤ޽ϤޤMCPP ȤΤˤĤƤ⡢ƱͤǤ
Ʊ #pragma ѥΤˤȤä̤ΰ̣Ĳǽ뤿Ǥ
#pragma __put_defines, #pragma __preprocess, #pragma
__preprocessed, #pragma __once, #pragma once ϽϤޤ󡣥إå
"pre-preprocess" εǽȤȡMCPP νϤ MCPP ǽ뤳Ȥ
ʤޤλ˽ʣΤ򤱤뤿Ǥpre-preprocess 
ĤƤ [3.1] 򻲾ȡˡ#pragma __push_macro, #pragma __pop_macro, #
pragma push_macro, #pragma pop_macro ⥳ѥΤˤȤäƤ̵Ѥʤ
ǽϤޤGNU C ǤǤϡ#pragma GCC  poison, dependency,
system_header Τɤ줫³ԤϤޤ
  HAVE_PRAGMA == FALSE ǥѥ뤵줿 MCPP Ǥ #pragma ԤϽϤ
MCPP ȤνʤΤˤĤƤϥ˥󥰤Фޤ

    [3.1]       #pragma __put_defines,
                    #pragma __preprocess, #pragma __preprocessed,
                    #put_defines, #preprocess, #preprocessed

  #pragma __put_defines, #pragma __preprocess, #pragma __preprocessed 
MODE >= STANDARD ΤΤǡ#put_defines, #preprocess, #preprocessed 
MODE == PRE_STANDARD ΤΤǤʲǤ #pragma ˤȤäޤ

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

#pragma __put_defines

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

#pragma __put_defines

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

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

    #pragma __preprocessed

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

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

  *1  ºݤνϤ⤦ʣǤ롣#pragma __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    "cpp.H"
#else
#include    "system.H"
#include    "internal.H"
#endif

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

    cpp -S1 > cpp.H

Ȥ MCPP ưޤGNU C, LSI C Ǥϡ-b ץդ롣
-S1 ץϤʤƤ⤫ޤʤΥξդۤ
ʤˡ
  ơܡɤ

#pragma __preprocess
#include "system.H"
#include "internal.H"
#pragma __put_defines

Ǥߡend-of-file Ϥ MCPP λޤ
   cpp.H Ǥޤ system.H, internal.H ץ
Τ #define ԤνդäΤǤ
include Сsystem.H, internal.H  include ΤȤޤäƱ
뤳ȤǤޤơɸإåޤีΥإåե
פοʬΣΥˤʤäƤޤ#if ȥȤäƤ뤫Ǥ
ܤ뤤ϣܤ *.c ե include Τϡsystem.H,
internal.H 򣶲󤢤뤤ϣ include Τ٤ơϤ뤫û֤
ߤޤ#pragma __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 preprocess ȤȤǡ®٤®
롣
  Pre-preprocess εǽȤƤϡMCPP Τְۤ㤤ʤŪǤ

    [3.2]       #pragma __once, #pragma once

  #pragma __once  MODE >= STANDARD Ρʤʤ__STDC__  0 ʾ
ͤ˻Ƥ˻ޤ
  GNU C, Visual C, LCC-Win32 Ǥ #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-ANSI ΥץץåȤꤷơ#if, #else, #
ifdef Ȥ defined 黻ҤȤʤǽ񤤤Ƥޤpre-ANSI Τ
ȤȤޤäʤΤǤСΤ褦ˣԤǤޤȤǤޤ

#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  __nead_NULL, __nead_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 Ͻ񤭹櫓ˤϤޤ*

  * ʤȤ 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 
LSI C-86 ǤɸإåνƱ롼˽äƤΤǡȤ
ȤǤޤGlibc 2 Τ褦ʥƥǤϾ嵭Τ褦㳰¿Τǡ
Ȥʤ̵ۤǤ
  줬Ȥ륷ƥǤ⡢إåեˤ GNU C δ
˽äƤʤΤ⻶ޤʤȤ DJGPP ΥإåˤϤ줬¿
FreeBSD Ǥ PC-98 Ѥ˼äΤʤɤˡ줬ˡ
إåǤ 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, DJGPP 1.12, Borland C 4.0, LSI C-86 3.30c
γƥإåեǤϴ̤ư򤷤ޤüʥإåե뤬
ȸư뤫⤷ޤins_once ɬХååפȤäƤ
¹ԤƤ
  磻ɥɤ shell ŸƤʥХåեСե
ϡ󤫤ʬƼ¹ԤˡLSI C Ǥ start-up-routine Ÿ
ޤʥǥեȤ startup ޤ expand.obj 󥯤ˡ

  ʤOS-9 / Microware C/09 Ѥˤϡ䤬ä #pragma __once 
äɸإååȤ NIFTY-SERVE / FC / LIB 2 / header09.lzh ˥
åפƤޤ

    [3.3]       #pragma __include_next, #pragma __warning_cpp,
                    #include_next, #warning

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

    #pragma __include_next  <header.h>

뤤

    #include_next   <header.h>

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

    #pragma __warning_cpp   any message
    #warning    any message

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

    [3.4]       #pragma __push_macro, #pragma __pop_macro,
                    #pragma push_macro, #pragma pop_macro
                    #pragma __setlocale, #pragma setlocale

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

  #pragma __push_macro( "MACRO"), #pragma __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] 򸫤ƤȤȡ
ΥեǤʣ encoding ȤȤǤޤ #
pragma  32 ӥåȰʾΥƥǤȤޤ
  Visual C++ Ǥ #pragma setlocale Ǥꡢ#pragma __setlocale ϻȤ
Encoding λ MCPP Ǥʤѥˤɬפ
ޤѥ餬ǧǤΤ #pragma setlocale Ǥ

    [3.5]       #pragma __debug_cpp, #pragma __end_debug_cpp,
                    #debug, #end_debug

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

#pragma __debug_cpp __token __expand
/* ǥХåʬ   */
#pragma __end_debug_cpp

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

  <arg> μϼ̤Ǥ#pragma ξϡ̾ˤ٤
__ դޤ

    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 __debug_cpp __path, #debug path

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

        [3.5.2]     #pragma __debug_cpp __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)   opetator or punctuator      (CHR)   character constant
    (SPE)   $, @ ü pp-token    (WCHR)  wide character constant
    (SEP)   token separator (white space)

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

        [3.5.3]     #pragma __debug_cpp __expand, #debug expand

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

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

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

    <n>         n ܤΥѥ᡼
    <TSEP>      pp-token ڤ뤿 MCPP  token separator
    <MAGIC>     Ʊ̾ޥκִػߤ륳
    <RT_END>    ִꥹȤν򼨤

  #pragma __debug_cpp __token ꤷۤ狼䤹Ǥ礦
  #debug expand Ǥ MODE >= STANDARD Ȥ롼˰äƤ
άޤ

        [3.5.4]     #pragma __debug_cpp __if, #debug if

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

        [3.5.5]     #pragma __debug_cpp __expression, #debug expression

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

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

        [3.5.6]     #pragma __debug_cpp __getc, #debug getc

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

        [3.5.7]     #pragma __debug_cpp __memory, #debug memory

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

    [3.6]       #assert, #asm, #endasm

  #assert  MODE == PRE_STANDARD λޤ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 ΣĤΥǥ쥯ƥֹԤǤϤޤ줿֥åϥ֥
ȤưޤMODE == PRE_STANDARD ξޤ
 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() 黻ҡѰޥ

   MODE >= STANDARD ǥѥ뤵줿 MCPP ˤޤ
  -S1 -V199901L ץ __STDC_VERSION__  199901L ʾˤȡ
C99 μεǽͭˤʤޤ
  C++ Ǥ -V199901L ץ __cplusplus  199901L ʾˤ
ƱͤǤ1, 7 ʳλͤ C++ Standard ˤϤޤ󤬡MCPP Ǥ
C99 Ȥθߴ뤿ˡΥץѰդƤޤ
  Ѱޥ MCPP Ǥ 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
Ǥϡ#pragma ԤΰϡSTDC ǻϤޤΤǤʤ¤ޥŸоݤȤ
ʥǥեȤǤ EXPAND_PRAGMA == FALSE ǤꡢޥŸʤˡ*2
  6.  long long ĽϤǤ #if ɾ long long, unsigned long
long ǹԤ
  7.  ̻ҡʸʸƥ롦pp-number ˤ \unnnn, \
Unnnnnnnn η escape sequence ̤ Unicode ʸ̣ͤ
롣#if ǤͤϣɽȤɾ롣ʤMODE ==
POST_STANDARD Ǥ 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 򻲾ȤΤȡˡ*3

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

  *1  GNU C ȤθߴΤǤ롣¾νϤǤ⡢C99 λͤ
    ˼Τ񤷤Τǡ__STDC_VERSION__  199409L Ȥޤ
    λͤƤ椯Ȥͽۤ롣
  *2 MCPP Ȥ߹ߤ #pragma ǥ쥯ƥ֤ __once, __debug_cpp ȡ
    ٤ __ ǻϤޤΤˤƤΤϡ桼ޥȶ礷ʤ
    ˤ뤿Ǥ롣
  *3 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  LSI C ˤ asm( " mov x,4\n") ȤޤäȤʷȤ߹ߴ
ѰդƤޤ

  LSI C  cpp ˤ __eval__() ȤüȤ߹ߥޥޤ
ϣʤ䣸ʤȡΰ򣱣ȡѴ
ΤǤMCPP ˤȤ߹Ǥޤ󡣥ޥȤˤϤޤˤü
ʤΤʤΤǡݡ֥ MCPP Υ˽­Τϵʤޤʤ
С__LINE__ μ򻲹ͤˤдñˤǤޤѴ
 evalnum(), sprintf() Ȥˡ

    [3.9]       GNU C / cpp Ȥθߴ

  GNU C ˰ܿ줿 MODE == STANDARD ΤΤǤϡGNU C / cpp Ȥθߴ
Ѿ夢ޤؤʤ٤˳ݤƤޤߴ̤¿ޤ
  ޤ¹ԻץˤĤƤϡ[2] ˸褦ˤ㤤ޤ
-A ץϼƤޤ󡣤ޤǥ쥯ƥ֤Ǥϵʰȿ #
assert, #ident ϼƤޤ*
  ʤȤˡΤȤǥѥǤʤȤ
Ϥʤ褦Ǥ
  षºݤȤʤΤϡŤץץåüʻͤ򤢤Ƥˤ
Ǥ¿ GNU C  -pedantic ꤹȥ˥󥰤
ФޤMCPP  MODE == STANDARD ΤΤǤϥ顼å򵬳̤˼
ƤΤǡۤ 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 
    դС̤Υ˥󥰤̤ǤϤʤ cpp.err Ȥ
    ˽Ϥ롣-E ץդȡץץ顼
    äƤ cc ߤҤȤȤΥåǤΤǡ
    롣#ident, #assert Ϥǻ¾塢̵뤹뤳ȤǤ롣
    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 ¸ʤФʤޤ󡣹ԤκǽΡ֥ȡפ
֥ΥȤǤ # Ǥ cpp ¦üʽɬפǤ
Ȥ cpp ʤ¤졢Хκˤ;פʿФȤʤФʤ
ʤΤǡ褷ɤȤȤϻפޤ*
  ʣΥޥбΤ˥ץץɬפΤǤС
.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 Ȥϴطޤ󤬡cpp ΥåΰϤϤ
礭ΤǤ

  *  [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 νϷ
ꤷƤơȤԤ⥨顼ˤʤäƤޤȤǤMCPP
Ǥ -dM ץνϤȤˤϡźդ isomac.dif Τ褦ʽ
äɬפޤ
  glibc  make Ǥ rpcgen ȤץबȤ뤳Ȥޤ
ΥץϡץץåιֹνϷȤƤϤ
GNU C / cpp 

#123 "filename"

ȤꤷƤơ

#line 123



#line 123 "filename"

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

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

  glibc 2  make Ǥϡ-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, DJGPP Ǥ
İäƤޤʤʤ㤦ɬפΤ狼ʤˡ
  ȤɤƥɥȤˤʤΤǤ礦
  __VERSION__ ͤ GNU C / cpp ǤϤ켫ȤΥꤵƤ
MCPP Ǥ GCC_VERSION ȤĶѿǻꤹ褦ˤޤ

            [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 ƤǤƱΥեǤ
⽤ƤۤɤǤ礦
  ޤ[3.9.4.8]  stdlib/isomac.c νɬפǤ

  Ķѿ C_INCLUDE_PATH, GCC_VERSION ¾ΥץǤɬפʤΤǡ
bash ʤ ~/.bash_profile ˡtcsh ʤ ~/.login ˤǤ񤤤Ƥ
ޤ
  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
ƤȤޤޤΤ褦Ƥ cpp.sh Ȥ̾Υե
ޤ*1, *2, *3

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

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

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

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

    ln -sf cpp_gnuc cpp

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

#!/bin/sh
for i in $@
do
    case $i in
        # Note "$@" instead of $@, some tools needs this fashion.
        "-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/cpp_std -Q -lang-asm $@

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

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

  ˡ˥󥰤ޤ

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

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

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

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

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

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

    cpp_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 Ǥ tradcpp0 Ȥ traditional ⡼ɤΥץץ
    ΩƤꡢgcc  -traditional ץդȤ줬Ƥ
    Ф롣äơGNU C 3 ǤϤ 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 Ǥ褦䤯 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 ˼Τ褦äƤޤ

    PATH=/usr/local/gcc-3.2/bin:$PATH
    #GCC_VERSION="\"2.95.3 20010315 (release)\""
    GCC_VERSION="\"3.2\""
    CPLUS_INCLUDE_PATH="/usr/local/gcc-3.2/include/c++/3.2/i686-pc-linux-gnu: \\
    /usr/local/gcc-3.2/include/c++/3.2/backward"
    export PATH GCC_VERSION CPLUS_INCLUDE_PATH

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

    [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 ⡼ɤưˤĤƤϡporting.
txt  [4.1.3] 򸫤ƤǤ Standard C ǽȤ
ΤޤơץץμդΤĤλͤҤ٤ޤˤ
ޤʽͤˤĤƤϡ[5] ǥå˽񤤤Ƥޤ

    [4.1]       λ status 

  MCPP λ˿ƥץ֤ͤ internal.H Ȥإå
ޤˤ 0 ֤Իˤ errno != 0 ʤ errno  errno =
= 0 ʤ 1 ֤ޤȤΤϥǥեȤǤϥ顼Τʤä
ǡ-E ץǵưƤ fatal ʥ顼ΤʤäǤ

    [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, LSI 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 Υޥ C_INCLUDE_DIR 줿 implementation-
specific ʥǥ쥯ȥꡣC++ Ǥ CPLUS_INCLUDE_DIR ƤФ
Υǥ쥯ȥ꤬˥롣
  4.5. system.c  set_sys_dirs() ǻꤵ줿 site-specific ʥǥ쥯
ȥꤪ system-specific ʥǥ쥯ȥUNIX ϤǤ /usr/local/
include, /usr/includeˡ

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


  ѥδ򥫥ȥǥ쥯ȥȤΤϡ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 ɾ

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

  ġȡʸޤˤϡͥȡ U
դƤ unsigned long ɾMODE == PRE_STANDARD Ǥ
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 䥭㥹ȤϻȤޤ󡣤ѿư
ȤޤMODE >= STANDARD Ǥ #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 Ǥ⡢줬ƱǤ뤳ȤݾڤƤʤˡ
  MODE == POST_STANDARD ǤϤΤۤȤɰ̣Τʤ #if ʸ
ɾϹԤޤʥ顼Ȥʤˡ
  ʸɾ¾ȡƱͤˡlong, unsigned long 
ϤǾͤɾޤ
  Single character Ǥʤ multi-byte character  wide character ϡ
encoding  UTF-8 ξϣХȡʳǤϤ٤ƣХȤȲꤷ
ޤEUC-JP ΣХ encoding ˤбƤޤʣХʸ
ХȡܣХȤΣʸȤǧ롣Х encoding Ľ
ϤǤ wchar_t ϣХȤǤ顢⤽ wide character constant
ηۤʤäƤޤmulti-byte character ȤƤ wchar_t ˴
ʤХȡܣХȤɾΤǡɾ뤳Ȥˤʤˡ
ΥϥĹΤȤǤǤϣХȤ 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 Ǥ MODE ==
PRE_STANDARD ξ system.H  OK_SIZE  TRUE ȡ#if Ԥ
sizeof (type) Ȥ褦ˤʤäƤޤϥꥸʥǤѾơ
 long long, long double νɲäμäΤǤʤ
˥㥹ȤΤѻʤΤǡäƤʤ뵤ʤˡ
  Ϥ sizeof ɾϼ¹ԻĶˤäưäƤΤǡդ
٤꤬ޤMS-DOS Τ褦˥ǥˤä sizeof (type)
äƤ⤢ޤޤMCPP Ǥ near, far νϰ¸ν
Ҥǧޤ¾ΣϣӤƱͤΥǥΤ褦ʤΤϡ
system.c  mem_model() ȤؿбǤ񤭲äɬפޤ
  evel.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 Υ֤ޤVisual C, Borland C 5.5 Ǥ
__int64  long 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 4.7-R (GNU C V.2.95.4)
    Vine Linux 2.6-ix86 (GNU C V.2.95.3, GNU C V.3.2R)
    CygWIN 1.3.10 (GNU C V.2.95.3)
    DJGPP V.1.12 maint 4 (GNU C V.2.7.1)
    LCC-Win32 V.3.2
    Visual C++ .net 2003
    Borland C++ V.5.5J / WIN32
    Borland C++ V.4.02J / MS-DOS
    LSI C-86 V.3.30c 
    Plan 9 ed.4 / pcc

  ⤽νϼȤǥѥ뤵ޤ
  FreeBSD Ǥ libc.so.4.0  dynamic link ޤ
  Linux Ǥ libc.so.6  dynamic link ޤ
  DJGPP Ǥ V.1.12 maint 3 ʹߤ go32 ɬפǤ
  Borland C ˤϡBCC 5.5 ˤ 32 ӥåǤ BCC 4.0 ˤ 16 ӥå
ǤȤꡢ16 ӥåǤ large ǥǥѥ뤵ޤ
  LSI C-86 Ǥ small ǥǥѥ뤵ޤ

  MCPP V.2  system.H ȤΥޥѹ뤳ȤǳƼ
ưͤ MCPP ¹ԥץबǤ褦ˤʤäƤޤǤ MODE
ȤޥưκΤȤʤäƤޤǤ MODE 
STANDARD ΤΤ POST_STANDARD ΤΤˤĤޤ
  STANDARD ⡼ɤȤΤϡStandard C ư⡼ɤΤΤǤ
  POST_STANDARD ⡼ɤȤΤϡ䤬˺äץץͤǡ
Standard C ΥץץԵ§ʬΤǤܺ٤ʻ
ͤ porting.txt  [4.1.3.1] 򻲾ȤƤҾʥǤС
 Standard C ΥץץåΤĤǻȤäƤĤޤ

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

  νϤΥѥΤϤ #pragma ԤդΤǡ
HAVE_PRAGMA  TRUE ȤƤޤ
  OLD_PREPROCESSOR, COMMENT_INVISIBLE, STRING_FORMAL, OK_IF_JUNK,
OK_SIZE, OK_UNTERM_STRING Ϥ 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 ϻȤޤ
  DEBUG, DEBUG_EVAL  TRUE ȤƤΤǡ#pragma __debug_cpp ǥ쥯
ƥ֤ǳƼΥǥХå󤬽Ϥޤ

  MODE == STANDARD Ǥ OK_TRIGRAPHS == TRUE, TFLAG_INIT == FALSE Ȥ
Τǡtrigraph  -3 (-trigraphs) ץͭȤʤޤ
  OK_UCN  MODE == STANDARD Ǥ TRUE ˤƤΤǡC99, C++  UCN
(universal character name) Ȥޤ
  MODE == POST_STANDARD Ǥ trigraphs  UCN Ȥޤ
  TOP_SPACE  MODE == STANDARD Ǥ TRUE ˤƤΤǡƬ spaces
ϸ§Ȥ a space ˰̤ǻĤޤMODE == POST_STANDARD 
 FALSE ˤƤΤǡ§Ȥƺޤ

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

    STDC    __STDC__ ν͡
        LSI C   :   0
        ¾  :   1
    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
    OK_MAKE makefile Ѥΰ¸طԤϤ륪ץ뤫
        LSI C   :   FALSE
        ¾  :   TRUE
    IDMAX   identifier ͭĹ
        LSI C   :   63
        BC4/16  :   255
        ¾  :   1024
    NMACPARSʥޥΰκ
        LSI C   :   127
        ¾  :   255
    NEXP    #if κͥȥ٥
        LSI C   :   64
        ¾  :   256
    BLK_NEST#if section κͥȥ٥
        LSI C   :   64
        ¾  :   256
    RESCAN_LIMITʥޥκͥȥ٥
        LSI C   :   32
        ¾  :   64
    NINCLUDEinclude directory κ
        LSI C, BC4/16   :   16
        ¾  :   32

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

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

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

  LSI C Ѥ small model ʤΤǡtranslation limits 򤫤ʤޤƤޤ
  GNU C  V.2.6.2 ǤϤޤ __STDC_VERSION__  digraphs Ƥ
ޤǤV.2.7.1 ǤϤ餬졢__STDC_VERSION__ 
199409L ȤʤޤGNU C V.3.x Ǥ __STDC_VERSION__ ϥǥե
ȤǤϻ줺¹Իץ˱褦ˤʤޤ
MCPP  GNU C ѤϤбΤǤ

  STDC  0 ΤΤǤϡ__STDC__ ϥǥեȤǤ 0  pre-define 

  STDC_VERSION  0L ΤΤǤϡ__STDC_VERSION__ ϥǥեȤǤ 0L 
pre-define ޤ
  ɤ⡢-S1 -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 ѴƤ
Ϥޤ

  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 / GNU C 2.95.4  :
                /usr/lib/gcc-lib/i386-unknown-freebsd4.7/2.95.4/include
        Linux / GNU C 2.95.3    :
                /usr/lib/gcc-lib/i386-redhat-linux/2.95.3/include
        Linux / GNU C 3.2   :
          /usr/local/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2/include
        CygWIN / 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
        LSIC    :   /LSIC86/INCLUDE
    CPLUS_INCLUDE_DIR1 Ǥ
        FreeBSD :   /usr/include/g++
        Linux   :   /usr/include/g++-3
        CygWIN  :   /usr/include/g++-3
    CPLUS_INCLUDE_DIR2 Ǥ
        Linux / GNU C 3.2   :   /usr/local/gcc-3.2/include/c++/3.2

    Visual C ǡLCC-Win32 ǡDJGPP ǤǤϤäꤻĶ
        򻲾Ȥ롣Ķѿ Visual C, LCC-Win32 Ǥ INCLUDE,
        CPLUS_INCLUDEDJGPP Ǥ C_INCLUDE_PATH, CPLUS_INCLUDE_PATH 
        

  ǤĤСѤ MCPP ꥳѥ뤹뤫Ķ
ǻꤹ뤫-I ץǻꤹ뤫Ƥ
  LSI C Ǥϡlcc ޥɤ _lcc Ȥե˽񤫤줿Ȥޤ
_lcc ˤ̾ include ǥ쥯ȥ꤬񤫤ƤޤMCPP
꤬ȰפƤСʰפ褦˰ܿƤСˡ_lcc ˤ
ɬפϤޤMS-DOS Ǥϥޥɥ饤Ĺ command.com
¤˰óݤ䤹ΤǡƤΩޤĶѿ
ꤹ뤳Ȥǡ_lcc ʤȤǤޤƱĶѿ
¾νϤǻȤ뤳ȤΤʤ褦դƤ

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

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

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

  ϥեꤻ MCPP ươ#pragma __put_defines Ǥ
ȡȤ߹ߥޥΰɽޤ

    FreeBSD / GNU C 2.95:    __i386__, unix, __unix, __unix__,
                __FreeBSD__ (=4), __GNUC__ (=2), __GNUC_MINOR__ (=95),
                __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)
    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)
    DJGPP V.1.12:   __i386__, __GO32__, __DJGPP__, __GNUC__ (=2),
                __GNUC_MINOR__ (=7), __MCPP (=2),
                __SIZE_TYPE__ (=long unsigned int),
                __PTRDIFF_TYPE__ ( = long int), __WCHAR_TYPE__ ( = 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)
    LSI C-86:   __8086__, MSDOS, __MSDOS__, __SMALL__, __LSIC__, LSI_C,
                __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 ǤϻޥȸäƤ GNU C / cpp ΤϾ
ʤ¿ gcc  cpp  -D ץϤΤʤΤǡȤ
ߴΤˤ MCPP ɬפϤʤΤǤMCPP 
"pre-preprocess" ǡñΤưصΤ MCPP 
ޤʤ -S1 ץ __STRICT_ANSI__ 뤳Ȥޤ
ϤƤʤˡ*1
  LSI C Ǥ LSI_C  -S1 ץ undef ΤǡϤ _lcc 
񤤤ƤۤɤǤ礦

  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, DJGPP,
LCC-Win32 ǤϤ줾 2120, 2121, 2122, 2123, 2124 򡢤ʳǤϤ
 120, 121, 122, 123, 124 ƤƤޤporting.txt [4.extra]
ȡˡ*2

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

  *1 FreeBSD 2.2.7 / GNU C V.2.7.2.1 / cpp ǻƤΤ
    __FreeBSD__, unix, i386 ǤꡢDJGPP 1.12 / GNU C V.2.7.1 / cpp
    ǻƤΤ GO32, MSDOS, unix, i386 Ǥä
    ⡢̾ gcc  -undef ץϤƺƤޤ
    褦ˤʤäƤ
  *2 CygWIN 1.3.10 Ǥ malloc()  _malloc_r() Ȥ롼󤬤ꡢ
    ¾Υ饤֥ؿˤϤƤӽФΤĤ롣Τᡢ¾
     malloc() ȤȤǤʤ


ǥå

    [5.1]       ǥåη

  MCPP ФǥåȤΰ̣ϡʲ̤Ǥǥå
Ϥɸ२顼Ϥ˽Ϥ졢-Q ץǥȥǥ쥯ȥ
 cpp.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 :   ְ㤤βǽΤ륽
    class 2 :   ʾ꤬뤬ºݤˤϤ֤Τʤ
    class 4 :   ºݤˤϤ֤꤬ʤ portability ˴ؤ warning
    class 8 :   åפ #if group 䡢#if ɾ򥹥åפ
        䡢ʸƥϢˤĤƤΤ warning
    class 16:   trigraph, digraph ˤĤƤ warning

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

    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 ĹޤMODE >= STANDARD ξǤ
Too long number token "12345678901234......"
    Number token ĹޤMODE == PRE_STANDARD ξǤ
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 __preprocessed ˴ؤ륨顼

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

    [5.4]       Error

  ʸˡŪʴְ㤤ˤΥ顼åФޤ
  Standard C Ǥϡviolation of syntax rule or constraint ä
Ϥϲ餫οǥåФʤФʤʤȤˤʤäƤޤ
MODE == STANDARD ǤϤ 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 åФƤץץ³ޤλ
ȡ顼οɽޤ̾Ͽƥץˡּԡפξ֤ͤޤ
-E ץǵưȡפξ֤ͤޤ

        [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
    ʸƥ뤬뤷ƤޤʸƥԤޤ
    ϤǤޤɬפʤ顢ʣԤʸƥ񤤤ơϤˤ
    Ϣ뤵ƤΥ顼 # 黻Ҥˤʸ󲽤ȯ
    Ȥ⤢ޤξϹԤϥåפޤ
    MODE == PRE_STANDARD  OK_UNTERM_STRING == TRUE ǥѥ뤵줿
    ǤǤϤϥ顼ˤʤޤʹƥνȤߤʤˡ
    ޤMODE != POST_STANDARD && TOP_SPACE == TRUE ǥѥ뤵줿
    ǤǤ -a (-lang-asm, -x assembler-with-cpp) ץǵư줿
    ϡԤޤʸƥȽǤơ\n ƼιԤϢ
    뤹Τǡ顼ˤϤʤޤʥ˥󥰤ϽФˡ
Unterminated character constant 't understand.
    ʸ뤷ƤޤOK_UNTERM_STRING ǤǤϤϥ顼
    ʤޤʹƥνȤߤʤˡ
Unterminated header name <header.h
    header-name 뤷Ƥޤ<, > ǰϤޤ header-name  "
    ޤ ' äϤΥ顼ǤϤʤ嵭ĤΥ顼Ȥʤޤ
    ޤ<, > ǰϤޤ header-name  /* äϤ夬
    ȤȲᤵޤ
Empty character constant ''
    ʸȤǤ
Illegal UCN sequence
    MODE == STANDARD  __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"
    MODE == STANDARD  OK_MBIDENT == TRUE ǥѥ뤷 MCPP ξ硢
    C99 Ǥ identifier  multi-byte character Ȥޤmulti-
    byte character Ȥǧʤ character sequence ȥ顼
    ˤʤޤ

        [5.4.2]     뤷ʤեΥ顼

  Υåϥե뤬뤷ʤԡȡ#if section
ޥƤӽФǽäƤ˽ФޤΥեϤ
include 줿եǤʤˤϡ"End of file" ǤϤʤ "End
of input" ɽޤ
  οǥå MCPP Υ⡼ɤˤäơ顼Ȥʤȥ
˥󥰤ȤʤȤޤ
  MODE >= STANDARD ǤϤϤ٤ƥ顼ǤιԤޥƤӽФ
ϥåפ#if section бطϤΥե뤬 include 줿
֤ᤷޤ
  MODE == PRE_STANDARD Ǥϡ\ ǽ륽ϥåޤno
newline, unterminated comment ϥ顼ǤʳΤ (unterminated
#if section, unterminated #asm block, unterminated macro call) ˤĤ
ϡOLD_PREPROCESSOR Ǥϥ˥󥰤ǡǤʤ include 줿
νǤϥ˥󥰡ϤνǤϥ顼ǤϤν
ǤʤϡΥ顼䥦˥󥰤̵뤷ơʤ⥤󥯥롼
ɤ줿ե뤬󥯥롼ɸΥեˤäΤ褦ˡ˽
³ޤη̤Ϥ̯ʥ顼Ǥ礦

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 ǤϤΥ顼ˤʤ뤳Ȥޤ
End of file with unterminated #asm block started at line 123
    123 Ԥ #asm б #endasm ޤ

        [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 줿ե뤬ե
    ˤХ顼ˤʤʤñΥեǤϥХ󥹤
    ȤƤʤȤǤMODE >= STANDARD λǤMODE <
    STANDARD Ǥϥ˥󥰡ˡ

  ΣĤ #asm, #endasm бطΥ顼ǤMODE ==
PRE_STANDARD νϤξǤ

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 ԤΰޥǤС
ŸǥåԤޤMODE == PRE_STANDARD ǤŸ
ʤˡ
  ΥåΤΤˤϥǥ쥯ƥ̾ФƤޤ󤬡³
ɽ륽Ԥǥǥ쥯ƥ֤狼ޤʥǥ쥯ƥֹԤϥ
Ȥ space ѴȡɬԤˤʤˡ

Illegal #directive "123"
    # ³ȡ̾ǤϤޤ# ³Τϥǥ쥯ƥ̾
    ʤФʤޤʤOLD_PREPROCESSOR == TRUE ǥѥ뤵
    줿 MCPP Ǥ #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 ϽȡǤʤФʤޤMODE >=
    STANDARD ξǤʤ¾ξϥ˥󥰤ϽФʡ
    ȡǧˡ
Line number "2147483648" is out of range of [1,2147483647]
    #line  [1,2147483647] ϰϤˤʤФʤޤ0 ⥨
    顼ǤMODE >= STANDARD ξǤ__STDC_VERSION__ < 199901L 
     __cplusplus < 199901L ξϤΰͭϰϤ [1,32767] 
    [32768,2147483647] ϰϤϥ顼ǤϤʤ˥󥰤ˤȤɤ
    Ƥޤ
Not a file name "name"
    #line ̾ʸƥǤʤФʤޤ
    Identifier 磻ʸƥǤϤޤ

  Υ顼 MODE >= STANDARD ξǡΥǥ쥯ƥ̵֤
뤵ޤMODE == PRE_STANDARD ǤϡOK_IF_JUNK == TRUE ξϥ顼
⥦˥󥰤Ф¾ξϥ˥󥰤Ȥʤꡢ "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'
    POST_STANDARD Ǥ #if ʸ磻ʸϻȤޤ
    
Can't use the operator "++"
    #if ˻Ȥʤ黻Ҥޤ=, ++ Ǥ
Not an integer "1.23"
    #if ԤˤʸޤˤȤޤ
Can't use the character 0x24
    #if ˻Ȥʤʸʥ 0x24ˤޤidentifiler, 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 ϰϤˤޤ
    ޤMODE == STANDARD λǤ
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ˤɽǤϰϤĶƤޤMODE ==
    STANDARD λǤ
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 ˴ؤ륨顼Ǥޥޤ
  #, ## 黻Ҥ˴ؤ륨顼 MODE >= STANDARD ΤΤǤ
  __VA_ARGS__ ˴ؤ륨顼 MODE >= STANDARD ξǤѰޥ
 C99 λͤǤGNU C ȤθߴΤ C90 Ǥ C++ Ǥͭ
Ƥޤʤ˥󥰤Фˡ

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

        [5.4.9]     ޥŸΥ顼

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

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 ĤΤϤǤ;
    פʰΤƤơ³ޤ
Not a valid preprocessing token "+12"
    ## 黻ҤˤäƣĤ pp-token Ϣ뤷Ȥ"+12" Ȥ
    invalid ʤΤˤʤޤϸڤΥ뤫⤷ޤ󤬡
    Τޤ޽³ޤ-lang-asm (-x assembler-with-cpp, -a) ץ
    Ǥϡϥ˥󥰤Ǥ
Not a valid string literal "\\"str\""
    # 黻ҤˤäƥޥƤӽФΰʸ󲽤Ȥͭʡñ
    ΡʸƥȤϤʤ餺"\\"str\"" Ȥ token sequence 
    ʤޤƥγ \ Τ뤳ȤǤʥƥγ \
    ʸ󲽤ȡUnterminated string literal Υ顼ˤ
    뤳Ȥ⤢ꡢΥ顼ˤʤʤȤ⤢ˡΤޤ޽³
    ֤󥳥ѥեǺ٥顼ˤʤǤ礦MODE ==
    POST_STANDARD ǤϤΥ顼ȯޤUnterminated string
    literal Ϥꤦˡ

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

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

        [5.4.10]    #error, #assert

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

        [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 ΰϣĤʸƥޤϥ磻ʸ
    ƥǤʤФʤޤMODE >= STANDARD  OK_PRAMGA_OP == TRUE
    ǥѥ뤷 MCPP  -S1 -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 ޤߤޤ

  MODE == STANDARD Ǥ Standard C  undefined ȤƤư
¿ error ȤޤˤĤƤ warning Фޤ

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

  MODE == STANDARD Ǥϡimplementation-defined ȤƤư¿
ĤƤ warning ФޤImplementation-defined Ǥʤ warning
νФʤΤϡǤ
  #include directive  include եõꡢ
#include ΰ header-name Ȥ pp-token ۤˡ
 warning ФƤΤǤϤ뤵header-name ϥޥǤʤС
Υȡ space ̵ͭޤƤΤޤ޻Ȥ롣ޥǤС
Ÿ̤ space ̵ͭޤƤΤޤ޻ȤMODE == POST_
STANDARD ǤϡޥŸˤä pp-token ֤ space 뤬
ξ <  > ޤǤ space ƤäĤΤ header-name Ȳ
᤹롣ɤˤƤ POST_STANDARD Ǥ <, > ˤ header-name 
obsolescent feature ǤˡWarning ϽФʤˡ
#pragma __debug_cpp __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 __put_defines, #pragma __preprocess, #pragma
__preprocessed, #pragma __debug_cpp, #pragma __end_debug_cpp ʳ
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 Υå
ܴۤ˹ԤȤǤޤ
  ODE == POST_STANDARD Ǥϡporting.txt [4.1.3] ˤͤΰ㤤
СMODE == STANDARD ƱͤǤ
  ˥󥰤ĽФƤ⡢פξ֤ͤޤ-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 ʸޤMODE ==
    PRE_STANDARD λФޤMODE >= STANDARDǤϡ̾ιԤοͥ
    ˤĤƤȽϤޤ#if ˤΥȡ󤬤С
     Not an integer 顼ΰȤʤޤ
Unterminated string literal, catenated to the next line
    ĤƤʤʸƥ̾ϥ顼Ǥ-lang-asm
    (-x assembler-with-cpp, -a) ץǵư줿ϡϹԤ
    ޤʸƥȲᤷơ'\n' ƼιԤϢ뤷ޤ
    ν򤹤åȤϲʤΤǡܤʸ
    ƥϢפεǽȤäƽ񤤤Ƥ

        [5.5.2]     뤷ʤեΥ˥

   OLD_PREPROCESSOR == TRUE ξ硢 MODE == PRE_STANDARD ǥ
뤬󥯥롼ɤ줿ΤǤˤФޤMODE >= STANDARD
ξϥ顼MODE == PRE_STANDARD  OLD_PREPROCESSOR == FALSE 
νξ⥨顼ˡ

End of file within #if (#ifdef) section starting from line 123
End of file with unterminated #asm block starting from line 123
End of file within macro call starting from line 123

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

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

      ΣĤ MODE == STANDARD ξǤ

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 ȤƼƤʤϤ
    Ȥ褦ˡޥȤ뤳Ȥʤ饦˥󥰤
    ޤ

  ΣĤ MODE >= STANDARD ξǤ

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 __push_macro, #pragma __pop_macro, #pragma push_macro, #
    pragma pop_macro ιʸְäƤޤ #pragma Ǥϰ
    ޥ̾ ", " ǰϤߡˤ (, ) ǰϤǡ
     ("MACRO") ȤʤФʤޤ
"MACRO" has not been defined
    #pragma __push_macro, #pragma __pop_macro, #pragma push_macro, #
    pragma pop_macro ΰǤ ("MACRO")  MACRO Ϥ⤽ޥ
    Ƥޤ
"MACRO" is already pushed
    #pragma __push_macro( "MACRO")  MACRO ϤǤ push 졢ˤ
    θ #undef ƤޤMACRO κʤ push Ǥޤ
"MACRO" has not been pushed
    #pragma __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 __debug_cpp, #debug ΰȤ "name" ϼƤޤ
No argument
    #pragma __debug_cpp, #debug ΰޤ
Not an identifier "123"
    #pragma __debug_cpp, #debug ΰ identifier ǤϤޤ

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

   MODE == PRE_STANDARD λФޤMODE >= STANDARD λϥ
ˡ

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

   OK_IF_JUNK == FALSE ξФޤMODE >= STANDARD Ǥ #
pragma __once, #pragma once, #pragma __push_macro, #pragma __pop_macro,
#pragma push_macro, #pragma pop_macro, #pragma __setlocale, #pragma
setlocale, #pragma __put_defines, #pragma __debug_cpp, #pragma
__end_debug_cpp ǤǤMODE >= STANDARD Τ¾ξϥ顼
OK_IF_JUNK == TRUE ξϥ顼⥦˥󥰤Фʤˡ

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
    ϣ黻 *, /, %, +, -ñ - Τɤ줫ǤUnsinged 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 ˻ޤ
    顼ǤϤޤ󤬡⤷տޤˤμΥޥȤäƤΥ
    ˥󥰤Фʤ顢ϥޥޤϥޥƤӽФδְ㤤Ǥ
    տޤƻȤäΤǤСư۾ʥޥǤ
    Υ˥󥰤 MODE == STANDARD ξǤMODE == STANDARD
    Ǥ -c ץꤹȡΥ˥󥰤ϽФޤMODE ==
    PRE_STANDARD ǤƱݤϵޤ˥󥰤ϽФޤ
    MODE == POST_STANDARD ǤϺִꥹȤθΥƥȤϼ
    ޤʤΤǡΥ˥󥰤Ϸ褷ƽФޤunterminated macro
    call Υ顼ˤʤȡޤääŸ̤ˤʤȤˡ
Less than necessary N argument(s) in macro call "macro( a)"
    ޥƤӽФΰ­ޤ̾Ϥϥ顼ǤѰ
    ޥǰĤ­ʤäϥ˥󥰤ˤȤɤƤޤ
    GNU C βѰޥ C99 ΤȤδ֤ΰܿξ㳲򸺤餹
    Ǥ

        [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] ϰϤϥ顼ǤϤʤ
    󥰤ˤȤɤƤޤ
    MODE >= STANDARD ξǤ

  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 __warning_cpp (#warning)

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

    [5.6]       Warning (class 2)

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

  ΣĤ MODE >= STANDARD ξǤ

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) ץǵư줿ϥ顼ˤϤʤ
    

   MODE == POST_STANDARD ξǤ

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-
    delimeter ǤǤ 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" Υޥ뤳ȤǤդǤ褦ˤʤäƤޤ
MODE >= STANDARD ǤϤͤ 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 ϰܿޤMODE ==
    STANDARD λФޤ
Multi-character or multi-byte character constant '' isn't portable
    Multi-character character constant  multi-byte character character
    constant ͤɾλϽϰ¸ʤΤǡȤä #if ϰ
    ޤMODE != POST_STANDARD λФޤ

  ΣĤ MODE >= STANDARD ξФޤ

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 Υå⤷ޤޤ
MODE >= STANDARD Ǥ #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 skippled 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 Τ MODE == PRE_STANDARD  OK_SIZE == TRUE
    ξǤξǤ⤳ Standard C ǤϻȤޤȤ
    򤷤ޤ
"MACRO" wasn't defined
    #undef Ƥʤ̾ꤷƤޤϾʤȤ
    Standard C Ǥϥ顼ǤϤޤ
Macro "macro" needs arguments
    դޥȤƤΤƱ̾ñȤǸƤޤ
    ŸΤޤ޻ĤޤMODE == PRE_STANDARD ξФޤ
    MODE >= STANDARD ǤϲʤΤǡ˥󥰤ϽФʤˡ
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 ȤϢ뤷ޤCONCAT_STRINGS == TRUE 
    Ǥ

    [5.9]       Warning (class 16)

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

2 trigraph(s) converted
    ʪΣĤ trigraph sequence Ѵޤ tri-
    graph ΤĤǽ񤤤ΤǤ礦MODE == STANDARD ξǤ
2 digraph(s) converted
    ιΣĤ digraph sequence Ѵޤ digraph 
    Ĥǽ񤤤ΤǤ礦MODE >= STANDARD ξ˽Фޤ
    MCPP  MODE == STANDARD ǤϡHAVE_DIGRAPHS == FALSE ǤСץ
    ץäƤ digraph 򼡤Τ褦̾ token Ѵƽ
    ϤޤʤäơѥΤ digraph бƤɬפ
    ʤˡ
        <%  ->  {           <:  ->  [           %:      ->  #
        %>  ->  }           :>  ->  ]           %:%:    ->  ##
    MODE == POST_STANDARD Ǥ translation phase 1 ̾ pp-
    token ѴƤޤޤΰ㤤ϡdigraph  # 黻Ҥˤʸ
    󲽤оݤˤʤä˸ޤMODE == STANDARD Ǥ digraph
    sequence Τޤʸ󲽤ޤMODE == POST_STANDARD Ǥ̾ pp-
    token Ѵ줿Τʸ󲽤ޤޤʸƥ
    digraph sequence  character sequence ä硢MODE ==
    STANDARD ǤϤΤޤޤǤMODE == POST_STANDARD ǤϤб
     pp-token  character sequence Ѵޤ
    MODE == STANDARD ǤϤΥ˥󥰤 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]
End of file with unterminated comment, skipped the line
                                    [5.4.2]
End of file with no newline, skipped the line
                                    [5.4.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]
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 parameter list "(a,b"  [5.4.7]
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() Υ饤֥꤬ޤporting.txt 
[4.extra] ȡˡ
  ⤷ malloc() 󥯤 MCPP  2120  2124 ʤޤ 120
 124ˤޤǤΥ顼ֹ exit 뤳ȤСϴְ㤤
 MCPP ޤϽϤΡʤ֤饤֥ؿΡ˥ХǤ
  ޤƥȤ˻Ȥץ륽νΤۤ

    #pragma __debug_cpp __memory

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

    [6.3]       Х

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

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

    [6.4]       Τո

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


                                                                     eof
