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

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

V.2.6           2006/07     Integrated STANDARD and PRE_STANDARD
                    modes into one executable, differenciating the modes
                    by the invocation options.
                Removed compiler-specific behaviors from stand-alone
                    build.
                Removed settings for pre-C90 compilers, MS-DOS
                    compilers and Plan 9 / cpp.
                Removed #pragma MCPP include_next.
                Added comment on GCC system header and #include_next.
                                                                kmatsui

V.2.6.1         2006/08     Added porting to MinGW.
                Revised some subtle points.
                                                                kmatsui


                              ܼ


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


ס

  MCPP  Martin Minow  DECUS cpp 򸵤 kmatsuiʾ ˤŪ
ľåץץåǤMCPP Ȥ̾ Matsui cpp Ȥ̣
Ǥϥ󶡤ΤǡƽϤǻȤˤϤνϤ˹碌
ƥ˼㴳ѹäǥѥ뤷 MCPP μ¹ԥץ
ɬפޤ
  Υޥ˥奢ǤϡǤνϤ˰ܿ줿¹ԥץλ
Ƥޤ˾ܺ٤Τꤿ͡鲿餫νϤ˰ܿ
Ƥߤͤϡ mcpp-porting.txt ȤɥȤ򻲾ȤƤ

  ΥɥȤϤ٤ free software Ȥ󶡤ޤ
  ޥ˥奢Ƥˡޤ MCPP ħҲ𤷤Ƥޤʤ
[1.1] - [1.2]  mcpp-porting.txt ȽʣƤˡ

    [1.1]       ϣӤϤФʤ portable ʥ

  Linux, FreeBSD, Windows ¿ΣϣӤ򥵥ݡȤƤ portable ʥ
ץåǤꡢΥ Standard C (ANSI/ISO/JIS C) νϤ
 Standard C++ νϤǤХѥǤ빭 portability
äƤ롣饤֥ؿϸŵŪʤΤȤäƤʤ
  ƽϤ˰ܿ뤿ˤϡ¿ξ硢إåեΤĤΥ
ؤƥѥ뤹ǤࡣǰξǤ⡢system.c
Ȥե˿Խ­٤Ǥ롣
  Multi-byte characterʴˤνܤ EUC-JP, shift-JIS, ISO2022-
JP GB-2312Ѥ Big-5ڹ KSC-5601 (KSX 1001) б
롣UTF-8 Ȥ롣Shift-JIS, ISO2022-JP, Big-5 ξ硢ѥ
ΤǧʤϤǤϡMCPP 䤦

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

  Standard C ư⡼ɤΤۤˡK&R 1st. Υ⡼ɤ "Reiser"
model cpp Υ⡼ɤ⤢ꡢˤϼ post-Standard ͤΥ⡼ɤޤǤ
롣C++ ΥץץåȤư¹Իץ⤢롣
  Standard C ⡼ɤϴ¸¿ΥץץåȰäơʤ˼
ƤĤǤ롣C90, C95, C99, C++98 Τ٤ƤбƤ롣
Standard C ץץ reference model ȤʤΤܻؤƺäƤ롣
εʤΥСϼ¹Իץǻꤹ뤳ȤǤ롣*1
  ۤˤĤͭѤʳĥǽäƤ롣ޥŸ #if 
ɾȥ졼 #pragma MCPP debug ⤢롣إåե
"pre-preprocess" ƤȤǤ롣
  ĤͭѤʼ¹ԻץƤ롣˥󥰤Υ٥
ꤹ륪ץ䡢include directory ꤹ륪ץǤ롣
  ˤɤʴְ㤤äƤMCPP ˽긫ʥå
ФꤻΤǤ狼䤹ǥåФŬڤʽ򤹤롣
ܿȤʤˤĤƤٹȯ롣
  ʼǤʤ顢ɥŪŪ

  ܺ٤ʥɥȤ°Ƥ롣

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

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

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

  *1 øεʤȤƤ ISO/IEC 9899:1990 (JIS X 3010-1993) ĹȤ
    Ƥ1999 ǯˤ ISO/IEC 9899:1999 򤵤줿Ǥ
     C90Ԥ C99 ȸƤ֡Ԥ ANSI X3.159-1989 ܹԤΤ
    Τǡ̤ˤ ANSI C ޤ C89 ȸƤФ뤳Ȥ⤢롣ޤISO/IEC
    9899:1990 + Amendment 1995  C95 ȸƤ֤Ȥ롣C++ εʤ ISO
    /IEC 14882:1998 ӤǤǤ ISO/IEC 14882:2003 ǡ
    򤳤Ǥ C++98 ȸƤ֡

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

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

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

    MCPP V.2.3 ʹߤΥӥɥȤȸڥå V.1.3 ʹߤϼ
    ΤȤ֤Ƥ

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

    2006/04 ˼ΤȤ˰ܤä

        http://mcpp.sourceforge.net/

    cpp V.2.2 Ӹڥå V.1.2 ϥ٥ҤΥȤμΤȤ
    롣dos/prog/c Ȥǥ쥯ȥƤ뤬MS-DOS Ѥ
    Ϥʤ UNIX, WIN32/MS-DOS бƤ롣

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

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

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


ưΥץȴĶꡡ

    [2.1]       MCPP ¹ԥץΣΥӥɤȣĤư⡼

  MCPP ˤϡɤνϡʥѥˤΩñΤưstand-
alone-buildפȡνϤΥץץå˼ääưֽ
 build(compiler-specific-build) ȤޤԤϥץץ
򤹤뤿ΤΤǡνϤ򲿤餫ΥѥͿƤ
ѥ뤵Ȥϸ¤ޤ󡣸ԤνϤǥѥȥ󥯤ޤǹ
ΤΤǡMCPP νϤϤΥѥλͤ˹碌Ƥޤ

  ԤǤϥץλͤ MCPP 򥳥ѥ뤷ϤΤˤ
餺ۤܰǡOS ˤ㤬ǤԤǤ϶̤λͤ
ȤˡϤȤθߴΤλͤ¿ꡢʬϽϤȤ˰ۤ
äƤޤStand-alone ǤΥץϽǤǤܻۤȤޤ
ϤΥץȤξͤ򤱤뤿̤ΥץˤʤäƤΤ
ޤ
  ʤΥɥȤǡGCC ѡסVisual C ǡɽƤΤ
⤽줾 GCC , Visual C Ǥΰ̣Ǥ

  Stand-alone ǤǤǤǤ⡢MCPP ˤϤĤư⡼ɤ
ꡢ줾ۤʤץץͤưޤ⡼ɤˤϼΣĤ


std
    Standard C (C90, C99, C++98) ΥץץͤǤ줬ǥե
    ȤΥ⡼ɤǤ
compat
    std ⡼ɤѼǡƵŪޥ򵬳ʤ⤵Ÿޤ
poststd
    kmatsui ˺äץץͤǡStandard C μӤ
    ñ㲽ΤǤ
kr
    C90  K&R 1st. ΥץץͤǤ
oldprep
     "Reiser" model cpp ưͤǤ

  Υ⡼ɤꤹ륪ץϼ̤Ǥ⡼ɤ򲿤ꤷ
 -@std ꤷȤˤʤޤ

-@std
    std ⡼
-@compat
    compat ⡼
-@post, -@poststd
    poststd ⡼
-@kr
    kr ⡼
-@old, -@oldprep
    oldprep ⡼

  std, compat, poststd 碌 Standard ⡼ɡkr  oldprep 
 pre-Standard ⡼ɤȸƤ֤Ȥˤޤޤcompat  std ȤۤȤ
ƱʤΤǡäǤʤ¤ std ˤ compat ޤᡢɬפʾ
compat ˸ڤޤ

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

  ˤ \ ΰ⡼ɤˤäưۤʤꡢStandard ⡼ Ǥ tri-
graph θ塢tokenization  <backslash><newline>  sequence 
ޤpre-Standard ⡼ Ǥʸƥˤ #
define Ԥˤ˸¤äƤޤ

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

  Standard ⡼ Ǥ preprocessing number Ȥͥȡ̤
˰ޤpre-Standard Ǥϡͥȡϣäȡ󤪤
ưȡƱǤǤ 'U', 'u', 'LL', 'll'
ưǤ 'F', 'f', 'L', 'l' ϥȡΰȤǧ
ޤ
  磻ʸʸƥʸ Standard ⡼ ǤñΥ
Ȥǧޤ

  Digraph, #error, #pragma, _Pragma() operator  Standard ⡼ Ǥʤ
ȻȤޤ-S <n> ץstrict-ansi ⡼ɡˤ -+ ץC
++ ץץåȤưˤ Standard ⡼ ǤȤޤ󡣻
ޥ __STDC__, __STDC_VERSION__  Standard ⡼ λ
졢pre-Standard λޤ
  #if defined, #elif  pre-Standard ǤϻȤޤ#include, #line 
˥ޥȤȤ pre-Standard ǤϤǤޤ󡣻ޥ
__FILE__, __LINE__, __DATE__, __TIME__  pre-Standard λ

  ¾ǡ#assert, #asm (#endasm), #put_defines, #debug  pre-Standard
⡼ɤǤȤޤ
  #if  Standard ⡼ Ǥ long long / unsigned long long ɾ
ޤpre-Standard ⡼ Ǥ (signed) long ɾޤ#if 
 sizeof (type) ȤΤ pre-Standard Ǥ
  Trigraph  UCN (universal-character-name) ϡstd ⡼ɤǤȤ


  ǥåν⡼ɤˤäƾäƤޤ

  ʾ˽Ҥ٤Ȱʳ K&R 1st.  Standard C ȰۤʤΤʵΤʤ
ȤˤĤƤϡpre-Standard ⡼ Ǥ C90 ε˽ޤ

  oldprep ⡼ɤ kr ⡼ɤȤΰ㤤 poststd, compat ƥ⡼ɤ
std ⡼ɤȤΰ㤤ϼΤ褦ʤΤǤ

oldprep
    Τ褦ʻͤθŤ "Reiser model cpp" ư򤹤old
    preprocessor ΰաˡ

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

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

poststd
    ϵʤ˼Τ褦ѹäΤǤ롣

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

  Ȥ MCPP μ¹ԥץˤϤĤλͤΤǡޥ
奢դɤǤξϤǤϤޤ MCPP ζ̤Υץ
ư⡼ɤˤäưۤʤ륪ץҤ١ν
Ǥƶ̤ΥץҤ١ΤȤǽǤνϤȤ
ۤʤ륪ץ򵭺ܤޤ

  *1  GCC, Visual C++ μפʽϤȤθߴΤΥץ
    Ǥ롣'compat'  "compatible" ΰ̣Ǥ롣

    [2.2]       ưΥץλˡ

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

  MCPP ư񼰤ϼηǤmcpp Ȥ̾ MCPP Υ
ȡλˤäƤ̤̾ˤʤޤ

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

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

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

    [2.3]       ̤Υץ

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

-C
    ΥȤϤ롣 UNIX  lint ǥå
    ɬפʤΤǤ롣lint ϻȤʤƤ⡢ǥХåͭѤʥ
    Ǥ롣ȤϥԤƬ˰ܤƽϤ롣
    ȤνϥޥŸǥ쥯ƥ֤ν˹ԤΤ
    ꡢȤϥޥƤӽФˤ뤫⤷ʤǤ롣
-D <macro>[=[<value>]]
-D <macro(a,b)>[=[<value>]]
    ޥ macro 롣ƤޥǤ __STDC__,
    __STDC_VERSION__, __FILE__, __LINE__, __DATE__, __TIME__,
    __cplusplus ʳǤСΥץѹǤC99 
    __STDC_HOSTED__  GCC V.3 Τ褦 -D ץϤ
    Τǡ㳰Ū˵Ĥˡ=<value> ꤵƤ value 
    άƤ 1 bcc32 ǤϾάˤϣĤΥȡ
    ΤǡȤϰ㤦Ȥաˡ= ˤ϶
    ƤϤʤ= θ˶򤬤ФΥޥϣĤΥȡ
    롣
    ΥץǤϡĤޥǤ롣
    ΥץϲǤǤ롣
-e <encoding>
    Multi-byte character  encoding  <encoding> ѹ롣<encoding>
    ˤĤƤ [2.8] 򻲾ȤΤȡ
-I <directory>
    Include directory Υѥ̤ directory ꤹʥ
    ѥˤĤƤ [4.2] 򻲾ȡˡdirectory ̾ space ޤޤ
    ϡdirectory ̾Τ "  " ǰϤळȡ
-I 1, -I 2, -I 3
    #include "header" ηΡ<header> ηǤϤʤ˥ǥ쥯ƥ
    Ǻǽ˥ǥ쥯ȥδꤹ롣-I1 Ǥϥȥ
    쥯ȥꡢ-I2 Ǥϥեʥ󥯥롼ɸˤΤǥ쥯
    ꡢ-I3 ǤϤ򥵡ʾܺ٤ [4.2] 򻲾ȡˡ
-j
    ǥåνϤǤϥղþϽϤԤοǥ
    åϤʥǥեȤǤϣԤοǥå³ơ
    ΥԤɽ롣ե뤬 include 줿ΤǤ
    ϡinclude ιԤ缡ɽ롣ޥ˴ؤǥå
    ϡŸΥޥ缡ɽˡ
    GCC  testsuite ǻθڥåȤȤϡΥץꤷ
    ơGCC Ʊǥåˤɬפ롣

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

-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

-N
    '_' ǻϤޤΤޤƤ٤Ƥλޥ̵ˤ롣
    ʤ׵ᤵƤޥ __MCPP Ͻʤ׵ᤵ
    ƤޥȤϡ__FILE__, __LINE__, __DATE__, __TIME__,
    __STDC__, __STDC_VERSION__, C99  __STDC_HOSTED__  C++ 
    __cplusplus Ǥ롣__MCPP  undefine  -U ץ
    Ȥȡˡ
-o <file>
    ץץΥ file ˽Ϥ롣άϥѥ
    ȤʤΤǡ̵Ƥ褤ץǤ뤬ѥɥ饤Фˤ
    ƤϤΥץȤΤ롣
-P
    ѥΤ˹ֹϤά롣äΥץץå
    ʳӤήѤ˻ȤץǤ롣
-Q
    ǥåʥȥǥ쥯ȥΡmcpp.err Ȥ̾Υե
    ˽Ϥmcpp.err ϸ˥ڥɤƤ椯Τǡ
    뤳ȡˡ
-U <macro>
    Ƥޥ macro ä__FILE__, __LINE__,
    __DATE__, __TIME__, __STDC__, __STDC_VERSION__, C99 ⡼ɤǤ
    __STDC_HOSTED__  -+ ץǵư __cplusplus ϼ
    äʤˡ
-v
    MCPP ΥС󤪤ӥ󥯥롼ɥǥ쥯ȥΥɸ२
    Ϥ˽Ϥ롣
-W <level>
    Warning Ϥ٥ level ˻ꤹ롣level  0 ޤ 1, 2,
    4, 8, 16 ΤǤդͤ OR ȤäΤǤ롣1, 2, 4, 8, 16 
    줾 warning  class ̣롣㤨 -W 5 Ǥ class 1, 4 
    warning Ϥ롣0 ξ warning ϽϤʤΥץ
    ʣꤵȡ٤Ƥλ OR Ȥ롣㤨 -W 1 -W
    2 -W 4  -W 7 ƱǤ롣-W 7  -W "1|2|4" Ȥ뤳Ȥ
    Ǥ| ѥפȲᤵʤ褦 "  " ǰϤɬפˡ-W
    "3|4" ȤƤ⤫ޤʤ-W 0 ꤵ줿ϡ¾ -W
    ץϤ٤ƥ󥻥뤵롣Υץꤷʤ
    -W 1 ꤷΤƱǤwarning Ƥ [5.5] - [5.9] 򻲾ȡˡ
-z
    #include Ǽޤ줿եΥץץ̤ϽϤʤ
    ޥ롣ץץΥǥХå˻ȤץǤ
    롣

  *1 GCC Ȱ㤦ΤϼǤ롣
    1.  -MG ץϤʤץλʣ뤫Ǥ
    ʤäơɤͤάˡ-M ץǤ⡢
    󥯥롼ɥե뤬Ĥʤϥ顼ˤϤʤ뤬¸ط
    ϽϤΤǡѤǤ롣
    2.  -MM, -MMD ץǽإåϰϤ嵭 -MM
    ץˤ 2, 3  GCC 2 / cpp0 ǤϽʤΤǤ
    롣GCC 3 / cpp0, cc1 ǤϾ嵭 3 Τƥإåǥ쥯
    ȥȯ줿ΤϽ褦ˤʤä

    [2.4]       MCPP Υ⡼ɤˤ륪ץ

  MCPP ˤϤĤư⡼ɤޤλͤ [2.1] 򻲾ȤƤ

  Υޥ˥奢ǤϳƼΥ⡼ɤλͤ¤٤ƵܤƤΤǡ
ˤʤäƤޤޤ󤷤ƤޤʲǽФƤ
STDC, TFLAG_INIT, etc. ʸ̾__ ǻϤޤʤΡˤϤ٤ system.
H ޥǤ[3], [4], [5] ǤƱͤǤΥޥϤ
ޤǤ MCPP Ȥ򥳥ѥ뤹˻ȤǡǤä MCPP
¹ԥץˤϤΥޥϻĤäƤϤޤ󡣴㤤ʤ褦ˤ
Ƥ

  Standard ⡼ɤǤϼΥץ󤬻Ȥޤ

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

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

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

-V <value>
    C Ǥ __STDC_VERSION__C++ Ǥ __cplusplus Ȥޥ
    ͤꤵ줿 <value> ѹ롣ξ <value>  long 
    ȤʤC95 ǤϤͤ 199409LC99 Ǥ 199901LC++ Standard 
     199711L Ǥˡ__STDC__  0 Ƥ
    __STDC_VERSION__ ɬ 0L Ȥʤꡢ-V ̵Ǥ롣
    C ǤϡΥץꤷʤȡ__STDC_VERSION__  system.H
     STDC_VERSION ͤȤʤGCC V.2.7 - V.2.9 Ǥ 199409Lʳ
    Ǥ 0Lˡ
    -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 ޤ MCPP ǻϤޤΤǤʤ¤
    ޥŸоݤȤʤʥǥեȤǤ Visual C ǰʳǤ
    EXPAND_PRAGMA == FALSE ǤꡢޥŸʤˡ
    5.  ̻ҡʸʸƥ롦pp-number ˤ UCN
    (universal-character-name)  sequence ̤ʤ std ⡼ɤ˸
    ˡ

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

  std ⡼ɤǤϼΥץ󤬻Ȥޤ

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

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

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

  GCC ϥץ¿ΤǡGCC ǤǤϤȤξͤ򤱤뤿
ˤĤΥץ¾νϤȤϰ㤦ΤˤƤޤʤGCC
ǥѥ뤷 MCPP Ǥ stand-alone ǤΥץ¾νϤǥ
ѥ뤷ΤƱǤʲΥץ GCC ǰʳ˶̤Τ
Ǥ

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

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

     GNU Υʤɤ˻ΤǤGCC ǤǤϤΥ
    ץ -x assembler-with-cpp  -lang-asm Ǥ
    Υץ poststd ⡼ɤǤϻȤޤ

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

    [2.6]       ϤȤΥץ

  νϤǥץץåȤ MCPP ȤˤϡϤΥץץ
å֤٤Ŭ֤̾Ƥޤλˡ°Υ
ץåäƤޤȤΤʤ褦餫̾Υե˥
ƤƤ
  Linux, FreeBSD, CygWIN ǤˤĤƤ [3.9.5] 򻲾ȤƤ
GCC 3.*, 4.* ǤˤĤƤ [3.9.7], [3.9.7.1] 򻲾ȤƤ
MinGW ǤˤĤƤ [3.9.7.1] 򻲾ȤƤ

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

    gcc -Wp,-W31,-Q23

Ȥȡץץå -W31 -Q23 ȤץϤޤץ
ץåϤץ -Wp, ³ , Ƕڤä¤٤ޤ*1,
*2
  ¾νϤǤ⡢⤷ѥɥ饤ФΥСμΥ
ƥץɲäۤɤǤ礦㤨С-P<opt> Ȼꤹ
 P Ȥä -<opt> ץץåϤ褦ˤƤȡɤ
ץǤȤ褦ˤʤΤǤ
  ⤦Ĥˡϡ MCPP ǥץץơνϥե򥽡
եȤƥѥϤ褦 makefile 񤯤ȤǤˡ
ˤĤƤ [2.9], [2.10] 򻲾ȤƤ

  MCPP νϤȤΥץϰʲ̤ǤStand-alone Ǥ
Ϥ󤳤ΥץϤޤ

  LCC-Win32 ǤǤϼΥץ󤬻Ȥޤ

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

  Visual C ǤǤϼΥץ󤬻Ȥޤ

arch:SSE, arch:SSE2
    ޥ _M_IX86_FP 򤽤줾 1, 2 롣
-Fl <file>
    GCC  -include <file> Ʊ
-G<n>
    <n>  3, 4, 5, 6, B ǤСޥ _M_IX86 򤽤줾 300, 400,
    500, 600, 600 롣
-GR
    ޥ _CPPRTTI  1 롣
-GX
    ޥ _CPPUNWIND  1 롣
-GZ
    ޥ __MSVC_RUNTIME_CHECKS  1 롣
-J
    ޥ _CHAR_UNSIGNED  1 롣
-RTC*
    -RTC1, -RTCc, -RTCs, -RTCu Υץ󤬻ꤵȡޥ
    __MSVC_RUNTIME_CHECKS  1 롣
-Tc, -TC
    C ΥǤ뤳Ȥؼ롣ꤷʤƤƱ
-Tp, -TP
    -+ ץƱ
-u
    -N ץƱ
-Wall
    -W17 (-W1 -W16) Ʊ
-WL
    -j ץƱ
-w
    -W0 ץƱ
-X
    -I- ץƱ
-Zc:wchar_t
    ޥ _NATIVE_WCHAR_T_DEFINED, _WCHAR_T_DEFINED 򤽤줾 1 
    롣
-Zl
    ޥ _VC_NODEFAULTLIB  1 롣

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

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

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

    #line 123 "filename"

    ȤäΥƱǤǤϤ̤Ǥ뤬ηϻ
    ʤϤ⤢롣MCPP ϤΤ褦ʽѤ build Ǥϡν
    ϤΥѥΤμǹֹϤΤǥե
    ȤλͤǤ롣
    νǤǤ⡢ΥץȤȡäΥ
    ΥǹֹϤ롣
    ΥץϡϤ⤦٥ץץΤΤΤǡ#
    pragma MCPP preprocess Ȥ߹碌ƥإåեΡ֥ץץץ
    פ򤹤˻Ȥ
-dD, -dM
    ץץκǸˤλͭʥޥ #define Ԥηǽ
    Ϥ롣
    -dM ץǤϥץץ̤ϽϤʤޤ줿
    ޥ⵬ʤɸޥǤʤнϤ롣-dD ץ
    ϥץץ̤Ϥ롣ޤޥϽϤʤ*3,
    *4
-finput-charset=<encoding>
    -e <encoding> ץƱGCC ϤΥץꤹ
    <encoding>  UTF-8 Ѵ뤬MCPP ѴϤʤȤա
-fworking-directory
    ϤΣܤ˥ȥǥ쥯ȥɽ̤ #line ԤϤ롣
-I-
    ΥץȸȤ -I <directory> ץλͤѤ롣
    Υץ -I ǻꤵ줿ǥ쥯ȥ #include
    "header.h" ηΥإåեΥˤȤ롣Υץ
    θ -I ǻꤵ줿ǥ쥯ȥϤ٤Ƥ #include directive 
    ˻Ȥ롣ޤ#include "header.h" ηǤ include Υ
    쥯ȥϥʤ
-include <file>
    ᥤΥեˡ<file>  #include ʥ
    Ƭ #include <file> Ƚ񤤤ΤƱ̤ˤʤˡ
-isystem <dir>
    <dir> 򥤥󥯥롼ɥѥ system-specific  directory ˡsite-
    specific  directory θˡ˲ä롣
-lang-c, -x c
    C ΥץץԤꤷʤƤƱ
-nostdinc
    ¾νϤǤ -I- ץƱ
-undef
    -N ץƱ
-Wcomment, -Wcomments, -Wsign-compare
    -W1 ץƱꤷʤƤƱ
-Wundef
    -W4 ץƱ
-Wtrigraphs
    -W16 ץƱ
-Wall
    -W17 (-W1 -W16) ץƱclass 2, 4  warning  GCC ɸ
    إåǤȯ䤹뤵Τǡ-Wall ϤƤ롣class
    8  warning ̾;פʤǤ롣ˤ
    portability ΤͭѤʻȤƻ롣Ȥ gcc -Wp,-W31
    Ȥ뤳ȡˡ
-w
    -W0 ץƱ

  GCC Ǥ Standard ⡼ɤǤϼΥץ󤬻Ȥޤ

-ansi
    __STRICT_ANSI__ ޥ 1 롣
-digraphs
    Digraph ǧ-2 Ǥȿžͭˡ
-lang-c89, -std=c89, -std=gnu89, -std=c90
    -S1 ץƱꤷʤƤƱC90 Ǥʤ C95 λ
    ޤޤ롣
-lang-c99, -lang-c9x, -std=c99, -std=c9x, -std=gnu99, -std=gnu9x
    -V199901L ץƱ
-lang-c++, -x c++, -std=c++98
    C++ ΥץץԤ-+ Ʊ
-pedantic, -pedantic-errors
    -W7 (-W1 -W2 -W4) ץƱ
-std=iso<n>:<ym>
    ʤΥСꤹ롣<n>  C Ǥ 9899 ǤꡢC++ Ǥ
    14882 Ǥ롣<n>  9899 ξϡ<ym>  1990, 199409, 1999,
    199901 Ǥ롣<n>  14882 ξϡ<ym>  199711 Ǥ롣<ym>
    ˤ¾ͤꤵ줿ϡ__STDC_VERSION__ ޤ __cplusplus
    ͤʤξ 200503 Ȥ褦ˣǻꤹ
    ȡˡ

  GCC Ǥ std ⡼ɤǤϼΥץ󤬻Ȥޤ

-lang-asm, -x assembler-with-cpp
    ¾νϤǤ -a Ʊ
-trigraphs
    Trigraph ǧ-3 Ǥȿžͭˡ

  GCC Ǥ pre-Standard ⡼ɤǤϼΥץ󤬻Ȥޤ

-traditional, -traditional-cpp
    -@old Ʊ

  CygWIN / GCC ǤǤϼΥץ󤬻Ȥޤ

-mno-cygwin
    Include directory  /usr/include  /usr/include/mingw ѹ
    ޥ cygwin1.dll Ѥ msvcrt.dll Ѥѹ롣

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

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

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

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

  *1 -Wa ϥ֥Ѥ -Wl ϥѤΥޥƥץǤ롣
    UNIX / System V / cc Υޥ˥奢򸫤ȡϤꤳΥץ
    롣GCC / cc  -W<x> ץϤȤθߴΤΤΤʤ
    Ǥ
  *2 GCC V.3 Ǥ cpp  cc1 (cc1plus) ˵ۼƤޤäΤᡢ-
    Wp ǻꤷץ̾ cc1 (cc1plus) ϤƤޤץ
    ץ cc1 ǤϤʤ cpp (cpp0) ˤ뤿ˤϡgcc θƤӽФ
     -no-integrated-cpp Ȥץꤹɬפ롣
  *3 GCC V.3.3 ʹߤǤ̤Υޥ褦ˤʤä
    ϻޥȤƤϰʤʤ-dD ץ
    Ǥ⤳ΥޥϤ롣
  *4 #pragma MCPP put_defines (#put_defines) νϤ -dM ץȤ
    ƱͤǤ롣äƤ롣
    1. put_defines ǤɸޥȤƵꤵƤΤ⡢
    ȤηǽϤ롣
    2. put_defines ǤϤΥޥΤե̾ȹֹ⥳
    ηǽϤ졢ޤɤߤ䤹褦˷ƽϤ뤬-d* ץ
    Ǥ GCC ƱǽϤ롣ηꤷƤ makefile
    ⸫ݤ뤫Ǥ롣

    [2.7]       Ķѿ

  Stand-alone Ǥ MCPP Ǥ include ǥ쥯ȥ UNIX  OS Ǥ
/usr/include, /usr/local/include ʳϥǥեȤǤꤵƤʤ
ǡ¾Υǥ쥯ȥɬפǤСĶѿ¹Իץǻꤷ
ФʤޤStand-alone ǤδĶѿ C Ǥ INCLUDEC++ Ǥ
CPLUS_INCLUDE ǤեΥϥǥեȤǤϥեΤ
ǥ쥯ȥȤޤ[4.2] 򻲾ȤΤȡˡLinux Ǥ
include ǥ쥯ȥ˺𤬤Τǡ̤кɬפǤˤĤ
 [3.9.8] 򻲾ȤƤ

  GCC ǤǥǥեȤꤵƤ system include ǥ쥯ȥˤ
Ƥϡnoconfig/*.dif ե򸫤Ƥޤinclude ǥ쥯
ΥȴĶѿ̾ˤĤƤϡ[4.2] 򸫤Ƥ

  Ķѿ LC_ALL, LC_CTYPE, LANG ˤĤƤϡ[2.8] 򸫤Ƥ

    [2.8]       Multi-byte character  encoding

  MCPP  multi-byte character ¿ͤ 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)
    ISO-2022-JP1    :   ݵʤܸ
    UTF-8   :   unicode  encoding Σ

  ơ¹Ի˼Τ褦ʤĤˡǼºݤ˻Ȥ encoding ꤷ
ޤ̤ͥϤνΤȤǤ

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

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

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

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


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

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

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

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

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

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

  *1 GCC  configure  --enable-c-mbchar Ȥץդ
    ȡĶѿ LANG ˤä encoding Ǥ뤳ȤˤʤäƤ롣
     configuration  1998/07 餢ΤΤ褦Ǥ뤬
    ʤȤ V.3.2 ǤưʤLANG Τۤ LC_ALL, LC_CTYPE
    Ǥ encoding Ǥ뤳ȤˤʤäƤ뤬ºݤˤϿǥå
    ѤǤ롣

    [2.9]       ѥѥ MCPP Ȥˤ

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

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

    [2.10]      糫ȯĶ MCPP Ȥˤ

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

        [2.10.1]    Visual C++  IDE  MCPP Ȥˡ

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

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

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

3Visual Studio ư롣*2

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

5ȡ֥ᥤե ץꥱ ɡפΥɥ
Τǡ֥ץꥱפ򥯥åǡ֥ӥɥޥ
饤סֽϡס֥꡼󥳥ޥɡסʤޤϡ־õޥɡסˡ֥ӥ
ޥɡפϤ롣ѸϤ狼ˤMCPP Ȥ
stand-alone ǤΥѥˤȤȼΤ褦ʤȤǤ
MCPP μ¹ԥץ̾ mcpp.exe Ȥˡ

    ֥ӥɥޥɥ饤:   nmake
    ֽϡ                :   mcpp.exe
    ֥꡼󥳥ޥɡ    :   nmake clean
    ֥ӥɥޥɡ    :   nmake PREPROCESSED=1

MCPP  Visual C Ǥ򥳥ѥ뤹 COMPILER=MSC Ȥץ
դäƼΤ褦ˤ롣

    ֥ӥɥޥɥ饤:   nmake COMPILER=MSC
    ֽϡ                :   mcpp.exe
    ֥꡼󥳥ޥɡ    :   nmake clean
    ֥ӥɥޥɡ    :   nmake PREPROCESSED=1 COMPILER=MSC

֥ᥤեץȡפǤ make install 륳ޥɤʤ
Τǡ֥ӥɥޥɥ饤ס֥ӥɥޥɡפǻꤵ륳ޥɤ
 install ¹Ԥ褦 makefile 񤤤Ƥɬפ롣
MCPP 򥳥ѥ뤹ΤǤʤС֥ӥɥޥɥ饤פȡ֥ӥ
ޥɡפȤ̾Ʊɤ
Ϥ顢ִλפ򥯥å롣

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

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

  *1 ǥХåǽȤˤϡWindowsXP Pro, Windows2000 Ǥ
    "Debugger users" Ȥ롼פ˥桼°ɬפ롣
    WindowsXP HE ǤϤ롼פϤʤΤǡԤȤƥ
    ʤФʤʤޤ٥롦ǥХåǽȤˤ cl.
    exe θƤӽФ -Zi ץղäơǥХå
    褦 makefile 񤤤Ƥɬפ롣
  *2 ֥ȡ->֥ץפ鵯ưȡ󥯥롼ɥǥ쥯
    δĶѿꤵʤꤹˤˡVisual Studio
    ޥɥץץȡפ򳫤ơեΤǥ쥯ȥ˰ư
     VC 2003 Ǥ
        devenv *.sln /useenv
    ȤơVC 2005 express edition Ǥ
        vcexpress *.sln /useenv
    ȤƵưʤФʤʤ


ĥǽȸߴ

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

  ʤStandard ⡼ɤǤ #pragma Ԥϸ§ȤƤΤޤ޽Ϥޤ
MCPP ȤΤˤĤƤƱͤǤƱ #pragma ѥ
ˤȤäƤ̣Ĳǽ뤿Ǥ
  #pragma MCPP ǻϤޤԤ MCPP ѤΤΤʤΤǽϤޤ
GCC ǤǤϡ#pragma GCC  poison, dependency, system_header Τɤ줫
³ԤϤޤ󡣤ޤ#pragma once, #pragma push_macro, #pragma
pop_macro ⥳ѥΤˤȤäƤ̵ѤʤΤǽϤޤ

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

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

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

  #pragma MCPP put_defines, #pragma MCPP preprocess, #pragma MCPP
preprocessed  Standard ⡼ɤΤΤǡ#put_defines, #preprocess, #
preprocessed  pre-Standard ⡼ɤΤΤǤʲǤ #pragma ˤ
äޤ

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

#pragma MCPP put_defines

Ǥȡޥ򤹤٤Τ뤳ȤǤޤ줾Υޥ
Τ륽ե̾ȹֹɽ륳ȤϤޤ-S1,
-N ΥץդƵưȡ줾ޥäƤ
Ȥ狼ޤ

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

    #pragma MCPP preprocessed

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

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

  *1 ºݤνϤ⤦ʣǤ롣#pragma MCPP preprocessed 
    ϹԤȾ򤽤Τޤ޽Ϥ˥ԡ뤬ɸޥ #
    define Ԥȥޡ˰ϤޤƤΤǡιԤϼΤƤ롣ޤ
    νѤǤǤ #line ԤϽϤΥѥΤ
    ѴƽϤ롣
  *2 äơpre-preprocess Ƥޥξξϼʤ

        [3.1.1]     إåե pre-preprocess

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

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

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

    mcpp > mcpp.H

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

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

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

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

    [3.2]       #pragma once

  #pragma once  Standard ⡼ɤǻȤޤ
  GCC, Visual C, LCC-Win32  Wave ȤñΥץץåǤ #
pragma once ϻȤޤ
  إåե򣱲󤷤󥯥롼ɤʤ˻Ȥޤإåե


#pragma once

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

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

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

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

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

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

  *1 CygWIN Ǥ /  /usr ȤϼºݤˤƱǥ쥯ȥǡ/  Windows
    㤨 C:/dir/cygwin Ȥ /cygdrive/c/dir/cygwin ⤽
    Ʊǥ쥯ȥǤ뤬MCPP ǤϤϤ٤Ʊǥ쥯ȥ
    ưpath-list Ϥ٤ /cygdrive/c/dir/cygwin/dir-list/file 
    Ѵ롣
  *2 MinGW Ǥ /bin  /usr/bin/lib  /usr/lib Ϥ줾Ʊǥ
    ȥǡ/  Windows  C:/dir/msys/1.0 Ȥ /c/dir/msys/1.
    0 ⤽Ʊǥ쥯ȥǡ/mingw  C:/dir/mingw Ȥ /c/
    dir/mingw ⤽Ʊǥ쥯ȥǤ롣MCPP ǤϤϤ줾
    Ʊǥ쥯ȥȤưpath-list Ϥ٤ c:/dir/msys/1.0/dir-
    list/file, c:/dir/mingw/dir-list/file ηѴ롣
  *3 ʤȤ Linux / GCC 2.9x, 3.*, 4.* / glibc 2.1, 2.2, 2.3 ǤϤ
    ʤäƤ롣
    FreeBSD 4, 5 Ǥ glibc ϻȤƤʤΤǡʣʥƥ
    إåˤϤʤäƤʤ

        [3.2.1]     إåե #pragma once 񤭹ġ

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

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

    chmod -R u+w *

Ȥǡ

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

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

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

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

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

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

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

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

    #include_next   <header.h>

 include directory 򥵡ݤˡ include ΥեΤ
쥯ȥ򥹥åפơμΥΥǥ쥯ȥ꤫饵Ϥ
ޤ
  CygWIN, MinGW Ǥϡإå̾ʸʸζ̵̤뤷ޤ

    #pragma MCPP warning    any message
    #warning    any message

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

  *1 V.2.5 ޤǤ #pragma MCPP include_next Ƥɬפʤ
    ȻפΤǺ

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

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

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

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

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


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

  #pragma MCPP debug, #pragma MCPP end_debug  Standard ⡼ɤΤΤ
pre-Standard ⡼ɤǤ #debug, #end_debug Ȥʤޤ
  #pragma MCPP debug <args> ǥ쥯ƥ֤ϥǤդιԤ˽񤯤
Ǥޤ<args> ǥǥХåμꤷޤĤ #pragma MCPP
debug ǥ쥯ƥ֤ʣ <arg> ꤹ뤳ȤǤޤɬİ
 <arg> ꤬ɬפǤΥǥ쥯ƥ֤ȡǥХå
νϤϤޤޤơ#pragma MCPP end_debug <args> ǡ<args>
ΥǥХåϤޤ#pragma MCPP end_debug Ǥϡ<args> 
ά뤳ȤǤޤξϡꤵƤ٤ƤΥǥХå
ϤޤMCPP ǥݡȤʤ <args> ˤäϡ
˥󥰤ФޤˤäͭǤ
  ǥХåϤ٤ơץץνϤƱѥ˽Ϥޤ
νϤƱ뤿ǤäơΥǥ쥯ƥ֤
ȥѥǤޤ
  ץץη̤˵䤬硢ʬ

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

ȤդˤϤǻȤޤ
   MCPP ȤΥǥХåѤΤΤǤץץβȥ졼
˻ȤޤŪŪʤΤǡ򸫤ʤǤʤ
Ȥ⤢ꡢ뤵⤢ޤޤ󤷤Ƥ

  <arg> μϼ̤Ǥ

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

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

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

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

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

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

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

  Pp-token μϼ̤Ǥ

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

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

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

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

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

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

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

  Τ <SRC>  std ⡼ɤǤȤ졢poststd ⡼ɤǤ compat 
ɤǤȤޤ
  #pragma MCPP debug token ꤷۤ狼䤹Ǥ礦

  pre-Standard ⡼ɤ #debug expand Ǥ Standard ⡼ɤȤ롼
˰äƤޤάޤ

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

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

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

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

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

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

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

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

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

    [3.6]       #assert, #asm, #endasm

  #assert  pre-Standard ⡼ɤǤȤޤGCC ǤǤϼޤ
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  GCC  #assert Ȥϡޤä̤ΤΤǤ

  #asm, #endasm ΣĤΥǥ쥯ƥֹԤǤϤޤ줿֥åϥ֥
Ȥưޤpre-Standard ⡼ɤǤȤޤ
 Microware C / 6809 Ѥ˽񤫤줿ΤʤΤǡ¾νϤˤܿˤϡ
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() 黻ҡѰޥ

   Standard ⡼ɤǤȤޤ
  -V199901L ץ __STDC_VERSION__  199901L ʾˤȡC99
μεǽͭˤʤޤ
  C++ Ǥ -V199901L ץ __cplusplus  199901L ʾˤ
ƱͤǤ1, 7 ʳλͤ C++ Standard ˤϤޤ󤬡Standard 
ɤǤ C99 Ȥθߴ뤿ˡΥץѰդƤޤ
  Ѱޥ Standard ⡼ɤǤ 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, MCPP, GCC Τɤ줫ǻϤޤΤǤʤ¤
ŸоݤȤʤʥǥեȤǤ EXPAND_PRAGMA == FALSE Ǥꡢޥ
ŸʤŸΤ Visual C ǤǤˡ
  6.  #if  long long ΤϤǤ long long / unsigned long long
ɾ롣
  7.  ̻ҡʸʸƥ롦pp-number ˤ \unnnn,
\Unnnnnnnn η UCN Ȥ escape sequence ̤ Unicode ʸ
̣ͤ롣#if Ǥ UCN ͤϣɽȤɾ롣ʤ
poststd ⡼ɤǤ UCN ϻȤʤˡ

  ѰޥȤΤϡΤ褦ʤΤǤ

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

Ȥޥȡ

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

ȤޥƤӽФϼΤ褦Ÿޤ

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

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

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

  ʤC99 Ǥ #if ηϤνϤκȤʤäƤޤ
long long / unsigned long long ɬܤȤƤΤǡ#if η long
long / unsigned long long ޤϤʾȤȤˤʤޤC90, C++98
Ǥ #if  long / unsigned long ɾ뤳ȤˤʤäƤޤ
MCPP  C90, C++98 Ǥ long long / unsigned long long ɾlong /
unsigned long ϰϤĶͤФƤϥ˥󥰤Фޤ*1

  *1  GCC, Visual C 2005 ȤθߴΤǤ롣¾νϤǤ⡢
    C99 λͤ˼Τ񤷤Τǡ__STDC_VERSION__ 
    199409L ȤޤޤλͤƤ椯Ȥͽۤ
    롣
  *2 C99 Ǥ #pragma ΰ STDC ǻϤޤϥޥŸʤ
    Ǥʤ implementation-defined Ǥ롣

    [3.8]       Borland C  asm ʸ¾üʹʸ

  Borland C ˤ asm Ȥɤäơ

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

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

    [3.9]       GCC Ȥθߴ

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

  * Ϥɬפʤ #pragma Ǽ٤ΤǤ롣
    #include_next, #warning ƱͤǤ뤬GCC ΥƥǤϼºݤ˻
    ȤƤΤǡMCPP Ǥ GCC Ǥ˸¤äƼ
    󥰤оݤˤʤ롣

        [3.9.1]     FreeBSD 2 / kernel Υץץ

  ʲˡFreeBSD 2.2.2-R (1997/05)  kernel 󤲤
ޤǥ쥯ȥ̾Ϥ /sys (/usr/src/sys) ΤΤǤ
Τ 7, 8 ɬ⵬ʰȿǤϤʤMCPP Ǥ̤ν
ޤ֤ʤäʤΤǥ˥󥰤Фޤ6 ϳĥ
ǽǡC99 ǤƱǽѰդƤޤGCC / 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
    ...
");

  ʸƥĤ " ޤǤˤʤäϹĤƤ
Ȳ᤹Τ GCC / 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 ǡºݤˤϽϤˤäơ
顼ˤǽͭȤΤȡGCC 2 / cpp Τ褦ۤä
ȤͭȤΤȤޤμ¤ˤȤͭˤˤϡ
ľ

#undef DEBUG

٤Ǥ

            [3.9.1.5]   #warning

  i386/isa/if_ze.c, i386/isa/if_zp.c ˤ #warning ޤKernel 
ͣεʰȿǥ쥯ƥ֤ǤStandard C ˹碌뤿ˤϡ
ιԤ򥳥ȥȤ뤷ޤ
  MCPP  GCC ǤǤ #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); \
                    }

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

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

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

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

            [3.9.1.7]   ޥƤӽФΥ

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

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

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

#define EMPTY

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

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

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

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

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

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

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

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

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

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

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

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

#define ntohl(x)                __byte_swap_long(x)

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

#define INB                     inb
#define INW                     inb

  ϤƤޤ礦

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

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

            [3.9.1.9]  .S եΡ֥ץץ

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

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

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

        [3.9.2]     FreeBSD 2 / libc Υץץ

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

#endif;

        [3.9.3]     GCC 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 
˽ؤƤΤޤäݤ줿Τʤ
褹ΤǤ礦
  ϤˤϡGCC / cpp ۤä̤ƤޤȤΰƶ
ƤȻפޤ-pedantic ưǥեȤǤС
Υ虜虜ֿ׽񤫤뤳ȤϤʤäǤ礦ĤƤ
-pedantic-errors ǥեȤˤΤǤϥѥǤʤ¿
ơŪǤϤʤäΤ⤷ޤgcc  man page ˤ -pedantic
ץˤĤơ֤ȤͳϲʤΥץ¸ͳ
 pedants ­뤳ȤǤפȤޤ(*) Standard C
ޤäƣǯ⤿ĤޤȤʤäƤϡ-pedantic-errors ȤޤǤϤʤ
 -pedantic ǥեȤˤ٤ƤȻפޤ
  FreeBSD 2.0-R ǤϥȤΥͥȤޤ2.2.2-R Ǥϰ
ݤƤޤݤ줿ΤϡGCC / cpp ǧʤʤäǤ
 -pedantic Ȥϴطޤ󤬡ץץåΥåΰ
Ϥۤ礭ΤǤ

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

        [3.9.4]     Linux / glibc 2.1 Υץץ

  Vine Linux 2.1 (i386) ǻȤƤ glibc (GNU LIBC) 2.1.3 (2000/09)
Υꥳѥ뤷Ƥߤޤˤ FreeBSD  libc Ȥϰä
ʤ¿꤬ޤˤ GCC / 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 ˤԤޤ
ʸƥ뤬ޤ
  Ϥ󵬳ʰȿΥǤGCC ǤϤԥɤä
ʸƥȤưޤ
  MCPP Ǥ -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
Ǥ GCC ѤǤ #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

  ʾΥեˤ GCC / 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 Ǥ
  Ȥ GCC Ǥϡ#if ԤǤʤФʤΤǤ#if Ԥ˸¤ä (1)
ǥޥŸƤޤ #if ȤɾޤUndefined 
ΤǤְ㤤Ȥϸޤ󤬡ޥŸ #if ԤȤǤʤ
ȤǰۤʤΤϡӤʤͤǤʤȤ⤽λͤˤ portability
ޤ*1
  ΥޥϼΤ褦˽񤱤СʤΤǤ

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

  ʤä᤯ݤƤۤΤǤ*2

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

    defined(__linux__) && !defined(__arm__)

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

            [3.9.4.7]  .S եΡ֥ץץ

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

#APP

Ȥ

#NO_APP

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

            [3.9.4.8]  rpcgen  -dM ץλͤ

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

#123 "filename"

ȤꤷƤơ

#line 123



#line 123 "filename"

⥨顼ˤʤäƤޤȤǤ
  MCPP Ǥ GCC ǤǤ GCC ηǥեȤˤޤrpcgen
üʷˤơɸŪʷбƤʤȤΤϡ
ʻͤǤ

  * MCPP V.2.5  -d* ץνϤ GCC ƱեޥåȤ
    

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

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

  *2 GCC / 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__

  ʾ̾ϥɥȤˤϸޤ󤬡GCC / 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 ǤϾİ
Ƥޤʤʤ㤦ɬפΤ狼ʤˡ
  ȤɤƥɥȤˤʤΤǤ礦

            [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 Υޥȥեΰ¸ط
򤽤λꤵ줿ե˽ϤȤΤʤΤǤ
  ư򤹤ˤϡGCC / cpp Υ (egcs-1.1.2/gcc/cccp.c) 
ɤषޤǤ
  ΤۤDEPENDENCIES_OUTPUT ȤĶѿ⤢ꡢƱͤΰ̣ä
ޤSUNPRO_DEPENDENCIES Τۤ system headers ΰ¸طԤϤ
ΤФơDEPENDENCIES_OUTPUT ϤǤϤʤȤ㤤ޤ
  MCPP Ǥ GCC бǤ˸¤äơΣĤδĶѿбޤ
΢͡פΤ褦ʤΤ᤯ѻߤƤۤΤǤ

            [3.9.4.12]  ¾

  Linux (i386) / GCC ǤϤΤۤ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.1
Υ FreeBSD 2 / kernel ΥƤ̤⤤餫
ޤ
  ΤȤƤϡglibc 2.1 ˤ GCC üʻͤ˰¸Ƥ륽
ʤ餺ꡢ¾νϤؤΰܿϺˤʤäƤޤʿܤΥ
եǤϤǤ뤬ˡץβƥʥ
ˤ⡢ GCC local ʻͤؤΰ¸ϹޤޤGCC V.3
ǤϤ΢Ūͤѻߤ˰¸륽ݤ뤳Ȥ
Ȼפޤ

        [3.9.5]     GCC 2  MCPP Ȥˤ

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

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

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

  -Q ץϤʤƤ⤫ޤޤ󤬡̤οǥåϿ
ˤդۤɤǤ礦
  ˡΤ褦ʥޥɤǤߤޤ

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

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

    ln -sf cpp_gnuc cpp

Ȥޤ

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

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

  ˡ˥󥰤ޤ

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

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

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

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

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

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

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

  *1 MCPP  configure ƥ󥹥ȡ뤷ϼưŪŬڤ꤬
    롣Ȥ -Q -lang-asm ץɲäǤࡣ

        [3.9.6]     GCC 3.2 Υץץ

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

  ʤΡ֣åץץڥåȡפˤ GCC  testsuite ǻȤ
edition ޤȤȡmake check ޤ runtest ǥץץ
ξܺ٤ǥƥޥƥåʥƥȤǤޤϥå
ΤǤϤʤץץåưå򤹤ΤǤˤĤƤ
cpp-test.txt [2.2.3] 򸫤Ƥ

  *1  bootstrap γʳȤˤʤФʤʤΤǤ롣
    Makefile ϼˤϤޤ礭ʣʤΤǡ̤ĥդ
    ơstage ѤäȤ ^C Ǥơscript ֤
    ԺٹˡȤä
  *2 ⡢¿ packages δ֤ΰ¸طΤǡС󤬤ޤ
    ޤȺ롣ΤȤǤϤΤˡ kterm ư
    ʤȤ֤˴٤äȤ⤢롣
  *3 make -k check  MCPP ϻȤäƤϤʤǥå
    GCC Ȥϰۤʤ뤫Ǥ롣
  *4 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]   Ԥޤʸƥ

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

            [3.9.6.2]   #include_next, #warning

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

            [3.9.6.3]   Ѱޥ

  ѰޥϤĤޤȾ testsuite ΤΤǡƥ
Ѥ˽񤫤줿ץˤޤ󡣤ơGCC 2 εˡϤޤݡ
ƤϤΤΡ__VA_ARGS__ Ȥä C99 ΤΤ¿ʤäƤޤ
  ޤGCC 3 Ǥ GCC 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ˡGCC
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' Ÿޥ

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

            [3.9.6.7]  .S եΡ֥ץץ

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

            [3.9.6.8]  rpcgen  -dM ץλͤ

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

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

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

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

            [3.9.6.10]  Undocumented ʻޥ

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

            [3.9.6.11]  Undocumented ʴĶѿ

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

            [3.9.6.12]  ¾

  GCC 3 ǤϼΤ褦 #pragma Ƥޤ

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

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

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

        [3.9.7]     GCC 3, 4  MCPP Ȥˤ

  ʾ˸Ƥ褦ˡGCC 3.2 ΥϾʤȤץץϡ
glibc 2.1.3 ʤɤ٤Ȥʤ꤭줤ʤΤˤʤäƤޤTraditional
ʽϤۤܰݤ졢̣ΤʤץϻȤʤʤäƤƤޤ
  ޤGCC 3.2 / cpp0 ΤΤ⡢traditional ʻͤ obsolete ʤ
Ȥưtoken-based ʸ§ΤˤʤɡGCC 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ˤǡGCC 2 ξƱͤˡ
cpp0 θƤӽФ MCPP ¹Ԥ褦ˤƤޤ[3.9.5] ȡˡ*
1
  Ƥȡgcc  g++ ޤ MCPP ƤӽФ졢θ cc1,
cc1plus  -fpreprocessed ȤץץѤߤǤ뤳Ȥ򼨤ץ
դƸƤӽФ褦ˤʤޤ
  ʤƥɸȰۤʤС GCC 򥤥󥹥ȡ뤷
ղŪ include directory ꤬ɬפʤȤޤMCPP ǤϤ
 MCPP ΥѥȤ߹Τǡ̾ϴĶѿꤹɬפϤ
ޤ
  ΤȤ Linux Ǥϡ/etc/ld.so.conf  /usr/local/gcc-3.2/lib
ȤԤɲä~/.bash_profile ˼Τ褦äƤޤ

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

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

  *1 configure  MCPP 򥤥󥹥ȡ뤷ϡ餬ưŪ
    롣

            [3.9.7.1]       GCC 3.3, 3.4-4.1  MCPP Ȥˤ

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

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

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

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

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

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

  ֹݲפȸ Unicode б뤳ȤȹͤĬȤ˼º
 multi-byte character Ȥʤο͡δ֤ˤޤĬ
GCC ˤڤǤޤä褦Ǥ

  ⡢ͤޤʬ˼Ƥޤ󡣼ºݤ˻ȤäƤߤȡΤ
ˤʤޤ

  1.  EUC-JP, GB2312, KSC-5601  finput-charset ץꤹ
    UTF-8 Ѵ졢ꤷʤФΤޤ̤롣
  2.  fexec-charset ץ V.3.4, 4.0 ǤϸʤV.4.1 Ǥϸ
    EUC-JP, GB2312, KSC-5601 ˤĤƤư롣
  3.  Big5  UTF-8 ؤѴϤǤ뤬V.4.1 Ǥ fexec-charset ץ
     Big5 ᤹ȤǸư롣
  4.  ISO2022-JP  V.3.4, 4.0 ǤϥץץǤʤäV.4.1
    ǤϤǤ롣fexec-charset ץ ISO2022-JP ᤹Ȥ
    Ǹư롣
  5.  ɤΥСǤ Shift-JIS ϥץץǺ𤷤Ƥޤ

  MCPP  -e <encoding> ץ encoding ꤷޤGCC-
specific-build ǤϡBIG5, shift-JIS, ISO2022-JP Ǥ <backslash> Ȱ
פͤΥХȤľ <backslash> ƥѥη٤䤤
UTF-8 ˤѴ encoding Τޤ޽Ϥޤ-finput-
charset ץ -e ץƱΤȤưޤϼΤ
ͳǤ*4, *5

  1.  Big5, SJIS, ISO2022-JP  UTF-8 ѴƤޤ cc1 
    encoding ᤻ʤGCC V.4.1 ǤǤ롣ɤΥ
     GCC Ǥ⡢Ѵ <backslash> äƤȤΤޤ
    ꡢ̤η̤ˤʤ롣ʤsingle byte character sequence
    Ǥ뤫Τ褦˰롣
  2.  GCC 4.0 ޤǤΥСǤϤɤ encoding  UTF-8 鸵
    encoding ᤻ʤ
  3.  GCC ζᤤλѹԤ

  *1 MinGW Ǥ symbolic link Ȥʤln -s ȤޥɤϤ뤬
    ñ˥ԡΤΤǤ롣ޤMinGW  GCC ϤȤ
    cc1 Ȥ̾ΥեǤäƤ⤽줬 shell-script Ǥȡư
    ݤ롣ΤᡢMCPP  GCC-specific-build ǤϡMinGW ˸¤
     cc1.exe Ȥ̾μ¹ԥץʤ cc1plus.exe
    ˤ⥳ԡˡơ椫 mcpp.exe ޤ GCC  cc1.
    exe ʤ cc1plus.exe ư褦ˤƤ롣
  *2 CygWIN / GCC Ǥ -mno-cygwin Ȥץ󤬤ꡢꤹ
     system include directory ѤꡢGCC λޥѤ롣
    ΤᡢMCPP  CygWIN GCC-specific-build Ǥ V.2.6.1 ϣ
    åȤλޥѰդ褦ˤ
  *3 ΤȤ FreeBSD 5.3 ǤϤʤ GCC ΤѴϤޤäư
    ʤlibiconv ϥ󥯤ƤΤǤ뤬
  *4 MCPP νϤ cc1 Ϥˤ finput-charset Ϥ fexec-
    charset ץդƤϤʤ
  *5 MCPP V.2.5 Ǥ GCC  V.3.4 ξ <backslash> 䤦Ȥ
    ƤGCC ư԰ʤΤǤ褦򸫤ƤΤǤ롣V.
    4.1 ˤʤäƤޤȤư֤ˤʤäƤʤΤǡMCPP V.2.6 
     V.2.4 ޤǤλͤᤷʤGCC V.3.4 ʹߤˤĤƤ V.3.
    3 ޤǤƱ褦˰

        [3.9.8]     Linux  stddef.h, limits.h, #include_next 

  Linux Ǥ GCC ΥС󤴤Ȥ㤨 /usr/lib/gcc-lib/i386-vine-
linux/3.3.2/include Ȥä include directory ƥɲäޤ
ˤ stddef.h, limits.h ˤ꤬ޤCygWIN ǤƱ
Ǥ

            [3.9.8.1]   /usr/include ɸإåʤ

  ޤC ɸإåեΤ float.h, iso646.h, stdarg.h,
stdbool.h, stddef.h ΣĤ Linux ǤϤ GCC Υǥ쥯ȥˤꡢ
/usr/include ˤ /usr/local/include ˤ¸ߤޤLinux Υƥ
إåϽϤ GCC Ǥ GCC ͭ include directory ȤGCC
Ǥʤ /usr/include Ȥ褦˽񤫤Ƥ褦Ǥstddef.h
ʤΤǤϺޤ

  ȤäơGCC ʳνϤ GCC ͭ include directory Ȥ褦
ˤȡ٤ϤΥǥ쥯ȥˤ limits.h  GCC ͭγĥͤ
 #include_next ˤ֤ĤޤȤ #include_next Ƥ⡢
٤ limits.h ν꤬ޤȤ GCC V.3.3
ʹߤǤ limits.h ٤¾塢ϤǻȤ
˽ʤȤ褦ˤʤäᡢ¾νϤǤ limits.h ȤʤȤ
̤ˤʤäƤޤޤ

  ޤGCC Ȥ⡢ limits.h  #include_next ǤԲĲư
ޤ

  Ȥ䤳ΤǤʤǯΤ֤
ʤΤǡˤޤȤƤޤ

            [3.9.8.2]   #include_next δ̯ʽ

  GCC Ǥ include directory ̾ϼΤ褦ˤʤޤ

    /usr/local/include
    /usr/lib/gcc-lib/SYSTEM/VERSION/include
    /usr/include

  Υǥ쥯ȥ꤬夫鲼إޤΣܤ GCC ͭ
 include directory Ǥ SYSTEM 㤨 i386-vine-linux, i386-
redhat-linuxVERSION  3.3.2, 3.4.3 ȤʤޤGCC ̤ΥС
 /usr/local ɲå󥹥ȡ뤷Ϥ /usr/lib/gcc-lib  /usr/
local/lib/gcc ȤʤޤC++ Ǥ /usr/local/include ˤˤ
Υǥ쥯ȥ꤬äޤGCC V.3.*, 4.* ǤϼΤΤǤ

    /usr/include/c++/VERSION
    /usr/include/c++/VERSION/SYSTEM
    /usr/include/c++/VERSION/backward

  Υǥ쥯ȥ̾ GCC ͭΤΤ˸ޤC++ ɸ
쥯ȥϤۤ¸ߤʤΤǡ¾νϤ /usr/include/c++/VERSION
ȤޤGCC V.2.95 Ǥ C++  include directory ϼΤ
ΤǤ

    /usr/include/g++-3

   -I ץĶѿǻꤵ줿ǥ쥯ȥ꤬ΥꥹȤ
ɲäޤ

  ʲǤ狼䤹뤿 GCC V.3.3 ʹߤǤ C  limits.h
ä¤ޤǤ LONG_MAX ˤȤޤlimits.h  /usr/
include  GCC ѥǥ쥯ȥΣĽˤޤ

    #include <limits.h>

  ιԤ GCC  /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h
 include ޤȡΥեƬ

    #ifndef _GCC_LIMITS_H_
    #define _GCC_LIMITS_H_
    #ifndef _LIBC_LIMITS_H_
    #include "syslimits.h"
    #endif

ȤʤäƤΤǡ/usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h 
include ޤΥեϼΤ褦ûΤǤ

    #define _GCC_NEXT_LIMITS_H
    #include_next <limits.h>
    #undef _GCC_NEXT_LIMITS_H

  ơ limits.h Ƥ include ޤ#include_next ʤΤ
/usr/lib/gcc-lib/SYSTEM/VERSION/include 򥹥åפ /usr/include 
ϤǤGCC  cpp.info ˤϼΤ褦˽񤤤Ƥޤ

in 4 This directive works like `#include' except in searching for the
specified file: it starts searching the list of header file directories
_after_ the directory in which the current file was found.

  Ȥ GCC Ϥʤ /usr/include/limits.h ǤϤʤ /usr/lib/gcc-lib/
SYSTEM/VERSION/include/limits.h ⤦ include Ƥޤޤ
 _GCC_LIMITS_H_ Ƥ֤ʤΤ

    #ifndef _GCC_LIMITS_H_

ʲΥ֥åϥåפ졢Υ֥åɾޤ

    #else
    #ifdef _GCC_NEXT_LIMITS_H
    #include_next <limits.h>
    #endif
    #endif

  ޤƤ /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h ˤ
ΤȤޤäƱ #include_next <limits.h> ȤԤǤޤ /usr/lib/
gcc-lib/SYSTEM/VERSION/include/limits.h ʤʬȤ include
ΤȻפȡ٤ GCC  /usr/include/limits.h  include 
ΤǤGCC  #include_next ưϰˤ狼ޤ

  /usr/include/limits.h Ǥ <features.h>  include ޤޤ
ιԤǻϤޤ֥åޤ

    #if !defined __GNUC__ || __GNUC__ < 2

  Υ֥åǤ <bits/wordsize.h>  include ǡwordsize  32
ӥåȤǤ뤫 64 ӥåȤǤ뤫˱Ƶʤ׵ᤵƤƼ
褦ˤʤäƤޤȤ 32 ӥåȤǤ LONG_MAX ϼΤ褦
ޤ

    #define LONG_MAX     2147483647L

  GCC ǤϤΥ֥ååפޤơΥե
뤬ꡢinclude  /usr/lib/gcc-lib/SYSTEM/VERSION/include/
limits.h ޤΥե⤳ǣܤ include 򽪤ꡢ/usr
/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h ꡢΥե⤳
ǽä /usr/lib/gcc-lib/SYSTEM/VERSION/limits.h κǽ include
ޤΥեϾ嵭ʬΤȤ˳Ƽޤ
LONG_MAX ˤĤƤϼΤ褦ˤʤäƤޤ

    #undef LONG_MAX
    #define LONG_MAX __LONG_MAX__

  ǤΥե⽪ޤ

    #include <limits.h>

νϤǤ٤ƽǤɡLONG_MAX  __LONG_MAX__ 
ƥޥʤΤǤ__LONG_MAX__ ȤϤäʤΤǤ礦¤
GCC V.3.3 ʹߤǤ __LONG_MAX__ 䤽¾¿ΥޥƤ
ΤǤ32 ӥåȥƥǤ __LONG_MAX__  2147483647L Ȼ
ƤޤLONG_MAX ʳεʤ׵ᤵƤƼޥˤĤƤ⡢
줿ޥ򸵤ƤΤǡƱۤǤʤ顢
Τ䤳إåե #include_next νϤäΤ
ΤǤ礦

  #include_next ư GCC V.2.95.3, V.3.4, V.4.0, V.4.1 Ǥ V.3.3 
ƱǤʤ

    #include_next <limits.h>

 /usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h /usr/lib/gcc-
lib/SYSTEM/VERSION/include/limits.h  include 졢ˤƱ

    #include_next <limits.h>

 /usr/include/limits.h  include ޤ

    #include <limits.h>

  Ǥ /usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h  include
뤳ȤˤʤޤΥե򣲲 include Ƥ̤Ѥޤ
ǤꡢͤưäƤꡢưӤƤޤ󡣤
ΥեμΥ֥åϥʬǤ

    #else
    #ifdef _GCC_NEXT_LIMITS_H
    #include_next <limits.h>
    #endif

            [3.9.8.3]   GCC ǤʤɸإåȤʤ

  Ǥϼ GCC ʳνϤ Linux ΥƥإåȤȤɤʤǤ
礦 GCC ͭ include directory Ȥʤȡstddef.h Ĥ
ޤ󡣤ʤ GCC  include directory ȤȤɤʤǤ礦
stddef.h ϸĤޤ٤ limits.h ʤޤ

    #include <limits.h>

  ιԤǥץץå /usr/lib/gcc-lib/SYSTEM/VERSION/include/
limits.h  include ޤ /usr/lib/gcc-lib/SYSTEM/VERSION/
include/syslimits.h  include ޤơ

    #include_next <limits.h>

ǥ顼ˤʤޤ

  Ǥϡץץå #include_next ɤʤǤ礦
#include_next ̤˼ƤС /usr/include/limits.h
 include ޤơ嵭

    #if !defined __GNUC__ || __GNUC__ < 2

ʲΥ֥å졢LONG_MAX Τ褦졢¾Υޥ
Ŭڤޤ

    #define LONG_MAX     2147483647L

  ơinclude  /usr/lib/gcc-lib/SYSTEM/VERSION/syslimits.h 
ꡢΥե뤬ä /usr/lib/gcc-lib/SYSTEM/VERSION/limits.h 
ޤȡ

    #undef LONG_MAX
    #define LONG_MAX __LONG_MAX__

Ǥä줿ޥϤ٤Ƥ˻ˤ __LONG_MAX__
Ȥ̤̾ˤʤäƤޤΤǤ

GCC V.3.2 ޤǤʤ顢Ǥޤ

    #define __LONG_MAX__ 2147483647L

ȤԤäΤǡ˻ˤƤ⤦١ľޤ
ϥʽǤ̤ΤǻȤȤǤޤV.
3.3 ʹߤΥإåեǤϤ٤Ƥϫ˽ޤ

            [3.9.8.4]   ̤к

  ʾޤȤȡϼˤޤ*1, *2, *3

  1Linux Υƥإå GCC Ѥˤʤˤ /usr/include 
    float.h, iso646.h, stdarg.h, stdbool.h, stddef.h ɬפǤ뤬
    줬ʤ
  2C++ ɸ include directory  GCC ΥС¸ˤʤ
    ϡ/usr/include/c++/VERSION ǤϤʤ /usr/include/c++ ȤäƤ
    ΤǤ롣/usr/include/c++/VERSION/*  GCC ͭΤΤ˸¤
    ٤Ǥ롣
  3GCC  #include_next ưϻͤȰۤʤäƤꡢİʤ
  4GCC  <limits.h> ޥ¾弫ǻΤǤϡ
    䤳إåեν򤹤̣ʤ/usr/lib/gcc-lib/
    SYSTEM/VERSION/include/limits.h Ǥ٤Ƥ #undef ΤǤϤʤ
    Ǥ롣ʤȤ Linux  CygWIN Ǥ limits.h 򣲤Ĥʬ
    ɬפϤʤϤǤ롣Υǥ쥯ȥΥإåե GCC 򥤥
    ȡ뤹˼ưΤʤΤǡ٤ξĹϤ
    ʤǤˤƤ⤦ǤʤΤǤ

  κˤΤϥƥإåιβʣǤ
ơ#include_next Ȥĥǥ쥯ƥ֤ؤ򤫤Ƥޤ
Υǥ쥯ƥ֤ӤϤ¤ƤꡢGCC  glibc Υѥȥ
󥹥ȡǻȤƤΤΡ󥹥ȡ뤵줿ƥإåǤ
limits.h ˤǤ limits.h ν𤷤ƤΤǤϡ
¸ͳޤ

  ơLinux  CygWIN  MCPP  stand-alone ǤǤϰʾ
н褹뤿ᡢȤꤢϼΤ褦ꤹɬפޤStand-alone
ǤǤϺ򤱤뤿ᡢ#include_next ϼޤGCC ͭ include
directory Ȥ߹ߤޤ

  1/usr/include/stddef.h  /usr/lib/gcc-lib/SYSTEM/VERSION/include/
    stddef.h ؤΥ󥯤ȤƺƤʣ GCC ΥС󤬥
    ȡ뤵Ƥ⤽Τɤ줫˥󥯤ƤСLinux, CygWIN
     stand-alone ǻȤʬˤʤȻפ롣 GCC ˤ⡢
    GCC Ǥ MCPP ˤⰭƶͿʤstdarg.h ƱͤǤ롣ޥ
     GCC Ȥ߹ߴؿŸ뤬ñ˥ץץʤ
    Ǥ⤹ࡣ
  2iso646.h, stdbool.h ϤñʤΤǤꡢϤ䥷ƥ˰¸
    ΤǤϤʤΤǡGCC Τɤ줫ΥСΤΤ /usr/include
    ˥ԡ뤫ưФࡣlimits.h  GCC ʳνϤǤ /usr/
    include ΤΤǽʬǤ롣
  3float.h  DBL_MAX_EXP  __DBL_MAX_EXP__ Ȥä
    ʤΤǡ¾ΥץץåˤΩʤɬפʤ GCC 
    ʤɤ򻲹ͤ˽񤯡*4
  4GCC ͭ C  include directory ϴĶѿǤꤷʤ
  5Ķѿ CPLUS_INCLUDE  /usr/include/c++/VERSION:/usr/include/c++
    /VERSION/SYSTEM:/usr/include/c++/VERSION/backward  C++  include
    directory Ȥꤹ롣

  GCC Ǥ MCPP Ǥ GCC ͭ include directory Ȥ߹ߡ
#include_next ̤˼GCC V.3.3 ʹߤǤϸߴΤλ
ޥΤǡ̤ɬפޤ

  *1  [3.9.8] εܤ Linux / GCC 2.95.3, 3.3.2, 3.4.3, 4.0.2, 4.1.
    1  CygWIN / GCC 2.95.3, 3.4.4 ǳǧΤǤ롣CygWIN /
    GCC 2.95.3 Ǥ #include_next ưϻ̤Ǥä3.4.4 Ǥ
    Linux ƱˤʤäޤCygWIN  C++  include directory  2.
    95.3 Ǥ /usr/include/g++-3 Ǥä3.4.4 Ǥ /usr/lib/gcc/
    i686-pc-cygwin/3.4.4/include/c++ ʲȤʤäƤ롣
  *2 FreeBSD 5.3 / GCC 3.4.2 Ǥ /usr/include  C Τ٤Ƥɸإå
    ꡢGCC ͭ include directory  C Ǥ¸ߤʤ#
    include_next ⥷ƥإåˤ̵C++  include
    directory ϻǰʤ /usr/include/c++/3.4, /usr/include/c++/3.4/
    backward  GCC ΥС¸ȤʤäƤ롣
    FreeBSD Ǥ̥С GCC 򥤥󥹥ȡ뤹 GCC-version-
    specific  include directory 롣ˤǤإåե
    ¿ϥʤΤǤ롣/usr/include Υإåե뤬
    뤳ȤϤʤ
  *3 MinGW Ǥ include directories Ȥ̤ͥ¾ΥƥȰۤʤ
    GCC  #include_next ưƱǤꡢޤɸ include
    directory Ǥ /mingw/include ˤĤɸإåʤ
    version-specific-directory ˤ CygWIN ƱǤ롣
  *4 GCC 򻲾Ȥƽ񤱤СΤ褦ˤʤ롣

/* float.h  */ 

#ifndef _FLOAT_H___
#define _FLOAT_H___

#define FLT_ROUNDS      1
#define FLT_RADIX       2

#define FLT_MANT_DIG    24
#define DBL_MANT_DIG    53
#define LDBL_MANT_DIG   64

#define FLT_DIG         6
#define DBL_DIG         15
#define LDBL_DIG        18

#define FLT_MIN_EXP     (-125)
#define DBL_MIN_EXP     (-1021)
#define LDBL_MIN_EXP    (-16381)

#define FLT_MIN_10_EXP  (-37)
#define DBL_MIN_10_EXP  (-307)
#define LDBL_MIN_10_EXP (-4931)

#define FLT_MAX_EXP     128
#define DBL_MAX_EXP     1024
#define LDBL_MAX_EXP    16384

#define FLT_MAX_10_EXP  38
#define DBL_MAX_10_EXP  308
#define LDBL_MAX_10_EXP 4932

#define FLT_MAX         3.40282347e+38F
#define DBL_MAX         1.7976931348623157e+308
#define LDBL_MAX        1.18973149535723176502e+4932L

#define FLT_EPSILON     1.19209290e-7F
#define DBL_EPSILON     2.2204460492503131e-16
#define LDBL_EPSILON    1.08420217248550443401e-19L

#define FLT_MIN         1.17549435e-38F
#define DBL_MIN         2.2250738585072014e-308
#define LDBL_MIN        3.36210314311209350626e-4932L

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define FLT_EVAL_METHOD 2
#define DECIMAL_DIG     21
#endif /* C99 */

#endif /* _FLOAT_H___ */

    [3.10]      Visual C++ Υƥإå

  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 Υƥإåˤ GCC local ʻͤФлȤ
ޤVisual C++ Υƥإåˤ Visual C++ local ʽϤ
ޤ긫ޤ

        [3.10.1]    Ȥޥ

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

    #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] Ǹ GCC 2 / cpp ⤽ΣĤǤץ
åǤϡʬŪ˼äвäۤɥץ๽¤㥴
ƤΤǡɤƤ⤢ȤʼƬǤȤʤޤŤ
ΤƤơᤫľʤ¤ꡢäꤷץץåˤϤ
ʤȻפޤ
  GCC 3 / cpp ǤϥľơGCC 2 Ȥ̤Υץץ
ȤʤޤMCPP ⡢DECUS cpp ȤŤץץåΥ
ȯʤ顢ȯƤޤʤŪ˽ľ줿ΤǤ

  *1 Visual C++ 2005 express edition ˤ Platform SDK ϴޤޤƤʤ
    "Platform SDK for Windows 2003" ɤƻȤȤǤ
    롣 PlatformSDK/Include ǥ쥯ȥ wtypes.h, oaidl.h,
    propidl.h Ǥ⡢ΥޥƱǤ롣


λ͡

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

    [4.1]       λ status 

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

    [4.2]       Include directory Υѥ

  #include directive  include եϼνǥޤ

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

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

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

    [4.3]       Header name ιˡ

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

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

    [4.4]       #if ɾ

  #if ɾϥۥȽϡMCPP 򥳥ѥ뤷ϡˤȥå
ϡMCPP ȤϡˤĺˤäƷޤޤ
ۤʤϡۤη #if ηˤʤޤStand-alone Ǥ
MCPP ǤϥåȽϤ¸ߤʤΤǡۥȽϤˤäƷޤ

  pre-Standard ⡼ɤǤ #if  (signed) long ɾޤ
  long long ʤϤ Standard ⡼ɤǤϡlong  unsigned
long ǹԤޤ
  long long ĽϤ Standard ⡼ɤǤϡ#if  long long /
unsigned long long ɾޤC90, C++98 Ǥ long / unsigned long 
ɾΤǤMCPP Ǥ C90, C++98 Ǥ long long / unsigned
long long ɾlong / unsigned long ϰϤĶϥ˥
Фޤ*1
  Visual C, Borland C 5.5 Ǥ long long Ϥޤ󤬡Ʊ
 __int64 ȤΤǡ#if  __int64 / unsigned __int64 ɾ
ޤʤVisual C++ 2002 ޤǤ Borland C 5.5 Ǥ LL, ULL Ȥ
 suffix ȤʤΤǡ suffix  #if ԤǤϻȤ뤬Ϥʸ
ȤäƤϤʤˡ
  ޤ-+ ץ C++ Υץץ򤹤ϡ#if  true,
false Ȥ pp-token ͤϤ줾 1L, 0L ɾޤ
  Standard ⡼ɤǤζŪɾΤ򡢰ʲޤlong long
ʤϤξϡʲ [4.4], [4.5] εܤϤ٤ơlong long
/ unsigned long long 򤽤줾 long / unsigned long ɤؤƤ
Pre-Standard ⡼ɤǤϤ٤ long ɤؤƤ

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

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

  *1 MCPP V.2.5 ޤǤ C90, C++98 ǤŪˤ long long / unsigned
    long long ɾʤ顢long / unsigned long ϰϤĶ
    顼ȤƤV.2.6  GCC  Visual C ȤθߴΤ
    顼򥦥˥󥰤˳ʲ

    [4.5]       #if Ǥʸɾ

  #if ȡȤƤϼ̻ҡʥޥޥˡοͥȡ
ʸޤΤʸɾλϤۤȤ
implementation-defined Ǥꡢportability Ϥޤꤢޤ#if
'const'  compiler-proper Ǥ if ('const') Ȥδ֤Ǥ̤㤦
礬ޤStandard C Ǥ⡢줬ƱǤ뤳ȤݾڤƤʤˡ
  poststd ⡼ɤǤϤΤۤȤɰ̣Τʤ #if ʸɾϹ
ޤʥ顼Ȥʤˡ
  ʸɾ¾ȡƱͤˡlong long, unsigned long
long ϰϤǾͤɾޤpre-Standard ⡼ɤǤ long ϰ
Ǥ
  Single character Ǥʤ multi-byte character  wide character ϡ
encoding  UTF-8 ξϣХȡʳǤϤ٤ƣХȤηɾ
ޤUTF-8 ϥѤʤΤǡХȤηɾޤEUC-JP 
Х encoding ˤбƤޤʣХʸϣХȡܣХ
ΣʸȤǧ롣η̡ͤɾ뤳Ȥˤʤˡ
ХȤ encoding Ǥʤ顢wchar_t ХȤηǤϤ⤢
ޤMCPP  wchar_t ˤϴΤޤ󡣰ʲǤϣХȤ multi-byte
character encoding ξˤĤޤ
  '' Ȥ褦 multi-byte character constant  ((Хܤ <<
CHARBIT) + Хܤ) ɾޤCHARBIT  <limits.h> 
CHAR_BIT Ʊ͡ˡ
  'ab', '\x12\x3', '\x123\x45' Ȥ褦 multi-character character
constant Ǥϡ'a', 'b', '\x12', '\x3', '\x123', '\x45' 򤽤줾죱
ȤȤ [0, UCHARMAX] ϰϤɾη̤̥ХȤ缡
CHARBIT ĺեȤʤ­Ƥ椭ޤUCHARMAX  <limits.h> 
UCHAR_MAX Ʊ͡ˡĤ escape sequence ͤ UCHARMAX Ķ
ϡout of range Υ顼ȤʤޤäơCHARBIT == 8 ʸ
Ȥ ASCII ǤСΣĤΥȡͤϤ줾 0x6162, 0x1203, 
顼Ȥʤޤ
  L''  '' ƱͤȤʤޤL'ab', L'\x12\x3', L'\x123\x45' 
multi-character wide character constant ˤĤƤϡL'a', L'b', L'\x12',
L'\x3', L'\x123', L'\x45' 򤽤줾죱Ĥ wide character Ȥ [0,
(UCHARMAX << CHARBIT) | UCHARMAX] ϰϤɾη̤̤ wide
character 缡 CHARBIT * 2 ĺեȤʤ­Ƥ椭ޤ
Ĥ escape sequence ͤХʤκͤĶϡout
of range 顼ȤʤޤäơCHARBIT * 2 == 16  ASCII Ǥ
СΣĤΥȡͤϤ줾 0x00610062, 0x00120003, 0x01230045
Ȥʤޤ
  Multi-character character constant, multi-character wide character
constant ͤ unsigned long 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 ȥ㥹ȤϻȤʤȤˤʤޤpre-Standard ⡼
Ǥ #if Ԥ sizeof (type) Ȥ褦ˤʤäƤޤ DECUS cpp
Ѿơ long long, long double νɲäμä
ΤǤʤ˥㥹ȤΤѻʤΤǡäƤʤ뵤
ʤˡ
  eval.c  S_CHAR  S_* ȤޥǤϳƷΥƤ
ϤǻȤϡ⤷ۥȤȥåȤȤǤηΰ
ۤʤʤ顢ͤȤƥåȽϤΤηΥ
ľܽɬפޤ
  MCPP  #if sizeof ˤϼȴޤchar, short, int, long, long
long Ƭդ signed, unsigned ñ̵뤷ޤޤ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  POSTSTD ⡼ɤǤϺ¾Υ⡼ɤǤ 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 ȽϤΥСƱ
ǤСʤȤ⥤󥯥롼ɥǥ쥯ȥʳƱ̤ˤʤϤǤ
  Stand-alone Ǥ MCPP λͤˤϽϤˤϤۤȤɤޤ󤬡
long long ĽϤȻʤϤȤǤ #if ɾ˰㤤
ޤOS ˤ㤬ޤ
  MCPP ˤ stand-alone-build  compiler-specific-build Ȥꡢ
ɤǤ⤤Ĥư⡼ɤޤˤĤƤ [2.1] 򸫤Ƥ
Ǥ STD ⡼ɤ濴ޤ

  κʬե makefile ϼνѤΤΤǤ

    FreeBSD 5.3:        GCC V.3.4
    VineLinux 3.2-x86:  GCC V.2.95, V.3.2, V.3.3, V.3.4
    openSUSE Linux 10.0:    GCC V.4.0
    CygWIN 1.3.10 (GCC V.2.95), 1.5.18 (GCC 3.4)
    MinGW & MSYS (GCC 3.4)
    WIN32:  LCC-Win32 V.3.2, V.3.8
    WIN32:  Visual C++ 2002, 2003, 2005
    WIN32:  Borland C++ V.4.0, V.5.5

  ⤽νϼȤǥѥ뤵ޤ

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

  DIGRAPHS_INIT == FALSE ǥѥ뤵ƤΤǡdigraph  -2 (-
digraphs) ץͭȤʤޤ
  TFLAG_INIT == FALSE ȤƤΤǡtrigraph  -3 (-trigraphs) ץ
ͭȤʤޤOK_UCN  TRUE ˤƤΤǡC99, C++  UCN
(universal character name) Ȥޤ
  DOLLAR_IN_NAME  FALSE ȤƤޤäơ̾ $ ϻȤޤ
OK_MBIDENT  FALSE ȤƤΤǡ̻ multi-byte-character
ϻȤޤ
  STDC  1 ȤƤΤǡ__STDC__ νͤ 1 Ȥʤޤ

  Ƽ translation limits ϼΤ褦ˤƤޤ

    NMACPARSʥޥΰκ                :   255
    NEXP    #if κͥȥ٥    :   256
    BLK_NEST#if section κͥȥ٥      :   256
    RESCAN_LIMITʥޥκͥȥ٥  :   64
    IDMAX   identifier ͭĹ                 :   1024
    NINCLUDEinclude directory κ          :   64
    INCLUDE_NEST#include κͥȥ٥     :   256
    NBUFFʥκĹǡĥȤ a space ˽
        <backslash><newline> ˤ³򤷤κĹ : 65536
    NWORKʽϤκĹ                         :   65536
    NMACWORKʥޥŸХåեΥ  :   262144

  Υޥ OS ˤäưۤʤäˤƤޤbuild type ˤϴط
ޤ

    MBCHAR  ʥǥեȤ multi-byte character encoding
        FreeBSD, Linux          :   EUC_JP
        Win32, CygWIN, MinGW    :   SJIS

  ΥޥϽϤˤäưۤʤäˤƤޤ

    STDC_VERSION    __STDC_VERSION__ ν͡
        Stand-alone, GCC 2      :   199409L
        ¾                  :   0L
    HAVE_DIGRAPHS   digraphs 򤽤Τޤ޽Ϥ뤫
        Stand-alone, GCC, Visual C  :   TRUE
        ¾                  :   FALSE
    EXPAND_PRAGMA   C99  #pragma ԤΰޥŸ뤫
        Visual C                :   TRUE
        ¾                  :   FALSE

  #include Υͥȥ٥ϡƱ˥ץǤեο˴ؤ
Ӥ¤ĶƤƤ⤫ޤޤ

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

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

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

  Include ǥ쥯ȥϼΤ褦ꤷƤޤ
  ޤUNIX Ǹ system-specific ʤΤ site-specific
ʤΤϼ̤Ǥ Stand-alone ǤǤƱǤ
        FreeBSD, Linux, CygWIN  :   /usr/include, /usr/local/include

  Ϥ䤽ΥСˤäưۤʤ implementation-specific ʤΤ
ĤƤ *.dif ե򸫤ƤStand-alone ǤǤϤ
ޤWindows νϤǤϤäꤻĶѿ򻲾Ȥޤ
Ķѿ INCLUDE, CPLUS_INCLUDE ǤStand-alone ǤǤƱ͡
  ǤĤСѤ MCPP ꥳѥ뤹뤫Ķ
ǻꤹ뤫-I ץǻꤹ뤫Ƥ

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

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

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

    FreeBSD 5 / Stand-alone:    __i386__, unix, __unix, __unix__,
                __FreeBSD__ (=5), __MCPP (=2)
    FreeBSD 5 / GCC 3.4:    __i386__, unix, __unix, __unix__,
                __FreeBSD__ (=5), __MCPP (=2), __GNUC__ (=3),
                __GNUC_MINOR__ (=4), __SIZE_TYPE__ (=unsigned int),
                __PTRDIFF_TYPE__ (=int), __WCHAR_TYPE__ (=int)
    Linux / Stand-alone:    __i386__, unix, __unix, __unix__, __linux__,
                __MCPP (=2)
    Linux / GCC 2.95:   __i386__, unix, __unix, __unix__, __linux__,
                __MCPP (=2), __GNUC__ (=2), __GNUC_MINOR__ (=95),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    Linux / GCC 3.2:    __i386__, unix, __unix, __unix__, __linux__,
                __MCPP (=2), __GNUC__ (=3), __GNUC_MINOR__ (=2),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    Linux / GCC 3.3.2:  __i386__, unix, __unix, __unix__, __linux__,
                __MCPP (=2), __GNUC__ (=3), __GNUC_MINOR__ (=3),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    Linux / GCC 3.4.3:  __i386__, unix, __unix, __unix__, __linux__,
                __MCPP (=2), __GNUC__ (=3), __GNUC_MINOR__ (=4),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    Linux / GCC 4.0.2:  __i386__, unix, __unix, __unix__, __linux__,
                __MCPP (=2), __GNUC__ (=4), __GNUC_MINOR__ (=0),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=long int)
    CygWIN 1.3.10, 1.5.18   / Stand-alone:  __i386__, __CYGWIN__,
                __CYGWIN32__, __MCPP (=2)
    CygWIN 1.3.10 / GCC 2.95.3: __i386__, __CYGWIN__, __CYGWIN32__,
                __MCPP (=2), __GNUC__ (=2), __GNUC_MINOR__ (=95),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=short unsigned int)
    CygWIN 1.5.18 / GCC 3.4.4:  __i386__, __CYGWIN__, __CYGWIN32__,
                __MCPP (=2), __GNUC__ (=3), __GNUC_MINOR__ (=4),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=short unsigned int)
    MinGW / Stand-alone:    __i386__, __MINGW__, __MINGW32__,
                __MCPP (=2)
    MinGW / GCC 3.4.5:      __i386__, __MINGW__, __MINGW32__,
                __MCPP (=2), __GNUC__ (=3), __GNUC_MINOR__ (=2),
                __SIZE_TYPE__ (=unsigned int), __PTRDIFF_TYPE__ (=int),
                __WCHAR_TYPE__ (=short unsigned int)
    Win32 / Stand-alone:    __i386__, __WIN32__, _WIN32,  WIN32,
                __FLAT__, __MCPP (=2)
    LCC-Win32:  __i386__, __WIN32__, WIN32, _WIN32, __FLAT__,
                __MCPP (=2),
                __LCC__, __LCCDEBUGLEVEL (=0), __LCCOPTIMLEVEL (=0)
    Visual C++ 2003:    __i386__, __WIN32__, _WIN32,  WIN32, __FLAT__,
                __MCPP (=2), _MSC_VER (=1310),
                _MSC_FULL_VER (=13103077), _MSC_EXTENSIONS,
                _M_IX86 (=600), _INTEGRAL_MAX_BITS (=64)
    Visual C++ 2005:    __i386__, __WIN32__, _WIN32,  WIN32, __FLAT__,
                __MCPP (=2), _MSC_VER (=1400),
                _MSC_FULL_VER (=140050320), _MSC_EXTENSIONS,
                _M_IX86 (=600), _INTEGRAL_MAX_BITS (=64), _MT
    BC 5.5  :   __i386__, __WIN32__, WIN32, __FLAT__, __MCPP (=2),
                __BORLANDC__ (=0x0550), __TURBOC__ (=0x0550)
    BC 4.0  :   __i386__, __WIN32__, WIN32, __FLAT__, __MCPP (=2),
                __BORLANDC__ (=0x0452), __TURBOC__ (=0x0452)

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

  GCC Ǥ V.3.2 ޤǤϻޥȸäƤ GCC Τ
ʤ¿ gcc  cpp  -D ץϤΤǤ
θߴΤˤ MCPP ɬפϤʤΤǤMCPP 
"pre-preprocess" ǡñΤưصΤ MCPP 
ޤ
  GCC V.3.3 ʹߤ60 Ĥ 70 ĤΥޥ褦ˤ
ޤMCPP V.2.5 ʹߤǤ GCC ǤǤϤʤǤ
äơGCC V.3.3 ʹѤ MCPP ǤϾ嵭Τۤ¿Υޥ
ޤƤ MCPP 򥤥󥹥ȡ뤹 mcpp_g*.
h ȤإåեǤ狼ޤ

  FreeBSD, Linux, CygWIN, MinGW / GCC, LCC-Win32  long long äƤ
Τǡ#if  long long, unsigned long long ɾޤVisual C,
Borland C 5.5 Ǥ long long Ϥޤ󤬡__int64, unsigned __int64
ȤΤǤȤޤBorland C 4.0 Ǥ long long 
__int64 ʤΤǡ#if  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 ǤƱͤǤ

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

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

  * CygWIN 1.3.10, 1.5.18 Ǥ malloc()  _malloc_r() Ȥä
    󤬤ꡢ¾Υ饤֥ؿˤϤƤӽФΤĤ
    롣Τᡢ¾ malloc() ȤȤǤʤVisual C 2005 Ǥ⡢
    ץཪλΥ롼 Visual C  malloc() 롼
    ƤӽФΤǡϤ¾ malloc() ȤȤǤʤ


ǥå

    [5.1]       ǥåη

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

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

  -j ץꤷϡ嵭ΣȣϽϤޤ

  ǥåˤϼΣĤΥ٥뤬ޤ

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

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

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

  MCPP Ϥ¿οǥåѰդƤޤstd ⡼ɤǤϼ
Τ褦ʼˤΤܤäƤޤ

    fatal error     :   20 
    error           :   72 
    warning class 1 :   46 
    warning class 2 :   14 
    warning class 4 :   15 
    warning class 8 :   31 
    warning class 16:    2 

  ˤĤơ§ȤƤιԤʬŪ˻Ŧޤ
  ʤʲǤϡǥåǰѤ륽Υȡ
ͤʬˤȤƲΥȡϤᤳǤޤΤͤΤ
˥ޥ̾񤤤ƤȤϡºݤˤϤΥޥŸͤɽ
ޤ
  ޤˤäƥ顼ȤƽФꥦ˥󥰤ȤƽФꤹå
⤢ޤʲǤƱΥåˤĤƤϺǽ˵ܤ
ǤäȤñ˥å¤٤ˤޤ
  ʤǥå˽ФƤ path-list ե̾ 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 ȤΥХ̣ޤ
    줬Ф뤳ȤϤʤȻפޤ⤷Ф餼ҤξϢ
    

        [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 ΥĶƤޤ
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 
    ϤǤХѥΤϢ뤷Ƥޤ
Too long pp-number token "1234567890toolong"
    Preprocessing-number token ĹޤStandard ⡼ɤξǤ
Too long number token "12345678901234......"
    Number token Ĺޤ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 ʬ䤷Ƥ
More than INCLUDE_NEST nesting of #include
    #include ΥͥȤ INCLUDE_NEST ĶƤޤ#include ̵ºƵ
    ˤʤäƤΤǤ礦
Too many include directories "dir"
    Include directory λ꤬ NINCLUDE ĶƤޤ
Too many include files
    ܤΥեΥץץ #include إåե
    ο NINCLUDE*4 Ķޤʣ include إåե
    ϣĤȿޤ

            [5.3.4]     #pragma MCPP preprocessed ˴ؤ륨顼

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

    [5.4]       Error

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

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

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

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

        [5.4.1]     ʸȥȡ˴ؤ륨顼

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

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

    #error  I can't understand.

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

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

        [5.4.2]     뤷ʤեΥ顼

  Υåϥե뤬뤷ʤ #if sectionޥƤӽФ
ǽäƤ˽ФޤΥեϤξinclude
줿եǤʤˤϡ"End of file" ǤϤʤ "End of input" ɽ
ޤ
  οǥå MCPP Υ⡼ɤˤäơ顼Ȥʤȥ
˥󥰤ȤʤȤޤ
  Standard ⡼ɤǤϤϤ٤ƥ顼ǤΥޥƤӽФϥ
åפ#if section бطϤΥե뤬 include 줿ν
֤ᤷޤ
  pre-Standard ⡼ɤǤϤ٤ƥ˥󥰤Ǥpre-Standard ⡼ɤǤ⡢
oldprep ⡼ɤǤ unterminated macro call ʳϥ˥󥰤Ф


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 ȤʤˡޤޥŸ
    λͤ⡼ɤˤäưۤʤΤǡ⡼ɤǤϰտ̤Ÿ
    ޥ¾Υ⡼ɤǤϤΥ顼ˤʤ뤳Ȥޤ

        [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 줿ե뤬ե
    ˤХ顼ˤʤʤñΥեǤϥХ󥹤
    ȤƤʤȤǤStandard ⡼ɤλǤpre-
    Standard ⡼ɤǤϥ˥󥰡ˡ

  ΣĤ #asm, #endasm бطΥ顼Ǥ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 ԤΰޥǤС
ŸǥåԤޤpre-Standard ⡼ɤǤŸ
ˡ
  ΥåΤΤˤϥǥ쥯ƥ̾ФƤޤ󤬡³
ɽ륽Ԥǥǥ쥯ƥ֤狼ޤʥǥ쥯ƥֹԤϥ
Ȥ space ѴȡɬԤˤʤˡ

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

  Υ顼 Standard ⡼ɤξǡΥǥ쥯ƥ̵֤
ޤoldprep ⡼ɤǤϥ顼⥦˥󥰤Фkr ⡼ɤǤϥ
˥󥰤Ȥʤꡢ "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 ˤʤäƤʤäξǤޥŸη̡
    Υ顼äϡΥå³ƤŸ̤ɽ
    ޤ
Can't use a string literal "string"
    #if ˤʸƥϻȤޤ
Can't use a character constant 'a'
    poststd ⡼ɤǤ #if ʸ磻ʸϻȤޤ
    
Can't use the operator "++"
    #if ˻Ȥʤ黻Ҥޤ=, ++ Ǥ
Not an integer "1.23"
    #if ԤˤʸޤˤȤޤ
Can't use the character 0x24
    #if ˻Ȥʤʸʥ 0x24ˤޤidentifier, operator,
    punctuator, string literal, character constant, preprocessing number
    Τɤ preprocessing token ˤפʤʸΥȡ
    ʥȥ륳ɤϤ˥åƤΤǡʳʸ
    ˡ$  identifier ǧϤǤϡMCPP  OK_DOLLAR ==
    TRUE Ȥƥѥ뤷ƤʤȡΥ顼ȯޤ
    󡢥åפ group ˤΤϥåޤ

   #if sizeof ˴ؤ륨顼Ǥpre-Standard ξ
Ǥ

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

        [5.4.6]     #if ɾ˴ؤ륨顼

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

  #if  C99 ǤϤνϤλĺǡC90, C++98 Ǥ long
/ unsigned long ɾΤǤMCPP Ǥ C90, C++98 Ǥ long
long / unsigned long long ɾޤC90, C++98  long /
unsigned long ϰϤĶϥ˥󥰤Фޤ
long long ΤʤϤǤϡ long long / unsigned long long 
long / unsigned long ɤؤƤpre-Standard ǤϤ٤
(signed) long ɤؤƤpoststd Ǥ #if ʸϻȤ
ʤΤǡ̤Υ顼ˤʤޤ

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

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

sizeof: Unknown type "type"
    #if sizeof (type)  type ѤǤ
sizeof: Illegal type combination with "type"
    #if sizeof (long float) ȡȤ߹碌ѤǤ

        [5.4.7]     #define Υ顼

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

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

        [5.4.9]     ޥŸΥ顼

  ϥޥŸ˴ؤ륨顼ǤΥޥɽ졢Υ
Τ륽ե̾ȹֹɽޤ#, ## 黻Ҥ˴ؤ
륨顼 Standard ⡼ɤǤ

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

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

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

        [5.4.10]    #error, #assert

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

        [5.4.11]    #include μ

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

        [5.4.12]    ¾Υ顼

Operand of _Pragma() is not a string literal
    _Pragma() operator ΰϣĤʸƥޤϥ磻ʸ
    ƥǤʤФʤޤStandard ⡼ɤ C99 ΤΤǤ
    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 ξΤȤǡ1|4, 1|2|4, 2|4, 1|4|8, 4|8, 4|
16 ޤߤޤ

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

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

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

  äơMCPP ǤϥץץΥ٥Ǥ portability Υå
ܴۤ˹ԤȤǤޤ
  poststd ⡼ɤǤϡ[2.1] ˤͤΰ㤤 std ⡼ɤƱͤ

  ˥󥰤ĽФƤ⡢פξ֤ͤޤ-W0 Υץ
ǵưȡ˥󥰤ϽФޤ

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

Converted [CR+LF] to [LF]
    ԥɤ [CR+LF]  [LF] ѴޤWindows ѤΥ
     UNIX ϤΥƥǥѥ뤹ȡΥ˥󥰤Фơ
    ԥɤưŪѴޤΥ˥󥰤ϣ󤷤Фޤ
    Stand-alone-build Ǥϥ饹ǡcompiler-specific-build Ǥϥ饹
    Ǥ
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 ʸޤpre-Standard 
    ɤǤФޤ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_prep ⡼ɤǤϥ˥󥰤Фޤ

End of file with no newline, supplemented newlin
    ե뤬ԥɤΤʤԤǽäƤƤϤʤޤ󡣲ԥɤ
    䤤ޤ
End of file with \, deleted the \
    ե뤬 <backslash><newline> ǽäƤƤϤʤޤ
    <backslash> ޤ
End of file with unterminated comment, terminated the commen
    ȤĤ˺ǤȤĤޤ

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

End of file within #if (#ifdef) section started at line 123
End of file within macro call started at line 123
End of file with unterminated #asm block started at line 123
    123 Ԥ #asm б #endasm ޤ

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

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

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

   Standard ⡼ɤξǤ

"and" is defined as macro
    C++  and ޥȤޤ
    C95 Ǥ <iso646.h> ǥޥȤ "and" Σ̾
    ϡC++ Ǥ operator token ǤC++ ǤϤϥޥȤ
    ȤǤʤΤǤ operator ȤƼƤʤϤ
    Ȥ褦ˡޥȤ뤳Ȥʤ饦˥󥰤
    ޤ

   std ⡼ɤξǤ

No space between macro name "MACRO" and repl-text
    #define ԤΥޥִ̾ΥꥹȤȤδ֤˥ڡޤ̾
    ϤꤨʤȤǤ
        #define THIS$AND$THAT(a, b)     ((a) + (b))
    Ȥդ˥ޥ̾˵ʳʸȤƤȡ
        #define THIS    $AND$THAT(a, b) ((a) + (b))
    ȲᤵơΥ˥󥰤Фޤ

  ʲ #pragma ˴ؤ륦˥󥰤 Standard ⡼ɤξǤ
˥󥰤ϽФƤ⤽ιԤϸ§ȤƤΤޤ޽Ϥޤ#pragma
MCPP, #pragma GCC ǻϤޤԤϽϤޤ

No sub-directive
    #pragma Ԥ˲ΰ⤢ޤ󡣤ιԤ̵뤵ޤ
Unknown encoding "encoding"
    #pragma __setlocale( "encoding") ǻꤵ줿 "encoding" Ȥ
    encoding ϼƤޤ
Too long encoding name "encoding"
    #pragma __setlocale( "long-long-encoding") ǻꤵ줿
    "long-long-encoding" Ȥ encoding ̾ 19 ХȤĶƤΤǡ
    ̵뤷ޤ

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

  GCC ǤǤϼΥ˥󥰤Фޤ

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

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

   pre-Standard ⡼ɤǽФޤStandard ⡼ɤǤϥ顼ˡ

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

   kr ⡼ɤξȡStandard ⡼ɤ #pragma once, #pragma MCPP
push_macro, #pragma MCPP pop_macro, #pragma push_macro, #pragma
pop_macro, #pragma __setlocale, #pragma setlocale, #pragma MCPP
put_defines, #pragma MCPP debug, #pragma MCPP end_debug ξФޤ
Standard ⡼ɤΤ¾ξϥ顼oldprep Ǥϥ顼⥦˥
Фʤˡ

Excessive token sequence "junk"

        [5.5.4]     #if ˴ؤ륦˥

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

Macro "MACRO" is expanded to "defined"
    #if ǥޥ MACRO ŸȤ defined ˤʤޤ
    identifier ǤϤʤ黻ҤȤưޤ䤷ʥޥǤ
    Standard C Ǥ undefinedˡ
Macro "MACRO" is expanded to "sizeof"
    #if ǥޥ MACRO ŸȤ sizeof ˤʤޤ
    identifier ǤϤʤ黻ҤȤưޤ䤷ʥޥǤpre-
    Standard ξǤ
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 ץǤϽФˡ
  Standard ⡼ɤǤ #if  C90, C++98 Ǥ long long / unsigned long
long ɾޤC90, C++98  long / unsigned long ϰϤĶ
ϥ˥󥰤ФޤLL Ȥ suffix ˤĤƤƱͤˡC99
ʳǤϥ˥󥰤ФޤΥ˥󥰤 stand-alone-build
Ǥ class 1 ǡcompiler-specific-build Ǥ class 2 Ǥ
  poststd ⡼ɤǤʸ #if ˤϻȤʤΤǡ˥󥰤
ޤʥ顼ˤʤˡ

Constant "123456789012" is out of range of (unsigned) long
    ͤ (unsigned) long ɽǤϰϤĶƤޤ
Integer character constant 'abcde' is out of range of unsigned long
    ʸ 'abcde' ͤ unsigned long ɽǤϰϤĶƤޤ
Wide character constant L'abc' is out of range of unsigned long
    磻ʸ L'abc' ͤ unsigned long ɽǤϰϤĶ
    ޤ
Result of "op" is out of range of (unsigned) long
    黻 op ˤ黻η̤ (unsigned) long ϰϳȤʤޤ
    op ϣ黻 *, /, %, +, - Τɤ줫Ǥɽ
    ξϡñ - 黻Ҥ -LONG_MIN ǥСեȤʤޤ
    Unsigned long ϥСե뤳ȤʤΤǥ顼ˤϤʤޤ
    Ūʱ黻̤ϰϳȤʤϥ˥󥰤Фޤ
LL suffix is used in other than C99 mode "123LL"
    C99 ʳΥ⡼ɤ LL ȤҤȤƤޤ
Shift count "40" is larger than bit count of long
    ӥåȥեȱ黻 <<, >> α operand ͤ long ΥӥåĶ
    Ƥޤ

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

        [5.5.5]     ޥŸ˴ؤ륦˥

  Υ˥󥰤ǤϤΥޥɽ졢ΥޥΤ
ե̾ȹֹɽޤ

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 ˻ޤ
    顼ǤϤޤ󤬡⤷տޤˤμΥޥȤäƤΥ
    ˥󥰤Фʤ顢ϥޥޤϥޥƤӽФδְ㤤Ǥ
    տޤƻȤäΤǤа۾ʥޥǤ
    Υ˥󥰤 std ⡼ɤξǤcompat ⡼ɤǤϤΥ
    ˥󥰤 class 8 ǤФޤpre-Standard ⡼ɤǤƱ
    ϵޤ˥󥰤ϽФޤpoststd ǤϺִꥹ
    ȤθΥƥȤϼޤʤΤǡΥ˥󥰤Ϸ褷ƽФޤ
    unterminated macro call Υ顼ˤʤȡޤääŸ
    ̤ˤʤȤˡ
Less than necessary N argument(s) in macro call "macro( a)"
    ޥƤӽФΰ­ޤ̾Ϥϥ顼ǤѰ
    ޥǰĤ­ʤäϥ˥󥰤ˤȤɤƤޤ
    GCC βѰޥ C99 ΤȤδ֤ΰܿξ㳲򸺤餹
    

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

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

        [5.5.6]     ֹ˴ؤ륦˥

  Ϲֹ˴ؤ륦˥󥰤Ǥ

Line number "32768" is out of range of [1,32767]
    C90, C++ Ǥ #line  [1,32767] ϰϤˤʤФʤޤ
    0 ⥨顼Ǥ__STDC_VERSION__ >= 199901L ޤ __cplusplus
    >= 199901L ξϤΰͭϰϤ [1,2147483647] Ǥ
    äơC90, C++ Ǥ [32768,2147483647] ϰϤϥ顼ǤϤʤ
    ˥󥰤ˤȤɤƤޤ
    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 MCPP warning (#warning)

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

    [5.6]       Warning (class 2)

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

Converted [CR+LF] to [LF]
    ԥɤ [CR+LF]  [LF] ѴޤΥ˥󥰤
    Stand-alone-build Ǥϥ饹ǡcompiler-specific-build Ǥϥ饹
    Ǥ

  #if  Standard ⡼ɤǤ C90, C++98 Ǥ long long / unsigned long
long ɾޤC90, C++98  long / unsigned long ϰϤĶ
ϥ˥󥰤ФޤLL Ȥ suffix ˤĤƤƱͤˡC99
ʳǤϥ˥󥰤ФޤVisual C, Borland C  compiler-specific-
build Ǥ I64 Ȥ suffix ȤޤˤĤƤƱͤǤ
Υ˥󥰤 stand-alone-build Ǥ class 1 ǡcompiler-specific-
build Ǥ class 2 Ǥ

Constant "123456789012" is out of range of (unsigned) long
Integer character constant 'abcde' is out of range of unsigned long
Wide character constant L'abc' is out of range of unsigned long
Result of "op" is out of range of (unsigned) long
LL suffix is used in other than C99 mode "123LL"
I64 suffix is used in other than C99 mode "123i64"
Shift count "40" is larger than bit count of long

  ΣĤ Standard ⡼ɤξǤ

Parsed "//" as comment
    // ޤǤ򥳥ȤȤƲᤷޤC99  C++ ǤϹˡ
    C90 Ǥ⥦˥󥰤ФǥȤȤưޤ
Variable argument macro is defined
    Ѱޥ C99 λͤǤC90, C++ ǲѰޥ
    ޤ
Empty argument in macro call "MACRO( a, ,"
    ޥƤӽФ˥ΰޤMCPP ǤϤΰϣĤ pp-
    token sequence ǤȤߤʤ reasonable ʽ򤷤ޤ
     C99 ǤϹˡǤΤ C90 Ǥ undefined Ǥꡢ
    portability ޤ',' ʤΤϥǤϤʤ
    Ȥߤʤ顼Ȥ롣ĤΰȣĤΥȤϹʸ塢
    ĤʤɤǤäƤ⥨顼ˤϤʤˡ˥
    񤯤Τϰ̤ˤɤǤϤޤ󡣲ǽʾϡ
        #define EMPTY
    Ȥơ EMPTY 򥫥ʬ˽񤯤ΤɤǤ礦
Skipped the #pragma line
    GCC 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) ץǵư줿ϥ顼ˤϤʤ
    

   poststd ⡼ɤξǤ

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

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

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

Converted \ to /
    #include directive  header name  \ ޤޤƤΤǡ
    / Ѵƽޤ Windows ΣϣӤǤ path-
    delimiter ǤǤ undefined Ǥ/ Ȥäְۤ㤤
    ޤ󡣤Υ˥󥰤ϣ󤷤ФޤWindows ư
    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 Υޥ뤳ȤǤդǤ褦ˤʤäƤޤ
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][LF] Ǥ
    ʤñȤ [CR]ˤΥɤ space Ѵޤ줬 directive 
    ˤ Standard C Ǥ undefined Ǥȡʸƥ
    롢ʸΥɤѴޤѴƤ褤ΤǤ뤬ʸ
    åȤϽϰ¸ʤΤǡMCPP ǤϤޤݤʤɬפʥ
    åϥѥΤǹԤǤˡ¾ǡtoken separator 
    Ƥ [TAB]  a space Ѵޤϥѥ̤˲α
    ͿʤΤǡʥץץåˤȤäƤ⥳ѥΤˤȤäƤ
    [TAB]  space Ʊ̣ʤˡ˥󥰤ϽФޤ
    [FF] ϼºݤΥ˻ΤǤֲڡפտޤƤ
    ΤǤ礦ʤǤ
Undefined symbol "name", evaluated to 0
    #if Ԥ 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 ϰܿޤstd 
    ɤǤФޤpoststd Ǥ #if ʸǧʤΤǥ
    ˤʤޤΤΤƱͤǤ
Multi-character or multi-byte character constant '' isn't portable
    Multi-character character constant  multi-byte character character
    constant ͤɾλϽϰ¸ʤΤǡȤä #if ϰ
    ޤstd ⡼ɤǽФޤ

  ΣĤ 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 Υå⤷ޤޤ
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 skipped block)

   #if ˴ؤ륦˥󥰤Ǥ㤨 #if a || b ȤǤϡa
Ǥ b ɾϹԤޤ󡣤-W8 ȤƵưȡɾ
ʤʬ˴ؤƤ⤳Υ˥󥰤ФޤξϤ
 (in non-evaluated sub-expression) Ȥ񤭤դޤ

Constant "123456789012345678901" is out of range
Constant "123456789012" is out of range of (unsigned) long
LL suffix is used in other than C99 mode "123LL"
I64 suffix is used in other than C99 mode "123i64"
Shift count "40" is larger than bit count of long
Integer character constant 'abcdefghi' is out of range
Integer character constant 'abcde' is out of range of unsigned long
Wide character constant L'abcdef' is out of range
Wide character constant L'abc' is out of range of unsigned long
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 value "-1" is converted to positive "18446744073709551615"
Result of "op" is out of range
Result of "op" is out of range of (unsigned) long
Illegal shift count "-1"
"op" of negative number isn't portable

sizeof is disallowed in C Standard
    #if sizeof Τ pre-Standard ⡼ɤǤξ
    Ǥ⤳ Standard C ǤϻȤޤȤ򤷤ޤ
"MACRO" wasn't defined
    #undef Ƥʤ̾ꤷƤޤϾʤȤ
    Standard C Ǥϥ顼ǤϤޤ
Macro "macro" needs arguments
    դޥȤƤΤƱ̾ñȤǸƤޤ
    ŸΤޤ޻Ĥޤpre-Standard ⡼ɤξФޤ
    Standard ⡼ɤǤϲʤΤǡ˥󥰤ϽФʤˡ
Replacement text "sub(" of macro "head" involved subsequent text
    ޥ "head" ִꥹ "sub(" κǥޥƤӽФθΥ
    ȤޤޤΥ˥󥰤 std ⡼ɤǤ class 1
    Ǥcompat ⡼ɤǤ class 8 Ǥ

    [5.9]       Warning (class 16)

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

2 trigraph(s) converted
    ʪΣĤ trigraph sequence Ѵޤ tri-
    graph ΤĤǽ񤤤ΤǤ礦
2 digraph(s) converted
    ιΣĤ digraph sequence Ѵޤ digraph 
    Ĥǽ񤤤ΤǤ礦
    std ⡼ɤǤ digraph ΤǤʤϤǤϡץץ
    äƤ digraph 򼡤Τ褦̾ token ѴƽϤޤ
        <%  ->  {           <:  ->  [           %:      ->  #
        %>  ->  }           :>  ->  ]           %:%:    ->  ##
    poststd ⡼ɤǤ translation phase 1 ̾ pp-token 
    ѴƤޤޤΰ㤤ϡdigraph  # 黻Ҥˤʸ󲽤
    оݤˤʤä˸ޤǥեȤǤ digraph sequence Τޤʸ
    󲽤ޤpoststd Ǥ̾ pp-token Ѵ줿Τʸ
    ޤޤʸƥ digraph sequence 
    character sequence ä硢ǥեȤǤϤΤޤޤǤ
    poststd ǤϤб pp-token  character sequence Ѵ
    ޤ
    std ⡼ɤǤϤΥ˥󥰤 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 "1234567890123456789012" is out of range
                                    [5.4.6]                   [5.8]
Constant "123456789012" is out of range of (unsigned) long
                                            [5.5.4][5.6]      [5.8]
Converted [CR+LF] to [LF]                   [5.5.1][5.6]
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 \, deleted the \           [5.5.2]
End of file with unterminated comment, terminated the comment
                                            [5.5.2]
End of file with no newline, supplemented the newline
                                            [5.5.2]
End of file with unterminated #asm block started at line 123
                                    [5.4.2] [5.5.2]
End of file within #if (#ifdef) section started at line 123
                                    [5.4.2] [5.5.2]
End of file within macro call started at line 123
                                    [5.4.2] [5.5.2]
Excessive ")"                       [5.4.5]
Excessive token sequence "junk"     [5.4.4] [5.5.3]
File read error             [5.3.2]
File write error            [5.3.2]
Header-name enclosed by <, > is an obsolescent feature <stdio.h>
                                                  [5.6]
I64 suffix is used in other than C99 mode "123i64"
                                                  [5.6]       [5.8]
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 'abcdefghi' is out of range
                                    [5.4.6]                   [5.8]
Integer character constant 'abcde' is out of range of unsigned long
                                            [5.5.4][5.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]
LL suffix is used in other than C99 mode "123LL"
                                            [5.5.4][5.6]      [5.8]
Logical source line longer than 509 bytes               [5.7]
Macro "MACRO" is expanded to "defined"      [5.5.4]
Macro "MACRO" is expanded to "sizeof"       [5.5.4]
Macro "MACRO" is expanded to 0 token        [5.5.4]
Macro "macro" needs arguments                                 [5.8]
Macro started at line 123 swallowed directive-like line
                                            [5.5.5]
Macro with mixing of ## and # operators isn't portable
                                                        [5.7]
Macro with multiple ## operators isn't portable         [5.7]
Misplaced ":", previous operator is "+"
                                    [5.4.5]
Misplaced constant "12"             [5.4.5]
Missing ")"                         [5.4.5]
Missing "," or ")" in parameter list "(a,b"
                                    [5.4.7]
More than BLK_NEST nesting of #if (#ifdef) sections
                            [5.3.3]
More than 8 nesting of #if (#ifdef) sections            [5.7] [5.8]
More than INCLUDE_NEST nesting of #include
                            [5.3.3]
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 value "-1" is converted to positive "18446744073709551615"
                                            [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]           [5.8]
Rescanning macro "macro" more than RESCAN_LIMIT times at "something"
                                    [5.4.9]
Result of "op" is out of range      [5.4.6]                   [5.8]
Result of "op" is out of range of (unsigned) long
                                            [5.5.4][5.6]      [5.8]
Shift count "40" is larger than bit count of long
                                            [5.5.4][5.6]      [5.8]
sizeof is disallowed in C Standard                            [5.8]
sizeof: Illegal type combination with "type"
                                    [5.4.6]                   [5.8]
sizeof: No type specified           [5.4.5]
sizeof: Syntax error                [5.4.5]
sizeof: Unknown type "type"         [5.4.6]                   [5.8]
Skipped the #pragma line                          [5.6]
String literal longer than 509 bytes "very_very_long_string"
                                                        [5.7]
String literals "str1" "str2" are concatenated                [5.8]
This is not a preprocessed source
                            [5.3.4]
This preprocessed file is corrupted
                            [5.3.4]
Too long header name "long-file-name"
                            [5.3.3]
Too long identifier, truncated to "very_long_identifier"
                                            [5.5.1]
Too long line spliced by comments
                            [5.3.3]
Too long logical line       [5.3.3]
Too long number token "12345678901234"
                            [5.3.3]
Too long output line        [5.3.3]
Too long pp-number token "1234toolong"
                            [5.3.3]
Too long quotation "long-string"
                            [5.3.3]
Too long source line        [5.3.3]
Too long token              [5.3.3]
Too many include directories "dir"
                            [5.3.3]
Too many include files      [5.3.3]
UCN cannot specify the value "0000007f"
                                    [5.4.1]                   [5.8]
Undefined escape sequence '\x'              [5.5.4]           [5.8]
Undefined symbol "name", evaluated to 0                 [5.7] [5.8]
Unknown #directive "pseudo-directive"
                                    [5.4.4] [5.5.4]           [5.8]
Unknown argument "name"                     [5.5.3]
Unterminated character constant 't understand.
                                    [5.4.1]
Unterminated expression             [5.4.5]
Unterminated header name <header.h  [5.4.1]
Unterminated macro call "macro( a, (b,c)"
                                    [5.4.9]
Unterminated string literal
                                    [5.4.1]
Unterminated string literal, catenated to the next line
                                            [5.5.1]
Variable argument macro is defined                [5.6]
Wide character constant L'abc' is out of range
                                    [5.4.6]                   [5.8]
Wide character constant L'abc' is out of range of unsigned long
                                            [5.5.4][5.6]      [5.8]
Without #asm                        [5.4.3]


Х

    [6.1]       Хɤ

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

    [6.2]       malloc() ϢΥХå

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

    #pragma MCPP debug memory

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

    [6.3]       Х

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

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

    [6.4]       Τո

  ХΤۤˤ⡢MCPP λȤꡢǥåΥɥ
νʤɤˤĤƤո򤪴󤻤
  ոȾ

    http://mcpp.sourceforge.net/

 "Open Discussion Forum" ޤϥ᡼Ǥꤤޤ

                                                                     eof
