From d838b1caed65ced5372a52f7cd90274e104047e7 Mon Sep 17 00:00:00 2001 From: Packit Date: Sep 30 2020 09:42:57 +0000 Subject: Apply patch mcpp-manual.html.patch patch_name: mcpp-manual.html.patch present_in_specfile: true no_prefix: true --- diff --git a/doc-jp/mcpp-manual.html b/doc-jp/mcpp-manual.html index 44a3a18..1038d01 100644 --- a/doc-jp/mcpp-manual.html +++ b/doc-jp/mcpp-manual.html @@ -1,6 +1,6 @@ - + diff --git a/doc-jp/mcpp-manual.html-z.euc-jp b/doc-jp/mcpp-manual.html-z.euc-jp new file mode 100644 index 0000000..44a3a18 --- /dev/null +++ b/doc-jp/mcpp-manual.html-z.euc-jp @@ -0,0 +1,4584 @@ + + + + + + + + +
+

MCPP-MANUAL

+

== How to Use MCPP ==

+
+
+

for V.2.7.2 (2008/11)
+���� �� (kmatsui@t3.rim.or.jp)

+
+
+

== �ܼ� ==

+
+
1. ���� +
1.1. �ϣӤ�����Ϥ����Фʤ� portable �ʥ����� +
1.2. ���Τ� Standard C �⡼�ɤ˲ä��Ƥ���¾�γƼ�⡼�ɤ� +
1.3. ���Υޥ˥奢���ɽ��ˡ +
+
+
2. ��ư���Υ��ץ����ȴĶ����� +
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 ��Ȥ��ˤ� +
2.10.1. Visual C++ �� IDE �� mcpp ��Ȥ���ˡ +
2.10.2. Mac OS X / Xcode.app �� mcpp ��Ȥ���ˡ
+
+
3. ��ĥ��ǽ�ȸߴ��� +
3.1. #pragma MCPP put_defines, #pragma MCPP preprocess �� +
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 __setlocale �� +
3.5. #pragma MCPP debug, #pragma MCPP end_debug, #debug, #end_debug +
3.5.1. #pragma MCPP debug path, #debug path +
3.5.2. #pragma MCPP debug token, #debug token +
3.5.3. #pragma MCPP debug expand, #debug expand +
3.5.4. #pragma MCPP debug if, #debug if +
3.5.5. #pragma MCPP debug expression, #debug expression +
3.5.6. #pragma MCPP debug getc, #debug getc +
3.5.7. #pragma MCPP debug memory, #debug memory +
3.5.8. #pragma MCPP debug macro_call
+
3.6. #assert, #asm, #endasm +
3.7. C99 �ο���ǽ��_Pragma() �黻�ҡ����Ѱ����ޥ������� +
3.8. �����Ϥ��Ȥ��ü�ʻ��� +
3.8.1. GCC, Visual C �β��Ѱ����ޥ��� +
3.8.2. GCC �� 'defined' ��� +
3.8.3. Borland C �� asm ʸ����¾���ü�ʹ�ʸ +
3.8.4. #import ����¾
+
3.9. GCC ������� 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.5.1. mcpp �Υ������˥󥰤���������ˤ�
+
3.9.6. GCC 3.2 �������Υץ�ץ����� +
3.9.7. GCC 3, 4 �� mcpp ��Ȥ��ˤ� +
3.9.8. Linux / glibc 2.4 �������Υץ�ץ����� +
3.9.9. Linux �� stddef.h, limits.h, #include_next ������ +
3.9.10. Mac OS X / Apple-GCC �ȥ����ƥ�إå������� +
3.9.11. firefox 3.0b3pre �������Υץ�ץ�����
+
3.10. Visual C++ �Υ����ƥ�إå������� +
3.10.1. �����Ȥ���������ޥ��� ? +
3.10.2. Identifier ��� '$'
+
+
4. ������������ +
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. ���ǥ�å����� +
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. ����

+

mcpp �� Martin Minow �� DECUS cpp �򸵤� kmatsui�ʾ��� ��ˤ�����Ū�˽�ľ�����åץ�ץ����å��Ǥ���mcpp �Ȥ���̾���� Matsui cpp �Ȥ�����̣�Ǥ�������ϥ��������󶡤����Τǡ��ƽ����ϤǻȤ��ˤϤ��ν����Ϥ˹�碌�ƥ������˼㴳���ѹ���ä�����ǥ���ѥ��뤷�� mcpp �μ¹ԥץ���������ɬ�פ�����ޤ���*1

+

���Υޥ˥奢��Ǥϡ����Ǥ�����ν����Ϥ˰ܿ����줿�¹ԥץ������λ��ͤ��������Ƥ��ޤ�������˾ܺ٤��Τꤿ���͡����������鲿�餫�ν����Ϥ˰ܿ����Ƥߤ����ͤϡ��������� mcpp-porting.html �Ȥ����ɥ�����Ȥ򻲾Ȥ��Ƥ���������
+�����Υ��������ɥ�����ȤϤ��٤ƥ����ץ󥽡��������եȥ������Ȥ����󶡤��ޤ���
+�ޥ˥奢������Ƥ��������ˡ��ޤ� mcpp ����ħ��Ҳ𤷤Ƥ����ޤ���

+

��:

+

*1 mcpp V.2.6.3 ����ϡ�����ѥ��뤺�ߤβ����फ�ΥХ��ʥꡦ�ѥå������⼡�Υ����Ȥ��󶡤���褦�ˤ�����

+
+

http://mcpp.sourceforge.net/

+
+
+ +

1.1. �ϣӤ�����Ϥ����Фʤ� portable �ʥ�����

+

Linux, FreeBSD, Windows ����¿���ΣϣӤ򥵥ݡ��Ȥ��Ƥ��� portable �ʥץ�ץ����å��Ǥ��ꡢ���Υ������� Standard C (ANSI/ISO/JIS C) �ν����Ϥޤ��� Standard C++ �ν����ϤǤ�������Х���ѥ���Ǥ��빭�� portability ����äƤ��ޤ����饤�֥��ؿ��ϸ�ŵŪ�ʤ�Τ����ȤäƤ��ޤ���
+�ƽ����Ϥ˰ܿ����뤿��ˤϡ�¿���ξ�硢�إå��ե�������Τ����Ĥ��Υޥ����������ؤ��ƥ���ѥ��뤹������Ǥ��ߤޤ����ǰ��ξ��Ǥ⥽�����ե�����˿����Խ�­�����٤Ǥ���

+

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 3.*, 4.* / cc1 ����٤�ȣ��ܤ��飳�ܤλ��֤�������ޤ�����������Borland C 5.5 / cpp ��Ʊ�����餤��®�٤ǡ��إå��ե������ pre-preprocess �ε�ǽ��Ȥ��Ȥ⤦����®���ʤ�Τǡ��ä��٤��ۤ��ǤϤ���ޤ������ΤǤ��뤳�ȡ�portable �ʥ������Ǥ��뤳�ȡ����ʤ�����Ǥ�ư��뤳�����Τ���ˤϡ��������٤ν������֤Ϥ��򤨤ʤ��ȹͤ��Ƥ��ޤ���

+

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

+

mcpp �� V.2.3 �γ�ȯ������ǡ����ڥ��å� V.1.3 �ȤȤ�ˡ����������ʵ���(IPA) ��ʿ������ǯ�١�̤Ƨ���եȥ�������¤���ȡפ˿��� ͵���ץ��������ȥޥ͡�����ˤ�äƺ��򤵤졢2002/07 - 2003/02 �δ֤� IPA �λ�����ȿ����Уͤν����Τ�Ȥ˳�ȯ���ʤ���ޤ������Ѹ��ǥɥ�����Ȥ⤳�Υץ��������Ȥ���ǡ�ͭ�²�ҡ��ϥ�������������������������˻䤬�����ȥƥ�����������ä��ƤǤ������ä���ΤǤ���*2
+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 ��̤Ƨ���եȥ�������¤���ȡ�(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/

+
+

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

+
+

+http://www.vector.co.jp/soft/dos/prog/se081188.html
+http://www.vector.co.jp/soft/dos/prog/se081189.html
+http://www.vector.co.jp/soft/dos/prog/se081186.html
+

+

�����Υ��������֥ե�������Υƥ����ȥե�����ϡ�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 �ǤΣ�����Υ��������֥ե�������֤��褦�ˤ�����

+
+ +

1.3. ���Υޥ˥奢���ɽ��ˡ

+

���Υޥ˥奢��Ϥ��ĤƤϥƥ����ȥե�����Ǥ�������V.2.6.2 ����� html �ե�������Ѥ��ޤ�����
+���Υޥ˥奢��Ǥϼ��Τ褦�˥ե���Ȥ�Ȥ�ʬ���Ƥ��ޤ���

+ +
+ +

2. ��ư���Υ��ץ����ȴĶ�����

+ +

2.1. mcpp �¹ԥץ������Σ�����Υӥ�ɤȣ��Ĥ�ư��⡼��

+

mcpp �ˤϡ��ɤν����ϡʥ���ѥ���ˤ������Ω����ñ�Ȥ�ư�� compiler-independent-build �ȡ�����ν����ϤΥץ�ץ����å��˼�ä����ä�ư������������ build (compiler-specific-build) �Ȥ�����ޤ������Ԥϥץ�ץ����������򤹤뤿��Τ�Τǡ����ν��Ϥ򲿤餫�Υ���ѥ����Ϳ���Ƥ�����������ѥ��뤵���Ȥϸ¤�ޤ��󡣸�Ԥ�����ν����Ϥǥ���ѥ���ȥ�󥯤ޤǹԤ�����Τ�Τǡ�mcpp �ν��ϤϤ��Υ���ѥ���λ��ͤ˹�碌�Ƥ���ޤ���*1, *2

+

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

+

Compiler-independent �ǤǤ�����������ǤǤ⡢mcpp �ˤϤ����Ĥ���ư��⡼�ɤ����ꡢ���줾��ۤʤ�ץ�ץ��������ͤ�ư��ޤ����⡼�ɤˤϼ��Σ��Ĥ���ޤ���

+ +

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

+ +

STD, COMPAT, POSTSTD ���碌�� Standard �⡼�ɡ�KR �� OLDPREP ���碌�� pre-Standard �⡼�ɤȸƤ֤��Ȥˤ��ޤ����ޤ���COMPAT �� STD �ȤۤȤ��Ʊ���ʤΤǡ��ä��Ǥ�ʤ��¤� STD �ˤ� COMPAT ��ޤᡢɬ�פʾ����� COMPAT �˸��ڤ��ޤ���*3

+

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

+

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

+

������ tokenization�ʥȡ�����ʬ�䡢�ȡ�������ڤ�Ф��ˤ�⡼�ɤˤ�ä���̯�˰㤤�ޤ���
+Standard �⡼�� �Ǥϡ�token base �Ǥ�ư��פȤ�����������¤� tokenization ��Ԥ��ޤ�������Ū�ˤϡ�Standard �⡼�� �Ǥϡ��ޥ�����Ÿ������Ȥ�������� space ���������ơ������ token �Ȥΰտޤ��ʤ�Ϣ�뤬ȯ������Τ��ɤ��ޤ���pre-Standard �⡼�� ������Ū���ص�Ū������Ū�� tokenization �ȡ���character base �ǤΥƥ������ִ��פˤ��ޥ���Ÿ����ˡ�κ��פ�Ĥ��Ƥ��ޤ������������ˤĤ��Ƥϡ� cpp-test.html#2 ��������������
+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 �⡼�ɤȤΰ㤤�ϼ��Τ褦�ʤ�ΤǤ���

+ +

�ʤ������Τۤ� lang-asm �⡼�ɤȤ�����Τ⤢��ޤ��� +����ϥ�����֥饽������ C �Υ����ȡ��ǥ��쥯�ƥ��֡��ޥ������������줿��§Ū�ʥ��������������⡼�ɤǤ��� +POST_STD �Ϥ��Υ⡼�ɤˤʤ뤳�ȤϤǤ��ޤ��󤬡�����ʳ��Υ⡼�ɤϰ���Υ��ץ�������ꤹ�뤳�ȤǤ��Υ⡼�ɤˤʤ�ޤ��� +���λ��ͤˤĤ��Ƥ� 2.5 �򸫤Ƥ���������

+

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

+

��:

+

*1 ���Τۤ� subroutine-build �Ȥ�����Τ⤢�롣���餫��¾�Υᥤ��ץ�����फ�� mcpp �����֥롼����Ȥ��ƸƤӽФ�����ΤǤ��롣�����������λ��ͤ� mcpp �򥳥�ѥ��뤷����������ˤ�ä� compiler-specific-build �ޤ��� compiler-independent-build �Τɤ��餫��Ʊ���ˤʤ�Τǡ����Υޥ˥奢��Ǥ��äˤȤꤢ���ʤ��� +Subroutine-build �ˤĤ��Ƥ� mcpp-porting.html#3.12 �򻲾ȤΤ��ȡ�

+

*2 SourceForge �Υ����Ȥ��󶡤���Х��ʥꡦ�ѥå������Ϥ��٤� compiler-independent-build �Ǥ��롣

+

*3 V.2.5 �ޤǤ� Standard �⡼�ɤ� pre-Standard �⡼�ɤȤǼ¹ԥץ�����ब�̤ˤʤäƤ�������V.2.6 ���飱�Ĥ����礵�줿��

+

*4 ����� 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 ���ץ���󤬻��ꤵ��ʤ��¤��ɸ�२�顼���Ϥ˽��Ϥ��ޤ���
+�����Τɤ줫�Υե����뤬�����ץ�Ǥ��ʤ����ϡ����顼��å�������Ф��ƽ�λ���ޤ���

+

������ɬ�פȤ��륪�ץ����˰������ʤ����ϥ��顼�Ȥʤ�ޤ���-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 ��ư��⡼�ɤ�����Ϥˤ��ʤ����̤Υ��ץ����ϼ����̤�Ǥ���

+ +

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

+ +

��:

+

*1 GCC �Ȱ㤦�Τϼ������Ǥ��롣

+
    +
  1. -MG ���ץ����Ϥʤ������ץ�������λ�����ʣ�������뤫��Ǥ���ʤ������äơ��ɤ��������ͤ���������ά�ˡ� +��������-M ���ץ����Ǥ⡢���󥯥롼�ɥե����뤬���Ĥ���ʤ����ϥ��顼�ˤϤʤ뤬����¸�ط��ԤϽ��Ϥ����Τǡ���������ѤǤ��롣
    +
  2. GCC-specific-build �� GCC �˹�碌�Ƥ��뤬������ʳ��Ǥϡ�-MM, -MMD ���ץ����ǽ��������إå����ϰϤ�������
    +
+
+ +

2.4. mcpp �Υ⡼�ɤˤ�륪�ץ����

+

mcpp �ˤϤ����Ĥ���ư��⡼�ɤ�����ޤ������λ��ͤ� 2.1 �򻲾Ȥ��Ƥ��������� +
+���Υޥ˥奢��ǤϳƼ�Υ⡼�ɤλ��ͤ��¤٤Ƶ��ܤ���Ƥ���Τǡ��������ˤ����ʤäƤ��ޤ��������ޤ󤷤Ƥ����������ޤ����ʲ��������ǽФƤ��� DIGRAPHS_INIT, TRUE, FALSE, etc. ����ʸ��̾��__ �ǻϤޤ�ʤ���Ρˤ� italic ��ɽ������Ƥ����ΤϤ��٤� system.H ����������ޥ����Ǥ��������Υޥ����Ϥ����ޤǤ� mcpp ���Ȥ򥳥�ѥ��뤹����˻Ȥ�������ǡ��Ǥ������ä� mcpp �¹ԥץ������ˤϤ����Υޥ����ϻĤäƤϤ��ޤ��󡣴��㤤���ʤ��褦�ˤ��Ƥ���������

+

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

+ +

STD �⡼�ɤǤϼ��Υ��ץ���󤬻Ȥ��ޤ���

+ +

��:

+

*1 C++ �� __STDC__ ���������Ƥ���Τϥȥ�֥�θ��Ǥ��ꡢ�ɤ����ͤǤϤʤ���GCC �Υɥ�����Ȥˤ��ȡ��إå��ե������¿���� __STDC__ ���������Ƥ��뤳�Ȥ���Ԥ��Ƥ���Τǡ�C++ �Ǥ⤳���������Ƥ���ɬ�פ����롢�ȤΤ��ȤǤ��롣������������ϥإå��ե�����ν����������ȸ��虜��򤨤ʤ���C90, C99, C++ �˶��̤���ʬ�ˤϡ�#if __STDC__ || __cplusplus �Ƚ񤯤٤��ʤΤǤ��롣

+

*2 C++ Standard �Ǥ� C99 �Ȱ�äơ�UCN ���硹Ū�ʰ���������Ƥ��ꡢ����Ⱦü�ʼ����ϤǤ��ʤ���C 1997/11 draft �Ǥ⤽���Ǥ��ä�����������Unicode �򤽤��ޤ�Ƴ�����뤳�Ȥˤϡ���������ô���礭�����뤳���������꤬���äƵ��������Ǥ��롣

+

*3 // �� C90��Standard �⡼�ɤξ��ˤǤ⥳���ȤȤ��ư��������������˥󥰤�Ф���

+

*4 ����� GCC �Ȥθߴ����Τ���Ǥ��롣

+

*5 GCC-specific-build �� mcpp �򥤥󥹥ȡ��뤹��ȡ�mcpp �ˤ��ץ�ץ��������Ϥ� cc1 (cc1plus) �� -fpreprocessed �Ȥ������ץ������դ����Ϥ����褦�ˤʤ롣 +���Υ��ץ��������Ϥ��ץ�ץ��������ߤǤ��뤳�Ȥ� cc1 ���������ΤǤ��뤬������Ǥ⥳���ȤϽ�������롣 +�������äơ�-K ���ץ����η�̤� cc1 �� -fpreprocessed ���ץ������դ����Ϥ��ƺ����٤��ʤ��� +�ޤ���gcc (g++) ���ޥ�ɤ� -save-temps �Ȥ������ץ������դ���ȡ��ץ�ץ�������̤� *.i (*.ii) �ե����뤬�Ĥ����Τǡ������ refactoring tool �ǽ������뤳�Ȥ��Ǥ��롣

+

*6 -x assembler-with-cpp ���ץ����Ǥ� C/C++ �Υ������ǤϤʤ� GCC �Ѥ� *.S �ե����뤬�������ե�����Ȥ��ƻȤ��뤬������ *.S �ե�����Υץ�ץ������Ǥϡ�-K ���ץ�����Ȥäƥ����Ȥ���������ȥ������֤�����뤿�ᡢ������֥�Ǥ��ʤ��ʤ뤫��Ǥ��롣 +�ޤ���-C ���ץ����ˤ�륳���Ȥ� -K ���ץ������������줿�����Ȥ�ʶ��路�����Ȥ�����Τǡ�Ʊ���ˤϻȤ��ʤ���

+

*7 ���Υ��ץ�����ȤäƤ⡢�ü�ʾ��ˤ����Τ��б����ݻ�����ʤ����Ȥ����롣 +<backslash><newline> �ˤ���Ϣ��ȹԤ�ޤ��������Ȥˤ���Ϣ�뤬Ϣ³������䡢�����Ȥ� 256 �԰ʾ�³�����ʤɤǤ��롣 +�ʤ������Υ��ץ�������ꤷ�Ƥ⤷�ʤ��Ƥ⡢'\v', '\f' �� space ���Ѵ�����롣

+
+ +

2.5. ����ν����ϰʳ��ν����Ϥ˶��̤Υ��ץ����

+

UNIX �ϤΥ����ƥ�Ǥϼ��Σ��ĤΥ��ץ���󤬻Ȥ��ޤ��� +��������Ω�ǡ�GCC �����Ǥ˶��̤Ǥ��� +��������GCC �����ǤǤ� GCC ���б����Ƥ��ʤ��ȥ��顼�ˤʤ�ޤ���

+ + +

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

+ +
+ +

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 ������ν����Ϥ��ȤΥ��ץ����ϰʲ����̤�Ǥ���Compiler-independent �ǤˤϤ�����󤳤��Υ��ץ����Ϥ���ޤ���

+

LCC-Win32 �ǤǤϼ��Υ��ץ���󤬻Ȥ��ޤ���

+ +

Visual C �ǤǤϼ��Υ��ץ���󤬻Ȥ��ޤ��� +

+ + +

Mac OS X ��� mcpp �Ǥ� GCC-specific-build �Ǥ� compiler-independent-build �Ǥ⡢���Υ��ץ���󤬻Ȥ��ޤ���

+ +

Mac OS X ��� GCC-specific-build �Ǥϼ��Υ��ץ���󤬻Ȥ��ޤ���

+ +

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

+

�ޤ���mcpp �Υ⡼�ɤˤ��ʤ����ץ����ϼ��ΤȤ���Ǥ���

+ +

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

+ +

GCC �Ǥ� STD �⡼�ɤǤϼ��Υ��ץ���󤬻Ȥ��ޤ���

+ +

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

+ +

CygWIN / GCC �ǤǤϼ��Υ��ץ���󤬻Ȥ��ޤ��� +

+ +

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

+ +

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

+ +

��:

+

*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 �⸫�ݤ��뤫��Ǥ��롣
    +
+

*5 3.9.6.3 �򻲾ȤΤ��ȡ�

+
+ +

2.7. �Ķ��ѿ�

+

Compiler-independent �Ǥ� mcpp �Ǥ� include �ǥ��쥯�ȥ�� UNIX �� OS �Ǥ� /usr/include, /usr/local/include �ʳ��ϥǥե���ȤǤ����ꤵ��Ƥ��ʤ��Τǡ�¾�Υǥ��쥯�ȥ��ɬ�פǤ���С��Ķ��ѿ���¹Ի����ץ����ǻ��ꤷ�ʤ���Фʤ�ޤ���Compiler-independent �ǤδĶ��ѿ��� C �Ǥ� INCLUDE��C++ �Ǥ� CPLUS_INCLUDE �Ǥ����ե�����Υ������ϥǥե���ȤǤϥ������ե�����Τ���ǥ��쥯�ȥ����Ȥ��ޤ��� 4.2 �򻲾ȤΤ��ȡˡ���������Linux �Ǥ� include �ǥ��쥯�ȥ�˺��𤬤���Τǡ����̤��к���ɬ�פǤ�������ˤĤ��Ƥ� 3.9.9 �򻲾Ȥ��Ƥ���������

+

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-JP1iso2022jp, 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-JISjapanese, 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 �� shift-JIS, ISO2022JP, BIG-FIVE �Τ褦�� multi-byte character �� 0x5c ���ͤ���ĥХ��Ȥ�ޤ� encoding �Ϥ��ޤ������Ǥ��ʤ���礬����Τǡ�GCC �ǤǤ� mcpp ��������䤤�ޤ���*1

+

��:

+

*1 GCC �� configure ������� --enable-c-mbchar �Ȥ������ץ������դ���ȡ����� GCC �ǤϴĶ��ѿ� LANG �� C-EUCJP, C-SJIS, C-JIS �Τɤ줫�˥��åȤ��뤳�Ȥˤ�ä� encoding �����Ǥ��뤳�ȤˤʤäƤ��롣 +������������ configuration �� 1998 ���餢���ΤΤ褦�Ǥ��뤬���ºݤˤϻȤ��Ƥ��餺���ȤäƤ�������ư��ʤ��� +GCC �Ǥ� mcpp �ǤϤ���� LANG=C-SJIS ���δĶ��ѿ��򥵥ݡ��Ȥ��Ƥ�������V.2.7 ���ѻߤ�����
+GCC �Ǥ� 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 ��Ȥ��ե���������������ΤϤ���˺���Ǥ���

+

�����Ǥ� Windows ��� Visual C++ 2003, 2005, 2008 �� IDE �� mcpp ��Ȥ���ˡ���������ޤ���Borland C �Ǥ� LCC-Win32 �Ǥϡ����ޥ�ɥ饤��ǻȤäƤ���������

+

�ޤ���Mac OS X �� Xcode.app / Apple-GCC �� mcpp ��Ȥ���ˡ���������ޤ���

+ +

2.10.1. Visual C++ �� IDE �� mcpp ��Ȥ���ˡ

+

Visual C++ �� IDE ������Ū�ʥ��󥿥ե���������������Ƥ��餺�������⥳��ѥ��餬���ѥ�����ѥ���ʤΤǡ��̾�Ρ֥ץ��������ȡפǤ� mcpp ��Ȥ����Ȥ��Ǥ��ޤ��󡣤�������mcpp ��Ȥ� makefile ��񤤤Ƥ����С�����������ǡ֥ᥤ���ե�����ץ��������ȡפ�������뤳�Ȥ��Ǥ��ޤ��������ơ����������Խ��両���䡢����˥�������٥�ǥХå���ǽ��ޤ� IDE ����Ⱦ�ε�ǽ��Ȥ����Ȥ��Ǥ��ޤ���

+

�֥ᥤ���ե�����ץ��������ȡפ���ˤϼ��Τ褦�ˤ��ޤ���������ˡ�� ��Visual C++ .net 2003 �ɥ�����ȡפ���ӡ�Visual C++ 2005 Express Edition�ס�Visual C++ 2008 Express Edition�פΡ֥إ�ספΡ֥ᥤ���ե�����ץ��������Ȥκ����פ˽񤤤Ƥ����ΤǤ���

+
    +
  1. IDE �ΥǥХå���ǽ��Ȥ����¤���ĥ桼���Ȥ��ƥ������󤹤롣*1
    +
  2. mcpp ��Ȥ� makefile ��񤤤Ƥ�����noconfig/visualc.mak �򻲾ȡˡ�*2
    +
  3. Visual Studio ��ư���롣*3
    +
  4. �ֿ������ץ��������ȡפ򥯥�å����� +���줿�ֿ������ץ��������ȡפΥ�����ɥ��ǡ֥ᥤ���ե����� �ץ��������ȡפ����ӡ��֥ץ���������̾�פȡ־��פ���ꤷ�ơ�OK�פ򥯥�å����롣
    +
  5. ����ȡ��֥ᥤ���ե����� ���ץꥱ������� ���������ɡפΥ�����ɥ��������Τǡ��֥��ץꥱ������������פ򥯥�å����������ǡ֥ӥ�ɥ��ޥ�ɥ饤��סֽ��ϡס֥��꡼�󥳥ޥ�ɡסʤޤ��ϡ־õ�ޥ�ɡסˡ֥�ӥ�ɥ��ޥ�ɡפ�������Ϥ��롣�������Ѹ�Ϥ狼��ˤ�������mcpp ���Ȥ� compiler-independent �ǤΥ���ѥ������ˤȤ�ȼ��Τ褦�ʤ��ȤǤ������������ 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 ��񤤤Ƥ���ɬ�פ����롣*4
    +mcpp �򥳥�ѥ��뤹��ΤǤʤ���С��֥ӥ�ɥ��ޥ�ɥ饤��פȡ֥�ӥ�ɥ��ޥ�ɡפȤ��̾��Ʊ����ɤ���
    +���������Ϥ����顢�ִ�λ�פ򥯥�å����롣
    +
  6. ����ȡ� +�֥���塼����󥨥����ץ�����פ˥ץ��������Ȥ������Τǡ����Ρ֥������ե�����פȤ����ե�����򥯥�å����ơ������ơ���˥塼�Ρ֥ץ��������ȡפ���ִ�¸���ܤ��ɲáפ����ӡ��������ե�����򤹤٤����򤷤ơ�OK�פ��롣����ȡ��֥���塼����󥨥����ץ�����פ˥������ե�����̾������롣
    +
+

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

+

��:

+

*1 VC 2003, 2005 �ǥǥХå���ǽ��Ȥ�����ˤϡ�WindowsXP Pro, Windows2000 �Ǥ� "Debugger users" �Ȥ������롼�פ˥桼�����°������ɬ�פ����롣WindowsXP HE �ǤϤ����������롼�פϤʤ��Τǡ������ԤȤ��ƥ������󤷤ʤ���Фʤ�ʤ���
+VC 2008 �Ǥϥ桼�����롼�פ����¤Ϥʤ��ʤä���

+

*2 ��������٥롦�ǥХå���ǽ��Ȥ�����ˤ� cl.exe �θƤӽФ��� -Zi ���ץ������ղä��ơ��ǥХå��������������褦�� makefile ��񤤤Ƥ���ɬ�פ����롣

+

*3 �֥������ȡ�->�֥ץ������פ��鵯ư����ȡ����󥯥롼�ɥǥ��쥯�ȥ����δĶ��ѿ������ꤵ��ʤ�����������ꤹ��ˤ���ˡ�Visual Studio ���ޥ�ɥץ���ץȡפ򳫤��ơ��������ե�����Τ���ǥ��쥯�ȥ�˰�ư������������ VC 2003 �Ǥ�

+
+devenv *.sln /useenv
+
+

�Ȥ��ơ�VC 2005, 2008 express edition �Ǥ�

+
+vcexpress *.sln /useenv
+
+

�Ȥ��Ƶ�ư���ʤ���Фʤ�ʤ���

+

*4 ���󥹥ȡ��뤹��ǥ��쥯�ȥ�ˤϥ桼�����񤭹��ߤθ��¤���äƤ��ʤ���Фʤ�ʤ��� +�����Ϥ� bin, lib ���Υǥ��쥯�ȥ�˽񤭹�����ϡ����Υѡ��ߥå���������Ը��¤��ѹ����Ƥ���ɬ�פ����롣 +"Power users" �ޤ��� "Authenticated users" �Ȥ������롼�פ˥桼������Ͽ�������Υ��롼�פ˳����Υǥ��쥯�ȥ�ؤΡֽ񤭹��ߡס��ѹ��פθ��¤��������Τ��ɤ��� +�⤦���Ĥ���ˡ�ϡ��ֶ�ͭ�ǥ��쥯�ȥ�פΤ褦�ʡ��桼�����񤭹��߸��¤���ĥǥ��쥯�ȥ�˽����Ϥ򥤥󥹥ȡ��뤹�뤳�ȤǤ��롣

+ +

2.10.2. Mac OS X / Xcode.app �� mcpp ��Ȥ���ˡ

+

Mac OS X �� IDE �Ǥ��� Xcode.app �� mcpp �򥤥󥹥ȡ��뤷�����֤�����ʤ��Ȥ����Ȥ��Ǥ��ޤ���*1

+

Xcode.app �Ϥʤ��� /usr/bin �ǤϤʤ� /Developer/usr/bin �ˤ��� gcc (g++) ��Ȥ��ޤ���/Developer �� Xcode �Υǥե���ȤΥ��󥹥ȡ���ǥ��쥯�ȥ�ˡ� +�������äơ�mcpp ��Ȥ��ˤϡ����� gcc (g++) �Ѥ� GCC-specific-build �򥤥󥹥ȡ��뤹��ɬ�פ�����ޤ��� +���Τ���ˤϼ��Τ褦�ˤ��ޤ���${mcpp_dir} �� mcpp �Υ������Τ���ǥ��쥯�ȥ�ˡ�

+
+export PATH=/Developer/usr/bin:$PATH
+configure ${mcpp_dir}/configure --enable-replace-cpp
+make
+sudo make install
+
+

PATH ������ʳ��� /usr/bin �Υ���ѥ���˥��󥹥ȡ��뤹�����Ʊ���ʤΤǡ�����������ѥ���ؤΥ��󥹥ȡ���� universal binary �򥤥󥹥ȡ��뤹����ˡ�ʤɤˤĤ��Ƥϡ�INSTALL-jp �򸫤Ƥ���������

+

�������� mcpp �򥤥󥹥ȡ��뤷�Ƥ����С����Ȥ� mcpp �Τ�������̤�����Ϥ����� Xcode.app ���Ȥ��ޤ��� +Xcode.app �� Apple-GCC ��ͭ�� *.hmap �Ȥ���̾���� "header map file" �ʤ��Τ��������ޤ���������� mcpp �ǽ�������ޤ��� +��������mcpp �� precompiled header �ν����Ϥ��ʤ��Τǡ�#include *.pch ���̾�Υإå��ե�����Ȥ����ɤ߹��ޤ�ޤ��� +�ޤ���mcpp �� Objective-C, Objective-C++ �ν����Ϥ��ʤ��Τǡ�*.m, *.mm �Υ������ե�����Υץ�ץ������� mcpp ���̤餺�� cc1obj, cc1objplus ��ľ�ܡ��Ϥ���ޤ���

+

mcpp �ȼ��Υ��ץ�����Ȥ����ϡ�Xcode.app �β��̥ȥåפΥ�˥塼�С��Ρ֥ץ��������ȡפ���֥ץ���������������Խ��פ�����ǥ���å����������Ǹ����ץ��������ȥ��ǥ����Υ�����ɥ��ǡ֥ӥ�ɡץڥ��������ǡ��֤���¾�� C �ե饰�פι��ܤ��Խ����ޤ��� +���ץ����ϼ�����Τ褦�� -Wp, ��³���ƥ���ޤǶ��ڤ�ʤ�����ꤷ�ޤ���

+
+-Wp,-23,-W3
+
+

��:

+

*1 �����Ǽ��夲��Τ� Mac OS X Leopard / Xcode 3.0 �Ǥ��롣

+
+ +

3. ��ĥ��ǽ�ȸߴ���

+

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

+

�ʤ���Standard �⡼�ɤǤ� #pragma �Ԥϸ�§�Ȥ��Ƥ��Τޤ޽��Ϥ��ޤ���mcpp ���Ȥ����������ΤˤĤ��Ƥ�Ʊ�ͤǤ���Ʊ�� #pragma ������ѥ������ΤˤȤäƤ��̣����IJ�ǽ�������뤿��Ǥ���
+��������#pragma MCPP �ǻϤޤ�Ԥ� mcpp ���ѤΤ�ΤʤΤǽ��Ϥ��ޤ���GCC �ǤǤϡ�#pragma GCC �� poison, dependency, system_header �Τɤ줫��³���Ԥ���Ϥ��ޤ��󡣤ޤ���#pragma once, #pragma push_macro, #pragma pop_macro �⥳��ѥ������ΤˤȤäƤ�̵�ѤʤΤǽ��Ϥ��ޤ��� +¾���ǡ�#pragma GCC visibility * �ϥ���ѥ���ȥ�󥫤Τ���Τ�ΤʤΤǡ����Ϥ��ޤ���*1

+

EXPAND_PRAGMA == TRUE �ǥ���ѥ��뤵�줿 mcpp �Ǥ� #pragma �Ԥΰ����ϥޥ���Ÿ�����оݤȤʤ�ޤ��ʼºݤˤ� EXPAND_PRAGMA == TRUE �� Visual C, Borland 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 �Ȥ���̾�����դ�����"__" ����Ƭ���դ��ƥ桼����̾�����֤ȽŤʤ�ʤ��褦�ˤ��Ƥ��ޤ���

+

��

+

*1 mcpp �� GCC-specific-build �Ǥϡ�#pragma GCC �ǻϤޤ� pragma �Τ��� system_header �������ݡ��Ȥ��Ƥ��롣poison, dependency �ϥ��ݡ��Ȥ��ʤ���

+
+ +

3.1. #pragma MCPP put_defines, #pragma MCPP preprocess ��

+

#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 �ϤǤ��̤Τ�ΤȤ��ư����ޤ����ǥ��쥯�ȥ�����Хѥ����Ѵ����Ƶ������ޤ���"foo/../" �Ȥ��ä���Ĺ����ʬ�Ϻ���������������ޤ���UNIX �ϤǤ� symbolic link �ϥ������Ѵ����ޤ����������äơ�Ʊ���ե�����Ǥ��뤫�ɤ����ϳμ¤�Ƚ�ꤵ��ޤ���*1, *2, *3

+

���� #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.html#5.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, __need___FILE ���Υޥ�����������Ƥ� #include <stdio.h> �������Τ��Ӥ� FILE �����������Ƥ椯��礬����ޤ��������Υե�����ˤ� #pragma once �Ͻ񤭹���櫓�ˤϤ����ޤ���*4

+

��:

+

*1 ���������줿��̤� #pragma MCPP debug path �Ǹ��뤳�Ȥ��Ǥ��롣3.5.1 ���ȡ� +#pragma MCPP put_defines ����ǥ�å������Υե�����̾��ɽ���Ǥ⡢���줬�Ȥ��롣
+��������#line �Ԥ� path-list �ϰ��̤ˤ�����������Ƥ���櫓�ǤϤʤ���include directory �����������������֤�ɽ������롣 +��������-K ���ץ����Ǥ�����������ɽ������롣 +���Υ⡼�ɤ����Ѥ���¾�Υġ���ν������Ѱդˤ��뤿��Ǥ��롣

+

*2 CygWIN �Ǥ� /bin �� /usr/bin��/lib �� /usr/lib �Ϥ��줾��Ʊ���ǥ��쥯�ȥ�ǡ�/ �� Windows ����㤨�� C:/dir/cygwin ���Ȥ���� /cygdrive/c/dir/cygwin �⤽���Ʊ���ǥ��쥯�ȥ�Ǥ��뤬��mcpp �ǤϤ����Ϥ��٤�Ʊ���ǥ��쥯�ȥ�Ȥ��ư�����path-list �Ϥ��٤� /cygdrive/c/dir/cygwin/dir-list/file �η����Ѵ����롣

+

*3 MinGW �Ǥ� / �� /usr �Ȥϼºݤˤ�Ʊ���ǥ��쥯�ȥ�ǡ�/ �� 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 �η����Ѵ����롣

+

*4 ���ʤ��Ȥ� Linux / GCC 2.9x, 3.*, 4.* / glibc 2.1, 2.2, 2.3 �ǤϤ����ʤäƤ��롣FreeBSD 4, 5, 6 �Ǥ� glibc �ϻȤ��Ƥ��ʤ��Τǡ���������ʣ���ʥ����ƥ�إå��ˤϤʤäƤ��ʤ���

+ +

3.2.1. �إå��ե������ #pragma once ��񤭹���ġ���

+

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

+

tool/ins_once.c �ϸŤ� GCC �Υ����ƥ��ѤǤ���Borland C 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 �ˤϼ��Τ褦�ʥ��ץ���󤬤���ޤ��������ƥ�˹�碌��Ŭ���ʥ��ץ��������򤷤Ƥ���������

+ +

ins_once ��ʣ����¹Ԥ��Ƥ�Ʊ���ե�����˥��֤äƽ񤭹��ळ�ȤϤʤ��褦�ˡ���ñ�ʥ����å��Ϥ��Ƥ��ޤ�������������̩�ʤ�ΤǤϤ���ޤ���

+

���� ins_once �ϴ֤˹�碌�ʤΤǡ�tokenization �ϤۤȤ�ɤ�äƤ��ޤ���FreeBSD 2.0, 2.2.7, Borland C 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 �Ѥ˸¤�ޤ���

+
+#include_next   <header.h>
+
+

�� include directory �򥵡�������ݤˡ����� include ���Υե�����Τ���ǥ��쥯�ȥ�򥹥��åפ��ơ����μ��Υ�������Υǥ��쥯�ȥ꤫�饵������Ϥ�ޤ���

+

CygWIN, MinGW �Ǥϡ��إå�̾����ʸ������ʸ���ζ��̤�̵�뤷�ޤ���

+
+#pragma MCPP warning    any message
+
+#warning    any message
+
+

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

+
+ +

3.4. #pragma MCPP push_macro, #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 �Ǥ�Ʊ��̾���Υޥ����򲿽Ťˤ� push ���뤳�Ȥ��Ǥ��ޤ���

+

#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 macro_call �ǤϾ���ϥ����Ȥ�������ǽ��Ϥ����Τǡ������ƥץ�ץ��������ƥ���ѥ��뤹�뤳�Ȥ��Ǥ��ޤ���

+

�ץ�ץ������η�̤˵��䤬�����硢������ʬ��

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

�Ȥ����դ��ˤϤ���ǻȤ��ޤ��� +

+

����� mcpp ���ȤΥǥХå��ѤΤ�ΤǤ������ץ�ץ������β�����ȥ졼�����������˻Ȥ��ޤ����������Ū����Ū�ʤΤǡ��������򸫤ʤ�������Ǥ��ʤ��Ȥ����⤢�ꡢ�������뤵���⤢��ޤ��������ޤ󤷤Ƥ���������

+

<arg> �μ���ϼ����̤�Ǥ���

+
+ + + + + + + + + +
path include �ե�����Υ������ѥ���ɽ������
token token �򣱤Ĥ����ڤ�ʬ���ơ����μ����ɽ������
expand �ޥ����ƤӽФ���Ÿ��������ȥ졼������
macro_call�ޥ����������ӥޥ����ƤӽФ��˺ݤ��ơ����Υ�������ιԤȥ������֤򥳥��Ȥ�������ǽ��Ϥ���
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 �������ϡ����λݤ�ɽ�����ޤ���
+�ޤ���mcpp �� path-list ��� "foo/../" �Ȥ��ä���Ĺ����ʬ�����������������ޤ��������η�̡����� path-list �Ȱ�ä� path-list �Ȥʤä����ϡ����λݤ�ɽ�����ޤ���
+UNIX �ϤΥ����ƥ�Ǥ� mcpp �� symbolic link �� link ����Ѵ����ޤ��������ξ��⤽�λݤ�ɽ�����ޤ���

+ +

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
(NUM) preprocessing-number
(OPE) operator or punctuator
(STR) string literal
(WSTR)wide string literal
(CHR) character constant
(WCHR)wide character constant
(SPE) $, @ �����ü�� pp-token
(SEP) token separator (white space)
+
+

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

+ +

3.5.3. #pragma MCPP debug expand, #debug expand

+

�ޥ����ƤӽФ���Ÿ��������ȥ졼�����ޤ���

+

Standard �⡼�ɤ� #pragma MCPP debug �Ǥϼ����̤�Ǥ���
+�ޥ����ƤӽФ�������ȡ��ޤ����Υޥ����������ɽ������ޤ�������ˡ��������ɤ߹��ޤ졢�ִ��ꥹ����Υѥ�᡼�����֤�������졢�����������褦���������ɽ������ޤ����ޥ���������ͥ��Ȥ���Ƥ���С����줬�缡�����������Ÿ������Ƥ����ޤ���������˥ޥ���������С����β������Ƶ�Ū�ˡʥѥ�᡼���Ȥ��ִ������ˡ˥ȥ졼������ޤ���

+

ɽ���� mcpp ���ȤΤ����Ĥ��δؿ��ؤν�����Τ��Ӥˡ����δؿ�̾�ȤȤ�˹Ԥ��ޤ��������δؿ��ϼ��Τ褦�����򤹤�롼����Ǥ���Standard �⡼�ɤΥ������򻲾Ȥ���ȡ�����ˤ褯����Ǥ��ޤ���

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

�����Τ�����expand_macro �ʳ��ϸߤ��˴��ܺƵ��δط��ˤ���ޤ���

+

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 ����ꤷ���ۤ������狼��䤹���Ǥ��礦��

+

#pragma MCPP debug macro_call �ޤ��� -K ���ץ�������ꤷ�����ϡ�macro notification �������Ȥ˽񤭹��ޤ�ƽ��Ϥ���ޤ�����replace() �ʲ��Υ롼����ǤϤޤ������ȤϽ񤭹��ޤ줺�������फ�� magic character������Ū�ʥ����ɡˤ��񤭹��ޤ줿�������줿�ꤷ�ޤ��� +����ϼ��Τ褦��ɽ������ޤ���

+
+ + + + + +
<MACm> ���ĤΥޥ����ƤӽФ�����˴ޤޤ�� m ���ܤΥޥ����θƤӽФ�
<MAC_END> ľ���� MACm �ǻϤޤ�ޥ����ƤӽФ��ν����
<MACm:ARGn>m ���ܤΥޥ����θƤӽФ���� n ���ܤΰ���
<ARG_END> ľ���� MACm:ARGn �ǻϤޤ�����ν����
+
+

����� -v ���ץ�������ꤷ�����ϡ�MAC_END, ARG_END �ˤĤ��ƤⳫ�ϥޡ�����Ʊ���ֹ椬 symmetrical ��ɽ������ޤ���

+

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_ch() �Ȥ������Х����ɤ߹��ߴؿ����ƤӽФ���뤿�Ӥˡ��ܺ٤ʥǡ�������Ϥ��ޤ�����������Standard �⡼�ɤǤ� pp-token �򥹥���󤹤���ϡ����Σ��Х����ܤ������Υ롼����ϸƤӽФ���ޤ���

+

#debug getc �Ǥ� token �򥹥���󤹤����⤳�Υ롼���󤬸ƤӽФ����Τǡ��Ȥ�Ǥ�ʤ��̤Υǡ������Ǥ��Ф���ޤ���

+

������ˤ��Ƥ⡢����ʥǡ��������Ϥ���ޤ����Ȥ�ɬ�פϤޤ�����ޤ���

+ +

3.5.7. #pragma MCPP debug memory, #debug memory

+

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

+ +

3.5.8. #pragma MCPP debug macro_call

+

Macro notification mode �򳫻Ϥ��ޤ��� +���Υ⡼�ɤǤϡ��ޥ������������뤿�Ӥˡ��ޤ��ޥ�����Ÿ������뤿�Ӥˡ����Υ�������ιԤȥ������֤������Ȥ������ޤ�ƽ��Ϥ���ޤ��� +�ޥ�������������ľ��ϡ��ư����ˤĤ��Ƥ⤽�ΰ��֤���𤵤�ޤ��� +���������ޥ���Ÿ���ˤ�äƥȡ�����Ϣ�뤵�줿���ϡ�Ϣ�����Υȡ�����˴ؤ���ޥ�������ϼ����ޤ���
+����ˡ�#undef, #if (#elif, #ifdef, #ifndef), #endif �ˤĤ��Ƥ⡢��ñ�ʾ��󤬽��Ϥ���ޤ���
+���Υ⡼�ɤ� -K ���ץ����ǻ��ꤹ�뤳�Ȥ�Ǥ��ޤ���

+

���Υ⡼�ɤ� C/C++ �� refactoring tool �Τ���˼������줿��ΤǤ��� +C/C++ �ˤϥץ�ץ������Ȥ����ե������Τ��뤳�Ȥ� refactoring tool �ˤȤäƺ�������������������ޤ��������Υ⡼�ɤ�Ȥ��Хץ�ץ�������ν��Ϥ��饽������ƹ������뤳�Ȥ��Ǥ���Τǡ�tool ��������䤹���ʤ�ޤ���*1

+

#pragma MCPP debug expand �Ȼ��Ƥ��ޤ�����expand �Τۤ��ϥޥ�����Ÿ��������ȥ졼�����뤿��Τ�Τǡ��ܺ٤ʾ��󤬽��Ϥ�����ΤΡ�����򥳥�ѥ��뤹�뤳�ȤϤǤ��ޤ��� +������Ф��ơ�macro_call �ϥ�����������Τʰ��֤������뤿��Τ�Τǡ�����򥳥��Ȥ�������Τǡ����Ϥ򤽤Τޤ޺ƥץ�ץ��������ƥ���ѥ��뤹�뤳�Ȥ��Ǥ���Τ���ħ�Ǥ���

+

��:

+

*1 ���λ��ͤϼ�Ȥ��� Taras Glek ����Ƥˤ���ΤǤ��롣 +�༫�Ȥϼ��ΤȤ����� mozilla �Υ������� refactoring �˼���Ȥ�Ǥ��롣

+

http://blog.mozilla.com/tglek/

+ +

3.5.8.1. #define �˴ؤ��륳����

+

�㤨�С�����������Ƭ�˼��Τ褦�ʥޥ������������ȡ�

+
+#define NULL 0L
+#define BAR(x, y) x ## y
+#define BAZ(a, b) a + b
+
+

���Τ褦�ʥ����Ȥ����Ϥ���ޤ���

+
+/*mNULL 1:9-1:16*/
+/*mBAR 2:9-2:25*/
+/*mBAZ 3:9-3:24*/
+
+

���Υե����ޥåȤ�

+/*m[NAME] [start line]:[start column]-[end line]:[end column]*/ +

���̣���ޤ��� +�Ԥȥ����ϤȤ�� 1 ����Ϥޤ�ޤ��� +-K ���ץ�������ꤷ�����ϻ�������ޥ�������Ϥ���ޤ�������������ޥ����ˤϰ��־���Ϥ���ޤ���

+ + +

3.5.8.2. #undef �˴ؤ��륳����

+
+#undef  BAZ
+
+

�Ȥ����ԤǤϡ����Τ褦�ʥ����Ȥ����Ϥ���ޤ���

+
+/*undef 10*//*BAZ*/
+
+

/*undef [lnum]*//*[NAME]*/ �Ȥ����ե����ޥåȤǡ�[lnum] �Ϥ��ιԤι��ֹ��[NAME] �Ϥ��Υޥ���̾�򼨤��ޤ���

+ +

3.5.8.3. �ޥ���Ÿ���˴ؤ��륳����

+

�ޥ������ƤӽФ���뤿�Ӥˡ�����򶴤�Ǥ��γ��ϤȽ�λ�򼨤��ޡ��������Ϥ���ޤ��� +���Υޡ����Υե����ޥåȤ� HTML �˻����ͥ��Ȳ�ǽ�ʤ�Τǡ�/*<...*/ ���ޥ���Ÿ���γ��Ϥ򼨤���/*>*/ �����ν�λ�򼨤��ޤ��� +�ޥ������ϤΥե����ޥåȤϥޥ�������Υե����ޥåȤ� /*m �� /*< ���Ѥ������η���Ȥ�ޤ���

+/*<[NAME] [start line]:[start column]-[end line]:[end column]*/ +

�ޥ�����������Ȥ���ϡ���������ΰ����ΰ��֤򼨤��ޡ����ȡ�������Ÿ���γ��ϤȽ�λ�򼨤��ޡ�������Ϥ���ޤ��� +�����ΰ��֤򼨤��ե����ޥåȤ� /*!...*/ �Ȥ������򤷤Ƥ��ޤ��� +������˥ޥ�����������ϡ��Ƶ�Ū�ˤ��Υޥ����ξ��󤬽��Ϥ���ޤ��� +�����������Υޥ�������������ˤ��ä���ΤǤʤ���С����־���Ͻ��Ϥ���ޤ��� +�ɤΥޥ����β����ܤΰ����Ǥ��뤫�򼨤�����ˡ������� id �����η��Ǽ�����ޤ���

+[func-like-macro-name]:[nesting level]-[argument number] +

����ˤ�ä� BAZ(BAZ(a,b), c) �Ȥ��ä��ͥ��Ȥ��줿Ʊ̾�Υޥ����Ȥ��ΰ�����ߤ��˶��̤��뤳�Ȥ��Ǥ��ޤ��� +�������ֹ�� 0 ����Ϥޤ�ޤ��� +�����ơ�����˼��η��ΰ��־���³���ޤ���

+[start line]:[start column]-[end line]:[end column] +

�ޤ���������Ÿ���γ��Ϥ򼨤��ޡ����ϼ��η��Ǥ���

+/*<[func-like-macro-name]:[nesting level]-[argument number]*/ +

������Ÿ���ν�λ�򼨤��ޡ����ϥޥ���Ÿ���ν����Υޡ�����Ʊ�� /*>*/ �Ǥ���

+

���ʤ�������Υ�������

+
+foo(NULL);
+foo(BAR(some_, var));
+foo = BAZ(NULL, 2);
+bar = BAZ(BAZ(a,b), c);
+
+

���Τ褦�ʷ�̤���Ϥ��ޤ���

+
+foo(/*<NULL 4:5-4:9*/0L/*>*/);
+foo(/*<BAR 5:5-5:20*//*!BAR:0-0 5:9-5:14*//*!BAR:0-1 5:16-5:19*/some_var/*>*/);
+foo = /*<BAZ 6:7-6:19*//*!BAZ:0-0 6:11-6:15*//*!BAZ:0-1 6:17-6:18*//*<BAZ:0-0*//*<NULL 6:11-6:15*/0L/*>*//*>*/ + /*<BAZ:0-1*/2/*>*//*>*/;
+bar = /*<BAZ 7:7-7:23*//*!BAZ:0-0 7:11-7:19*//*!BAZ:0-1 7:21-7:22*//*<BAZ:0-0*//*<BAZ 7:11-7:19*//*!BAZ:1-0*//*!BAZ:1-1*//*<BAZ:1-0*/a/*>*/ + /*<BAZ:1-1*/b/*>*//*>*//*>*/ + /*<BAZ:0-1*/c/*>*//*>*/;
+
+

����� -v ���ץ���󤬻��ꤵ��Ƥ�����ϡ��ޥ���Ÿ���ν����Υޡ����Ǥ������Ÿ���ν�λ�򼨤��ޡ����Ǥ⡢���ϥޡ����ˤ���Τ�Ʊ���ޥ���̾�Ȱ����� id �����Ϥ���ޤ��� +���ʤ�������Τ褦�ˤʤ�ޤ���

+
+foo(/*<NULL 4:5-4:9*/0L/*NULL>*/);
+foo(/*<BAR 5:5-5:20*//*!BAR:0-0 5:9-5:14*//*!BAR:0-1 5:16-5:19*/some_var/*BAR>*/);
+foo = /*<BAZ 6:7-6:19*//*!BAZ:0-0 6:11-6:15*//*!BAZ:0-1 6:17-6:18*//*<BAZ:0-0*//*<NULL 6:11-6:15*/0L/*NULL>*//*BAZ:0-0>*/ + /*<BAZ:0-1*/2/*BAZ:0-1>*//*BAZ>*/;
+bar = /*<BAZ 7:7-7:23*//*!BAZ:0-0 7:11-7:19*//*!BAZ:0-1 7:21-7:22*//*<BAZ:0-0*//*<BAZ 7:11-7:19*//*!BAZ:1-0*//*!BAZ:1-1*//*<BAZ:1-0*/a/*BAZ:1-0>*/ + /*<BAZ:1-1*/b/*BAZ:1-1>*//*BAZ>*//*BAZ:0-0>*/ + /*<BAZ:0-1*/c/*BAZ:0-1>*//*BAZ>*/;
+
+

������Ǥ�狼��褦�ˡ��ޥ���Ÿ����λ�Υޡ��������Ÿ����λ�Υޡ����⡢���줾�줽�����ˤ���Ǹ��Ʊ���ͥ��ȥ�٥�γ��ϥޡ������б����Ƥ��ޤ��� +�������äơ�-v ���ץ�������ꤷ�ʤ��Ƥ⡢��ưŪ���б��ط���Ƚ�Ǥ��뤳�Ȥ��Ǥ��ޤ���

+ +

3.5.8.4. #if (#elif, #ifdef, #ifndef) �˴ؤ��륳����

+

#if (#elif, #ifdef, #ifndef) �Ԥ˴ؤ��Ƥϡ����ιԤˤ���ޥ������ξ��󤬽��Ϥ���ޤ��� +�㤨�С����Υ������� bar.h �Ȥ���

+
+#define NULL 0L
+#define BAR(x, y) x ## y
+#define BAZ(a, b) a + b
+
+

������� foo.c �Ȥ���ȡ�

+
+#include "bar.h"
+#ifdef  BAR
+#ifndef BAZ
+#if 1 + BAR( 2, 3)
+#endif
+#else
+#if 1
+#endif
+#if BAZ( 1, BAR( 2, 3))
+#undef  BAZ
+#endif
+#endif
+#endif
+
+

foo.c �ϼ��Τ褦�ʷ�̤���Ϥ��ޤ���

+
+#line 1 "/dir/foo.c"
+#line 1 "/dir/bar.h"
+/*mNULL 1:9-1:16*/
+/*mBAR 2:9-2:25*/
+/*mBAZ 3:9-3:24*/
+#line 2 "/dir/foo.c"
+/*ifdef 2*//*BAR*//*i T*/
+/*ifndef 3*//*BAZ*//*i F*/
+
+
+/*else 6:T*/
+/*if 7*//*i T*/
+/*endif 8*/
+/*if 9*//*BAZ*//*BAR*//*i T*/
+/*undef 10*//*BAZ*/
+#line 11 "/dir/foo.c"
+/*endif 11*/
+/*endif 12*/
+/*endif 13*/
+
+

���ʤ�����ޤ� /*if [lnum]*/ �Ȥ����ե����ޥåȤǡ��ǥ��쥯�ƥ���̾��³���Ƹ��ߤι��ֹ椬ɽ������ޤ��� +�����ơ����ιԤ˥ޥ���������С����줬���Ĥ��� /*[NAME]*/ �Ȥ����ե����ޥåȤ�ɽ������ޤ��� +�Ǹ�ˡ�/*i T*/ �ޤ��� /*i F*/ �ǡ����ιԤ�ɾ���� true �Ǥ��뤫 false �Ǥ��뤫�����ʤ������ #if �ǻϤޤ�֥��å�������ѥ��뤵���֥��å��������åפ����֥��å�����������ޤ��� +�Ϥ�ʸ�Ȱ�äơ��ޥ�����Ÿ����̤�ɽ������ޤ��� +#if 1 �Τ褦�˥ޥ����Τʤ��ԤˤĤ��Ƥϡ��ޥ�����ɽ������ /*[NAME]*/ ���ʤ������Ǥ���

+

#elif, #ifdef, #ifndef �ˤĤ��Ƥ�Ʊ�ͤ� /*elif [lnum]*/, /*ifdef [lnum]*/, /*ifndef [lnum]*/ �ǻϤޤꡢ�ޥ������������Ƥ���� /*[NAME]*/ ��³����/*i T*/ �ޤ��� /*i F*/ �ǽ����ޤ���

+

�����åפ����֥��å���Υǥ��쥯�ƥ��֤ˤĤ��Ƥϲ���ɽ������ޤ���

+ +

3.5.8.5. #else, #endif �˴ؤ��륳����

+

#else �ԤǤϾ����Τ褦�ˡ�/*else [lnum]:[C]*/ �Ȥ����ե����ޥåȤǾ���ɽ������ޤ��� +[lnum] �Ϲ��ֹ桢[C] �� T �ޤ��� F �ǡ����� #else - #endif �֥��å�������ѥ��뤵���֥��å�������Ȥ⥹���åפ����֥��å����򼨤��ޤ���

+

#endif �ԤǤϾ����Τ褦�ˡ�/*endif [lnum]*/ �Ȥ����ե����ޥåȤǡ����ߤι��ֹ椬ɽ������ޤ��� +����Ϥ�����󡢤ޤ� #endif ���б��Ť����Ƥ��ʤ��Ǹ�� #if (#ifdef, #ifndef) ���б����ޤ���

+

+ +

3.5.8.6. #line ���

+

�ʤ���macro notification mode �Ǥ� #line �ԤΥե�����̾�ν��Ϥ��ǥե���Ȥξ��Ȱ㤤��#include �Ԥλ���� full-path-list ��������������Τ����Ϥ���ޤ���3.2 ���ȡˡ� +Refactoring tool �κ������ưפˤ��뤿��Ǥ���

+
+ +

3.6. #assert, #asm, #endasm

+

#assert �� pre-Standard �⡼�ɤǤ����Ȥ��ޤ���GCC �ǤǤϼ�������ޤ���Standard C �� #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"
+);
+
+

�Ȥ��ä����ǸƤӽФ��ΤǤ���

+

���Ĺ�������ɤ��Ȥ���ʤ��ȤϤ�äƤ����ʤ��Τǡ� +���ξ��Ϥ�����ʬ���̤δؿ��ˤ��ơ��饤�֥��ؿ���񤯻��Τ褦�ˡ��̤Υե�����ǥ�����֥�ץ�����ऽ�Τ�Τ�񤤤ơ�������֥�ѥ��ǽ�������������󥯤��ƻȤ����Ȥˤʤ�ޤ�������ϵ�������¤Τ褦�˻פ��뤫�⤷��ޤ��󤬡�portable �ʣåץ�������񤯤ˤϥ�����֥����ʬ�ϴ�����ʬΥ����ɬ�פ�����ޤ����顢�ष�� #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, Borland 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, 2008 ���Ȥθߴ����Τ���Ǥ��롣¾�ν����ϤǤ⡢ +C99 �λ��ͤ���˼�������Τ��񤷤��Τǡ�__STDC_VERSION__ �� 199409L ���Ȥ����ޤޤ������������λ��ͤ���������Ƥ椯���Ȥ�ͽ�ۤ���롣

+

*2 C99 �Ǥ� #pragma �ΰ����� STDC �ǻϤޤ���ϥޥ���Ÿ������ʤ����������Ǥʤ����� implementation-defined �Ǥ��롣

+
+ +

3.8. �����Ϥ��Ȥ��ü�ʻ���

+mcpp �� compiler-specific-build �ˤϤ��줾��ν����Ϥ˸�ͭ�λ��ͤ������Ĥ���������Ƥ��ޤ��������Τ����¹Ի����ץ����Ǥ� #pragma �Ǥ�ʤ��ü�ʤ�Τ򤳤�����������ޤ��� + +

3.8.1. GCC, Visual C �β��Ѱ����ޥ���

+

GCC �� V.2 �Τ������� 3.9.1.6 �ˤ���褦���ȼ��λ��ͤβ��Ѱ����ޥ�������äƤ��ޤ��� +����򤳤Υޥ˥奢��Ǥ� GCC2 ���ͤβ��Ѱ����ޥ����ȸƤӤޤ��� +�ޤ� GCC V.3 �Ǥ� 3.9.6.3 �Τ褦�ʿ��������ͤ���������ޤ����� +����򤳤��Ǥ� GCC3 ���ͤβ��Ѱ����ޥ����ȸƤӤޤ��� +GCC 2.95 �Ǥ� C99 ���ͤβ��Ѱ����ޥ������������ޤ�������glibc �� Linux �Υ����ƥ�إå��Ǥ� C99 ���ͤΤ�ΤϤ����� GCC3 ���ͤΤ�Τ����Ȥ�줺�����ޤ��� GCC2 ���ͤ��Ȥ��Ƥ��ޤ���

+

GCC-specific-build �� mcpp �� V.2.6.3 ���� STD �⡼�ɤ˸¤ä� GCC3 ���ͤβ��Ѱ����ޥ������������V.2.7 ����� GCC2 ���ͤΤ�Τ�������ޤ����� +����� Linux ���ǻȤ��ݤ��Լ�ͳ���򤱤뤿��˼���������ΤǤ��� +���������������˥󥰤��Фޤ��� +GCC ���ͤ� portability ���ʤ������Ǥʤ���ʸˡŪ�˱����Τǡ��������񤯥������ǤϻȤ��٤��ǤϤ���ޤ��� +���Ȥ� GCC2 ���ͤ������Ǥ���

+

Visual C �� 2003 �ޤǤϲ��Ѱ����ޥ����ϼ������Ƥ��ޤ���Ǥ�������2005 �Ǽ�������ޤ����� +����� C99 �λ��ͤ� GCC3 ���ͤȻ���������ä�����Τǡ����Ѱ�������ǡ���Ƥ������ϡ�����ľ���Υȡ����󤬥���ޤǤ���Ф���������ޤ��� +��������GCC �Ȱ�ä� '##' �Ȥ�������ϻȤ��ޤ��� +���λ��ͤ� Visual C �Υɥ�����Ȥˤ��ȡ�������Τ褦�ʷ�̤ˤʤ�ޤ��� +���Σ����ܤ���Ǥϥ���ޤϺ�����ʤ��Ȥ���Ƥ��ޤ��� +��������Visual C 2005, 2008 �ϼºݤˤϤ��Υ���ޤ������Ƥ��ޤ��ޤ���

+
+#define EMPTY
+#define VC_VA( format, ...)     printf( format, __VA_ARGS__)
+VC_VA( "var_args: %s %d\n", "Hello", 2005);     /* printf( "var_args: %s %d\n", "Hello", 2005); */
+VC_VA( "absence of var_args:\n");               /* printf( "absence of var_args:\n");   */
+VC_VA( "empty var_args:\n", EMPTY);             /* printf( "empty var_args:\n", );  */  /* trailing comma   */
+
+

mcpp �� V.2.7 ���� Visual C-specific-build �� STD �⡼�ɤˤ��λ��ͤ�������ޤ����� +���������������˥󥰤��Фޤ��� +�嵭�Σ����ܤ���Ǥϥ���ޤϺ�������������̤�˼������Ƥ��ޤ���

+ +

3.8.2. GCC �� 'defined' ���

+

�ޥ������ 'defined' �Ȥ����ȡ����󤬽ФƤ��륱�����Ǥϡ�GCC �Ϥ��Υޥ����� #if �Ԥˤ�����ϡ�¾�ξ��Ȱۤʤä����Ū�ʽ����򤷤ޤ��� +��������ˤĤ��Ƥ� 3.9.4.6 �Ǹ�Ƥ���Ƥ���Τǡ����Ȥ��Ƥ���������

+

mcpp �� GCC-specific-build �� STD �⡼�ɤǤ� V.2.7 ���� GCC ��Ʊ�������򤹤�褦�ˤ��ޤ����� +Linux �ΰ����Υ����ƥ�إå��ʤɤǤ��μ�δְ�ä��ޥ������Ȥ��Ƥ���Τ��н褹�뤿��Ǥ��� +���������������˥󥰤��Фޤ��� +��ʬ�ν񤯥ץ������Ǥ������� #if ����񤯤褦�ˤ��Ƥ���������

+ +

3.8.3. Borland C �� asm ʸ����¾���ü�ʹ�ʸ

+

Borland C �ˤ� asm �Ȥ���������ɤ����äơ�

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

�Ȥ��ä����ǥ�����֥ꥳ���ɤ򵭽Ҥ���褦�ˤʤäƤ��ޤ���������ϣø����ʸˡ����Ϥ��줿�ˤ����§Ū�ʤ�ΤǤ���������ˤ��ޤ��ޥޥ�����Ʊ��̾��������ȡ�����ϥޥ���Ÿ������Ƥ��ޤ��ޤ���Borland C ���Τ�ΤǤ� mcpp �Ǥ⡢��������Ʊ���Ǥ���������֥�ץ��������̤� .asm �ե�����ǽ񤯤Τ������Ǥ��礦�� +mcpp �Ϥ���ˤĤ��Ƥ����̤ʰ����ϲ��⤷�ޤ���

+

Visual C++ �ˤ� __asm �Ȥ���Ʊ�ͤΥ�����ɤ�����ޤ���
+GCC �ˤ� asm( " mov x,4\n") �Ȥ����ޤäȤ��ʷ����Ȥ߹��ߴؿ����Ѱդ���Ƥ��ޤ���

+ +

3.8.4. #import ����¾

+ +

3.8.4.1. Mac OS X / GCC �� #import

+

GCC �ˤ� Objective-C �� #import �Ȥ����ǥ��쥯�ƥ��֤����ꡢC/C++ �Ǥ⤳��� #pragma once ����ۤ�������� #include �Ȥ��ƻȤ��ޤ��� +Mac OS X �� C/C++ �������ˤϻ��ˤ����Ȥ���Τ�����褦�Ǥ���

+

mcpp V.2.7 �ʹߤ� Mac OS X �˸¤äơ�GCC �ǤǤ⥳��ѥ�����Ω�ǤǤ⡢�����������Ƥ��ޤ���

+ +

3.8.4.2. Visual C �� #import, #using

+

Visual C �ˤ� #import �� #using �Ȥ����ü�ʥǥ��쥯�ƥ��֤�����ޤ��� +�ץ�ץ������ǥ��쥯�ƥ��֤η��򤷤Ƥ��ޤ��������Ƥϥ���ѥ���ȥ�󥫤��Ф���ؼ��Ǥ��� +#import �� GCC �Τ�ΤȤϴط�����ޤ���

+

mcpp �� Visual-C-specific-build �Ϥ����ιԤ򤽤Τޤ޽��Ϥ��ޤ���

+
+ +

3.9. GCC ������� GCC �Ȥθߴ���

+

GCC �����Ǥ� mcpp �Ǥϡ�GCC / cpp (cc1) �Ȥθߴ�������Ѿ夢�ޤ����ؤ��ʤ����٤˳��ݤ��Ƥ��ޤ�������ߴ����̤�¿������ޤ���
+�ޤ��¹Ի����ץ����ˤĤ��Ƥϡ�2 �Ϥ˸���褦�ˤ��������㤤������ޤ���-A ���ץ�������ϼ������Ƥ��ޤ��󡣤ޤ����ǥ��쥯�ƥ��֤Ǥ� #assert, #ident ���ϼ������Ƥ��ޤ���*1
+�������������ʤ��Ȥˡ������Τ��Ȥ������ǥ���ѥ���Ǥ��ʤ��Ȥ����������Ϥ������ʤ��褦�Ǥ���

+

�ष���ºݤ�����Ȥʤ�Τϡ��Ť��ץ�ץ����å����ü�ʻ��ͤ򤢤Ƥˤ����������Ǥ���������¿���� GCC �� -pedantic ����ꤹ��ȥ������˥󥰤��Фޤ���mcpp �� Standard �⡼�ɤΤ�ΤǤϥ��顼�����å��򵬳��̤�˼������Ƥ���Τǡ��ۤ� GCC �� -pedantic ���ǥե���ȤȤʤäƤ��ޤ���GCC �ϥǥե���ȤǤϤ����������ʰ�ȿ���������ۤä��̤����ᡢ����򤢤Ƥˤ����������������˸����ޤ������������������򵬳ʤ˹��פ���褦�˽񤯤ΤϤ����ƴ�ñ�ʤ��Ȥǡ��虜�虜���ʰ�ȿ�ν����򤹤�ɬ�����ϲ��⤢��ޤ���ñ�˰ܿ�����»�ʤ������ǡ���������ȥХ��β����Ȥʤ�Τǡ����Ĥ�������ľ���Ƥ����ޤ��礦��*2

+

��:

+

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

+

*2 3.9 ���� 3.9.3 �� 1998 ǯ�˽񤫤줿��ΤǤ��뤬�����θ�Ͼ������Ѥ�äƤ��Ƥ��롣 +�Ť����ͤ˰�¸���륽�����Ͼ��ʤ��ʤꡢ��������ä� GCC �ȼ��γ�ĥ��ǽ������κ����˰�¸�����Τ������Ƥ��Ƥ��롣 +3.9.4 �ʹߡ����Ȥ� 3.9.8 �ʹߤǼ��夲��Τϼ�Ȥ��Ƥ�����������Ǥ��롣 +(2008/03)

+ +

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 �Ǥ��������� violation of constraint �ǡ��ºݤˤϽ����Ϥˤ�äơ����顼�ˤ�����ǽ��������ͭ���Ȥ����Τȡ�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) ���Ƚ񤯤��Ȥˤʤ�ޤ���*1

+
+#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__);
+        }
+
+

��:

+

*1 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_OID �Ȥ����ޥ����Ǥ⡢��Ϥ����������ϥޥ���Ÿ������ʤ��ˡ�����ϥ�������Τޤޤˤ��Ƥ�����������ޤ���*1

+

��:

+

*1 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 �ǤϤʤ�����ˡ�Ȥʤä���ΤǤ������������䤬�̤ΤȤ����������Ƥ���褦�ˡ����λ��ͤ������ޥ���Ÿ����̵�Ѥ�ʣ���ˤ������ʽ�ˤޤǺ����⤿�餷�Ƥ��븵���Ǥ��ꡢ�֥Х��Τ褦�ʻ��͡פʤΤǤ���*1

+

������ϼ��֤� 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)
+
+

��:

+

*1 ISO 9899:1990 �� Corrigendum 1:1994 �ǤϤ���������� undefined �Ȥ��줿�������ơ�C99 �Ǥ� Corrigendum �Τ��ι���̤Τ�Τ��֤�������줿�������������ʽ�Ϥ���˴ؤ��ƤϺ��𤷤Ƥ��롣�ܺ٤� cpp-test.html#2.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 ������������¸����ʤ���Фʤ�ޤ��󡣹Ԥκǽ�Ρ֥ȡ�����פ�������֥�Υ����ȤǤ��� # �Ǥ�����ϥץ�ץ����å���¦���ü�ʽ�����ɬ�פǤ����Ȥ���ץ�ץ����å������ʤ����¤��졢�Х��κ����ˤ�;�פʿ��Ф�Ȥ�ʤ���Фʤ�ʤ��Τǡ��褷���ɤ����Ȥ��Ȥϻפ��ޤ���*1

+

ʣ���Υޥ�����б����������Τ���˥ץ�ץ���������ɬ�פ�����ΤǤ���С�.S �ե�����ǤϤʤ� .c �ե�����Ȥ��ơ����η��ǽ񤯤Τ��ɤ��Ǥ��礦��4.4BSD-Lite �Ǥϼºݤˤ��ν����ˤʤäƤ��ޤ���

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

��:

+

*1 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 ����­�����뤳�Ȥ����Ǥ���פȤ���ޤ�(*1)�������� Standard C ����ޤäƣ�ǯ�⤿�Ĥ��ޤȤʤäƤϡ�-pedantic-errors �ȤޤǤϤ����ʤ��Ƥ� -pedantic ��ǥե���Ȥˤ��٤�������Ƥ���Ȼפ��ޤ���

+

FreeBSD 2.0-R �Ǥϥ����ȤΥͥ��Ȥ����������ޤ�������2.2.2-R �Ǥϰ��ݤ���Ƥ��ޤ������ݤ��줿�Τϡ�GCC / cpp ��ǧ��ʤ��ʤä�����Ǥ�������� -pedantic �Ȥϴط�����ޤ��󤬡��ץ�ץ����å��Υ����������å��ΰ��ϤϤ���ۤ��礭���ΤǤ���

+

��:

+

*1 ���� 3.9.3 ���񤫤줿�Τ� 1998 �Τ��ȤǤ��롣���θ塢gcc �� man �� info �Ǥϡ��������ˤ���ɽ���Ϻ�����줿�������������ͤ��ä��Ѥ�ä��櫓�ǤϤʤ���

+ +

3.9.4. Linux / glibc 2.1 �������Υץ�ץ�����

+

glibc (GNU LIBC) 2.1.3 (2000/02) �Υ������򥳥�ѥ��뤷�Ƥߤޤ���������ˤ� 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 �λ��ͤβ��Ѹİ����ޥ���������ȸƤӽФ�������ޤ���*1

+ +

��:

+

*1 ����� GCC2 ���餢����ͤǤ��뤬�����Τۤ� GCC3 �Ǥ� C99 �� GCC2 �Ȥ�����Ū�ʻ��ͤ��ɲä��줿�� +����ˤĤ��Ƥ� 3.9.6.3 �򻲾ȤΤ��ȡ�

+ +

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.4 �ǤϤ��Υޥ�����ľ����Ƥ��롣 +�Ȥ�������¾�Υޥ�����Ʊ��Τ�Τ������ˤ����Ĥ�ФƤ��Ƥ��롣

+ +

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 �����������ü�ʷ���������ˤ��ơ�ɸ��Ū�ʷ������б����Ƥ��ʤ��Ȥ����Τϡ��������ʻ��ͤǤ���

+ +

3.9.4.9. -include, -isystem, -I- ���ץ����

+

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

+

��:

+

*1 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 �ʻ�������ޥ���

+

����� glibc ������ǤϤʤ���GCC ������Ǥ���

+
+__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 �Υ���ѥ���˻Ȥ��ˤϡ��ޤ������Υ������ν�����ɬ�פǤ���*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 �Ȥ���̾���Υե��������ޤ���*2

+
+#!/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
+
+

�Ȥ��ޤ���

+

��:

+

*1 mcpp V.2.7 ����� GCC-specific-build �ˤ����λ��ͤ��������줿�Τǡ��������������ʤ��Ƥ�ץ�ץ������ϤǤ���褦�ˤʤä���

+

*2 mcpp �� configure ���ƥ��󥹥ȡ��뤷�����ϼ�ưŪ��Ŭ�ڤ����꤬����롣 +���Ȥ� -Q -lang-asm ���ץ������ɲä�������Ǥ��ࡣ

+ +

3.9.5.1. mcpp �Υ������˥󥰤���������ˤ�

+

mcpp ��Ȥ����Τ⤦��Ĥ�����ϡ����̤Υ������˥󥰤����Ϥ���뤳�ȤǤ���-Q ���ץ����ǥ�����쥯�Ȥ��Ƥ⡢glibc �Τ褦���絬�Ϥʥ��������������� 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 > mcpp-warnings-sorted
+
+

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

+
+grep 'warning:' `find . -name mcpp.err` | sort -k3 | uniq > mcpp-warnings-all
+
+

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

+
+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
+
+ +

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 �˵ۼ�����Ƥ��ޤ��ޤ���������������Ω�����ץ�ץ����å��Ǥ��� 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.5GNU makeglibc 2.2.4Celeron/1060MHz
VineLinux 2.5GNU makeglibc 2.2.4K6/200MHz
VineLinux 2.5GNU makeglibc 2.2.4AthlonXP/2.0GHz
FreeBSD 4.7R UCB makelibc.so.4 K6/200MHz
FreeBSD 4.7R UCB makelibc.so.4 AthlonXP/2.0GHz
+
+

����ѥ��뤷���Τ� C �� C++ �����Ǥ���

+

��:

+

*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 �λ��ͤȤ�����Ū�ʽ������ɲä���Ƥ��ޤ������η��Ǥ���*1

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

����� GCC 2 ���ͤμ��ν������б����ޤ���

+
+#define eprintf( fmt, args...)   fprintf( stderr, fmt, ##args)
+
+

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

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

������򸫤�������ʻ��ͤΤ褦�Ǥ������ޥ���������ִ��ꥹ����Υ���ޤϥѥ�᡼������ڤ��ΤȤϸ¤�ʤ����ȡ��ȡ�����Ϣ��黻�ҤǤ��� ## ���̤�Ư���򤵤��Ƥ��뤳�ȡ���§���㳰���ä�ʣ���ˤ����ΤǤ��뤳�ȡ��������꤬����ޤ���*2, *3, *4

+

��:

+

*1 ���Υޥ˥奢��Ǥϡ�GCC 2 ����β��Ѱ����ޥ����� GCC2 ���͡�GCC 3 ���ɲä��줿��Τ� GCC3 ���ͤȸƤ֤��Ȥˤ��롣

+

*2 GCC 2.* �Ǥ� GCC2 ���ͤβ��Ѱ����ޥ���������� args... ���Ǥ� args �� ... �ȤϤ��äĤ��Ƥ��ʤ���Фʤ�ʤ��ä�����GCC 3 �Ǥϴ֤� space �����äƤ��Ƥ��ɤ��ʤä���

+

*3 ��������-ansi ���ץ���󤬻��ꤵ�줿����-std=c*, -std=iso* ���ץ����Ǥ�Ʊ�͡ˡ����Ѱ�����¸�ߤ��ʤ��Ƥ⥳��ޤϺ������ʤ��� +��������'##' ���ۤäƾä���롣

+

*4 mcpp �Ǥ� V.2.6.3 ���� GCC-specific-build �� STD �⡼�ɤ˸¤äơ�GCC3 ���ͤβ��Ѱ����ޥ�����������줿�� +����� V.2.7 ����� GCC2 ���ͤΤ�Τˤ��б�������

+ +

3.9.6.4. �ޥ����ƤӽФ��Υ������

+

�ޥ����ƤӽФ��Υ�������ϡ�#include ����륷���ƥ�إå��Τ�Ρ�/usr/include/bits/mathcalls.h, /usr/include/bits/sigset.h�ˤ��̤Ȥ���ȡ�GCC 3.2 �Υ��������ΤǤϡ�gcc/libgcc2.h �ˤ��������ޤ���*1

+

��:

+

*1 ���Σ��ĤΥإå��ե������ 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 �Υɥ�����Ȥˤϡ����Τ褦�˽񤫤�Ƥ��ޤ���

+
Wherever possible, you should use a preprocessor geared to the +language you are writing in. Modern versions of the GNU assembler have +macro facilities.
+

��������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 ����ꤹ�륪�ץ���󤬤䤿��ˤ���ޤ����������������������äƤ����ΤǤ��礦����*1

+

��:

+

*1 ��������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 �ǤϤ����ϥ��ݡ��Ȥ��Ƥ��ޤ��󡣻��ͤ������Ͼʤ��ޤ�����ɬ���������ޤ괶�����ʤ�����Ǥ���*1

+

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 �δ�̯�ʻ��ͤϤ����ֽ�������Ƥ����褦�˸����ޤ���

+

��:

+

*1 mcpp V.2.7 ����� GCC-specific-build �� #pragma GCC system_header �򥵥ݡ��Ȥ�����

+ +

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 �Υ���ѥ�������Ȥ߹���Τǡ��̾�ϴĶ��ѿ������ꤹ��ɬ�פϤ���ޤ���

+

�Ǥ���� 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 �ν���Υ��ץ�������ˤϻȤ��ʤ��ʤä���Τ�����ޤ���V.2.5 ����� -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, *3

+

GCC V.3.4 �ǤϤ���ˡ�multi-byte character �Ϥ��٤� UTF-8 ���Ѵ����Ƥ����������褦���Ѥ��ޤ������ɥ�����Ȥˤ��ȡ�����Ū�ˤϼ��Τ褦�ˤʤäƤ��ޤ���*4

+
    +
  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 ����ꤹ�뤳�Ȥ��Ǥ��롣*5
    +
+

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

+

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

+
    +
  1. EUC-JP, GB2312, KSC-5601, Big5 �� -finput-charset ���ץ�������ꤹ��� UTF-8 ���������Ѵ����졢���ꤷ�ʤ���Ф��Τޤ��̤롣*6
    +
  2. -fexec-charset ���ץ����� V.3.4, 4.0 �Ǥϸ����ʤ��ä�����V.4.1-4.3 �Ǥϸ�����
    +
  3. ISO2022-JP �� V.3.4, 4.0 �ǤϽ����Ǥ��ʤ��ä�����V.4.1-4.3 �ǤϤǤ��롣
    +
  4. �ɤΥС������Ǥ� shift-JIS �� -finput-charset ����ꤹ��Ȥ����äƺ��𤷤Ƥ��ޤ���
    +
+

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

+
    +
  1. SJIS �� -f*-charset ����ꤹ��ȡ��ɤΥС������� GCC �Ǥ����Ǥ��롣���������ɤΥС������� GCC �Ǥ⡢SJIS, JIS, BIG5 ���Ѵ������� <backslash> ����äƤ��Ȥ��Τޤ��̤ꡢ�����̤�η�̤ˤʤ롣 +EUC-JP, GB2312, KSC-5601 ���Ѵ����ʤ���Ф��Τޤ��̤롣 +���ʤ����single byte character sequence �Ǥ��뤫�Τ褦�˰����롣
    +
  2. GCC 4.0 �ޤǤΥС������ǤϤɤ� encoding �� UTF-8 ���鸵�� encoding ���᤻�ʤ���
    +
  3. GCC �ζᤤ����λ����ѹ�����Ԥ�������
    +
+

��:

+

*1 ��������-dM ���ץ����ν��Ϥ�¾�Υ��ץ����ˤ�äƾ�����äƤ���ΤǤ��롣 +�����⡢�����λ�������ޥ�������Ⱦ�� undocumented �ʤ�ΤǤ��롣 +���Τ��ᡢ���ƤϤʤ��ʤ��İ��Ǥ��ʤ���

+

*2 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 ��ư����褦�ˤ��Ƥ��롣

+

*3 CygWIN / GCC �Ǥ� -mno-cygwin �Ȥ������ץ���󤬤��ꡢ�������ꤹ��� system include directory ���Ѥ�ꡢGCC �λ�������ޥ������Ѥ�롣���Τ��ᡢmcpp �� CygWIN GCC-specific-build �Ǥ� V.2.6.1 ����ϣ����åȤλ�������ޥ������Ѱդ���褦�ˤ�����

+

*4 ��ΤȤ����� FreeBSD 6.3 �ǤϤʤ��� GCC �Τ����Ѵ��Ϥޤä���ư��ʤ���libiconv �ϥ�󥯤���Ƥ���ΤǤ��뤬�� +FreeBSD 5.3, 6.2 �Ǥ⤽���Ǥ��ä���

+

*5 �����Ѵ��ϥץ�ץ������ե������ǤϤʤ�������ѥ���ե������ǹԤ���褦�Ǥ��롣 +-E ���ץ����ν��Ϥ� UTF-8 �ΤޤޤǤ��롣

+

*6 ��������GCC V.4.1-4.3 �Ǥϡ�-save-temps �ޤ��� -no-integrated-cpp ���ץ����� -f*-charset ���ץ�����Ʊ���˻��ꤹ��ȡ����顼�ˤʤ�Ȥ����Х������롣 +

*7 mcpp �ν��Ϥ� cc1 ���Ϥ����ˤ� -finput-charset �Ϥ������ -fexec-charset ���ץ������դ��ƤϤ����ʤ���

+ +

3.9.8. Linux / glibc 2.4 �������Υץ�ץ�����

+ +

glibc 2.4 (2006/03) �Υ������򥳥�ѥ��뤷�ơ��ץ�ץ�����������å����Ƥߤޤ����� +�����Ϥ� GCC 4.1.1 �ǡ��ץ�ץ����å��� mcpp 2.6.3 ���֤���������ΤǤ��� +�ޥ���� x86 �ϤʤΤǡ�¾�� CPU �ѤΥ����ɤϥ����å����Ƥ��ޤ���

+

�����˻䤬�����å����� glibc 2.1.3 (2000/02) ���飶ǯ�Фä��С������ʤΤǡ��礭���Ѥ�ä��Ȥ����������󤢤�ޤ������ճ����Ѥ�äƤ��ʤ��Ȥ�����¿�������ޤ��� +���ΤȤ��Ƥϡ������ΥС������ˤĤ��ƻ䤬���夲�����������������줺�ˡ��ष�������뷹���ˤ���ޤ���

+ +

3.9.8.1. �Ԥ�ޤ���ʸ�����ƥ��

+ +

�Ԥ�ޤ���ʸ�����ƥ��ϸ����ʤ��ʤ�ޤ�����

+ +

3.9.8.2. #include_next, #warning

+ +

���Υե�����ˤ� #include_next ������ޤ��� +��ǯȾ���ΥС���������٤�������Ƥ��ޤ���

+ +

+catgets/config.h, +elf/tls-macros.h, +include/bits/dlfcn.h, +include/bits/ipc.h, +include/fpu_control.h, +include/limits.h, +include/net/if.h, +include/pthread.h, +include/sys/sysctl.h, +include/sys/sysinfo.h, +include/tls.h, +locale/programs/config.h, +nptl/sysdeps/pthread/aio_misc.h, +nptl/sysdeps/unix/sysv/linux/aio_misc.h, +nptl/sysdeps/unix/sysv/linux/i386/clone.S, +nptl/sysdeps/unix/sysv/linux/i386/vfork.S, +nptl/sysdeps/unix/sysv/linux/sleep.c, +sysdeps/unix/sysv/linux/ldsodefs.h, +sysdeps/unix/sysv/linux/siglist.h +

+ +

���Υե������ make check �ǻȤ���ƥ����ѤΤ�ΤǤ����������ˤ� #include_next ������ޤ���

+ +

sysdeps/i386/i686/tst-stack-align.h

+ +

#warning �� sysvipc/sys/ipc.h �ˤ���ޤ���������˥���ѥ��뤵���Ȥ��ϥ����åפ����֥��å��ˤ���Τǡ��Ҥä����뤳�ȤϤ���ޤ���

+ +

3.9.8.3. ���Ѱ����ޥ���

+ +

���Υե�����ˤϲ��Ѱ����ޥ��������������ޤ����������Ϥ��٤� GCC2 ����θŤ����ͤΥޥ����Ǥ��� +C99 �λ��ͤΤ�ΤϤ�������GCC3 ���ͤΤ�Τ����⸫������ޤ���

+ +

elf/dl-lookup.c, +elf/dl-version.c, +include/libc-symbols.h, +include/stdio.h, +locale/loadlocale.c, +locale/programs/ld-time.c, +locale/programs/linereader.h, +locale/programs/locale.c, +locale/programs/locfile.h, +nptl/sysdeps/pthread/setxid.h, +nss/nss_files/files-XXX.c, +nss/nss_files/files-hosts.c, +sysdeps/generic/ldsodefs.h, +sysdeps/i386/fpu/bits/mathinline.h, +sysdeps/unix/sysdep.h, +sysdeps/unix/sysv/linux/i386/sysdep.h

+ +

���ϥƥ����ѤΥ롼����Ǥ����������ˤ� GCC2 ���ͤβ��Ѱ����ޥ��������������ޤ���

+ +

localedata/tst-ctype.c, +posix/bug-glob2.c, +posix/tst-gnuglob.c, +stdio-common/bug13.c

+ +

������ºݤˤ����Υޥ�����ƤӽФ��Ȥ��ˤϡ����Ѱ��������Ĥ�ʤ��ʥ������������ʤ�����§Ū�ʸƤӽФ���������¿���ʤäƤ��ޤ��� +���μ����§Ū�ʥޥ����ƤӽФ��� 142 �ܤ�Υ������ե�����˸����ޤ��� +���Τ������ִ��ꥹ�ȤDz��Ѱ�����ľ���� ", ##" �Ȥ��� sequence �����äƤ��� ',' ���������륱�����ϡ�120 �ܤΥ������˸����ޤ���

+

���Ѱ����ޥ����� C99 �λ��ͤ�Ȥä��ۤ��� portable ���ɤ��ΤǤ�����GCC2 ���뤤�� GCC3 ���ͤβ��Ѱ����ޥ����� C99 ���ͤΤ�Τ˽�ľ���Τϡ�ɬ�������ñ�ǤϤ���ޤ��� +GCC2 ���뤤�� GCC3 ���ͤǤϼºݤΥޥ����ƤӽФ��Dz��Ѱ������ʤ���硢����ľ���Υ���ޤ���������Τǡ��ޥ����θƤӽФ����ˤ�äƤ� C99 ���ͤȤϣ��У����б����ʤ�����Ǥ��� +�ޥ�������� C99 ���ͤ˽񤭴�������硢����ޤ������ʤ��Ǥ���褦�ˤ��뤿��ˤϡ��ޥ����ƤӽФ��Τۤ����ľ��ɬ�פ�����ޤ���

+

glibc 2.1.3 �ǤϤޤ������Υޥ����ο������ۤ�¿���Ϥʤ��ä��Τǡ��桼�����ܤdzΤ���ʤ��饨�ǥ����ǽ񤭴����뤳�Ȥ��Ǥ��ޤ�������glibc 2.4 �ǤϿ��������������⤽���Υޥ����θƤӽФ��Ľ꤬���������������ᡢ�桼�����񤭴����뤳�Ȥ��Բ�ǽ�ˤʤ�ޤ�����

+

���Τ��ᡢmcpp �Ǥ� V.2.6.3 ���� GCC-specific-build �˸¤äơ�GCC3 ���ͤβ��Ѱ����ޥ�����������ޤ����� +����� V.2.7 ����� GCC2 ���ͤΤ�Τˤ��б����ޤ����� +��������GCC2 ���ͤΤ�Τ� token-based �ʸ�§����ݤ�Υ��Ƥ���Τǡ������Ȥ��ޥ����򿷤����񤯤٤��ǤϤ���ޤ��� +GCC2 ���ͤ� GCC3 ���ͤȣ��У����б����Ƥ���Τǡ��ޥ�������� GCC3 ���ͤ˽�ľ�����Ȥ��ưפˤǤ����ޥ����ƤӽФ����ľ���ʤ��Ƥ⤹�ߤޤ��� +���Ǥ� GCC2 ���ͤǽ񤫤�Ƥ���ޥ����Ϥ����񤭴������ۤ����������餫�狼��䤹���ʤ�ޤ���*1

+

GCC2 ���ͤβ��Ѱ����ޥ����� GCC3 ���ͤ˽�ľ���ˤϡ��㤨�м��Τ褦�ʤ�Τ�

+ +
+#define libc_hidden_proto(name, attrs...)   hidden_proto (name, ##attrs)
+
+ +

���Τ褦�ˤ��ޤ���

+ +
+#define libc_hidden_proto(name, ...)    hidden_proto (name, ## __VA_ARGS__)
+
+ +

���ʤ�����ѥ�᡼���� attrs... �� ... �ˤ����ִ��ꥹ����� attrs �� __VA_ARGS__ �ˤ��ޤ���

+ +

��:

+

*1 GCC2 ���ͤ���� GCC3 ���ͤβ��Ѱ����ޥ����ˤĤ��Ƥϡ�3.9.1.6, 3.9.6.3 �򻲾ȤΤ��ȡ�

+ +

3.9.8.4. �ޥ����ƤӽФ��Υ������

+ +

��������Τ���ޥ����ƤӽФ��Ϥ�����¿����488 �ܤ�Υ������ե�����˸����ޤ��� +�����ΥС���������٤Ƥ������������ޤ����� +C99 �ǥ����������ǧ���줿���Ȥ��ƶ����Ƥ���ΤǤ��礦����

+ +

���Ȥ� math/bits/mathcalls.h �ˤ� 79 �Ĥ�Υ�������ޥ����ƤӽФ�������ޤ��� +�����Ȥۤ�Ʊ�ͤǤ���

+ +

3.9.8.5. Function-like �ޥ�����̾�����ִ������ object-like �ޥ���

+ +

���Υե�����ˤ� function-like �ޥ�����̾�����ִ������ object-like �ޥ���������������ޤ���

+ +

argp/argp-fmtstream.h, +hesiod/nss_hesiod/hesiod-proto.c, +intl/plural.c, +libio/iopopen.c, +nis/nss_nis/nis-hosts.c, +nss/nss_files/files-hosts.c, +nss/nss_files/files-network.c, +nss/nss_files/files-proto.c, +nss/nss_files/files-rpc.c, +nss/nss_files/files-service.c, +resolv/arpa/nameser_compat.h, +stdlib/gmp-impl.h, +string/strcoll_l.c, +sysdeps/unix/sysv/linux/clock_getres.c, +sysdeps/unix/sysv/linux/clock_gettime.c

+ +

elf/link.h �ˤϼ��Τ褦�� function-like �ޥ�����̾�����ִ������ function-like �ޥ���������ޤ���

+ +
+#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type)
+                                        /* sysdeps/generic/ldsodefs.h:46    */
+#define _ElfW(e,w,t)    _ElfW_1 (e, w, _##t)            /* elf/link.h:32    */
+#define _ElfW_1(e,w,t)  e##w##t                         /* elf/link.h:33    */
+#define __ELF_NATIVE_CLASS __WORDSIZE               /* bits/elfclass.h:11   */
+#define __WORDSIZE 32           /* sysdeps/wordsize-32/bits/wordsize.h:19   */
+#define ELF32_ST_TYPE(val) ((val) & 0xf)                /* elf/elf.h:429    */
+
+ +

�嵭�Τ褦�ʥޥ������������ȡ�

+ +
+    && ELFW(ST_TYPE) (sym->st_info) != STT_TLS      /* elf/do-lookup.h:81   */
+
+ +

���Υޥ����ƤӽФ��Ǥ� ELFW(ST_TYPE) �����Τ褦��Ÿ������Ƥ����ޤ���

+ +
+    ELFW(ST_TYPE)
+    _ElfW(ELF, __ELF_NATIVE_CLASS, ST_TYPE)
+    _ElfW_1(ELF, 32, _ST_TYPE)
+    ELF32_ST_TYPE
+
+ +

�����ơ�ELF32_ST_TYPE ������� (sym->st_info) �򴬤������ ((sym->st_info) & 0xf) ��Ÿ������ޤ��� +���ʤ����_ElfW_1(ELF, 32, _ST_TYPE) �Ȥ��� function-like macro �θƤӽФ��� ELF32_ST_TYPE �Ȥ����̤� function-like macro ��̾����Ÿ�������ΤǤ���

+ +

����ϣ��ĤΥޥ�������򼡤Τ褦�˽񤤤ơ�

+ +
+#define ELFW( type, val)        _ElfW( ELF, __ELF_NATIVE_CLASS, type, val)
+#define _ElfW( e, w, t, val)    _ElfW_1( e, w, _##t, val)
+#define _ElfW_1( e, w, t, val)  e##w##t( val)
+
+ +

���Τ褦�˸ƤӽФ����ۤ������狼��䤹���ʤ�ޤ��� +�������Ϥ�����������Ĺ�˸����뤫�⤷��ޤ��󤬡��ؿ��ƤӽФ����ǥ�Ȥ��ƹͤ���С�������Τۤ��������Ǥ��礦��

+ +
+    && ELFW(ST_TYPE, sym->st_info) != STT_TLS
+
+ +

3.9.8.6. 'defined' ��Ÿ�������ޥ���

+ +

���Υե�����ˤϡ��ִ��ꥹ����� 'defined' �Ȥ����ȡ�����νФƤ���ޥ��������������ޤ���*1

+ +

iconv/skeleton.c, +sysdeps/generic/_G_config.h, +sysdeps/gnu/_G_config.h, +sysdeps/i386/dl-machine.h, +sysdeps/i386/i686/memset.S, +sysdeps/mach/hurd/_G_config.h, +sysdeps/posix/sysconf.c

+ +

���Υե�����ǤϤ����Υޥ����� #if �ԤǻȤ��Ƥ��ޤ��� +�ޤ����嵭�Υե����뼫�Ȥ���Ǥ�Ȥ��Ƥ����礬����ޤ���

+ +

elf/dl-conflict.c, +elf/dl-runtime.c, +elf/dynamic-link.h

+ +

glibc 2.1.3 �� malloc/malloc.c �ˤ� HAVE_MREMAP �Ȥ�������Ϥ��ִ��ꥹ�Ȥ� 'defined' ���ФƤ���ޥ���������ޤ�������glibc 2.4 �ǤϤ���� portable �ʷ���ľ����Ƥ��ޤ��� +��������¾�Υ������ˤ��μ�Υޥ����������Ƥ��ޤ��ޤ�����

+

#if �Ԥ��ִ��ꥹ����� 'defined' ���ФƤ���ޥ����ƤӽФ��η�̤ϵ��ʤǤ� undefined �Ǥ��ꡢ��������Ū�˽�������Τ� GCC �ξ�����ͤǤ��� +¾�ν����ϤǤ�����Ǥ��� portable �ʥ������ˤ��뤿��ˤϡ������Υޥ��������񤭴����뤳�Ȥ�ɬ�פǤ��� +���ˤϥޥ����ƤӽФ���񤭴����ʤ���Фʤ�ޤ���*2

+

���ν񤭴�����¿���ξ��ϡ�3.9.4.6 �ˤ�����ˡ�ǤǤ��ޤ��� +����������ˤϤ���Ǥ��б��Ǥ��ʤ���Τ⤢��ޤ��� +'defined MACRO' ��ɾ���������ߥ󥰤ˤ�äưۤʤ���Ǥ��� +�㤨�С�sysdeps/i386/dl-machine.h �ˤϼ��Τ褦�ʥޥ�����������ꡢ���Υޥ�����¾�Υե������ #if ����ǻȤ��Ƥ��ޤ���

+ +
+#define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP
+
+ +

����򤳤��񤭴������ΤǤϡ����ޤ������ޤ���

+ +
+#if defined RTLD_BOOTSTRAP
+#define ELF_MACHINE_NO_RELA 1
+#endif
+
+ +

RTLD_BOOTSTRAP �Ȥ����ޥ����� elf/rtld.c ���������ޤ��������줬 dl-machine.h ������ include �������ȸ�� include ������礬���ꡢ����ˤ�ä� 'defined RTLD_BOOTSTRAP' �η�̤���äƤ���ΤǤ��� +����� portable �˽�ľ���ˤϡ�ELF_MACHINE_NO_RELA �Ȥ����ޥ�����Ȥ����Ȥ���ơ����Τ褦�� #if �Ԥ�

+ +
+#if ELF_MACHINE_NO_RELA
+
+ +

���Τ褦�ˤ��ޤ��� +ELF_MACHINE_NO_RELA �� #if �ԤǤ����Ȥ��Ƥ��ʤ�̵�Ѥʥޥ����ʤΤǤ���

+ +
+#if defined RTLD_BOOTSTRAP
+
+ +

glibc �Ǥϼºݤˤ��ν����ˤʤäƤ���Ȥ�����¿������ΤǤ��������줬 ELF_MACHINE_NO_RELA ��Ȥ� undefined �ʽ����Ⱥ��ߤ��Ƥ��ޤ���

+ +

��:

+

*1 Linux �Ǥ� /usr/include/_G_config.h �� glibc �� sysdeps/gnu/_G_config.h �����󥹥ȡ��뤵�줿��ΤʤΤǡ������ˤ⼡�Τ褦��Ʊ���ޥ�����������롣

+ +
+#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
+
+ +

����Ϥ����񤭴����Ƥ����٤��Ǥ��롣

+ +
+#if defined (_STATBUF_ST_BLKSIZE)
+#define _G_HAVE_ST_BLKSIZE 1
+#endif
+
+ +

*2 mcpp V.2.7 ����� GCC-specific-build �� STD �⡼�ɤ˸¤äơ�#if �ԤΥޥ����˽ФƤ��� 'defined' �ȡ������ GCC ��Ʊ�ͤ˽�������褦�ˤ����� +���������������� bug-to-bug ���н�򤢤Ƥˤ��٤��ǤϤʤ���

+ +

3.9.8.7. .S �ե�����Ρ֥ץ�ץ�������

+ +

*.S �ե������ CPU ���Ȥ��Ѱդ���Ƥ���ΤǤ�����¿����1000 �ܤ��ޤ�⤢��ޤ���x86 ����������� CPU �ǻȤ���ΤϤ��Τ����ΰ����ˡ�

+

*.S �ե�����ϥ�����֥饽������ C �� #if, #include ���� directive �䥳���Ȥ�ޥ����򺮺ߤ�������ΤǤ�����������֥饽������ C �� token sequence �η��򤷤Ƥ��ʤ��Τǡ������ C �ץ�ץ����å��ǽ������뤳�Ȥˤ�̵��������ޤ��� +�ץ�ץ����å��� C �ǻȤ�ʤ� %, $ ����ʸ���⤽�Τޤ��̤���space ��̵ͭ�⸶§�Ȥ��Ƥ��Τޤްݻ����ʤ���Фʤ�ޤ��� +����� C �Ǥϥ��顼�ˤʤ�Ȥ����򥨥顼�ˤ����ˤ��Τޤ��̤��褦�ˡ�ʸˡ�����å��������˴��¤��ʤ���Фʤ�ޤ��� +�����ơ����ΰ����� #if ��ޥ����Ͻ�����������Υ��顼�����å��⤷�ʤ���Фʤ�ʤ��ΤǤ��� +��ä����ʤ��ȤǤ��� +�����λ��ͤˤϤ��٤�����Ū�ʺ���ϲ���ʤ���GCC �� local �ʡ�¿���� undocumented �ʡ˻��ͤ�ȤäƤ���ˤ����ޤ���

+

�㤨�� nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S �ˤϼ��Τ褦����ʬ������ޤ�

+ +
+    .byte   8               # Return address register
+                            # column.
+#ifdef SHARED
+    .uleb128 7              # Augmentation value length.
+    .byte   0x9b            # Personality: DW_EH_PE_pcrel
+                            # + DW_EH_PE_sdata4
+
+ +

'#ifdef SHARED' �� C �� directive �Ǥ������ƹԤθ�Ⱦ�� # �ǻϤޤ���ʬ�ϥ����ȤΤĤ��Τ褦�Ǥ��� +��������'# column.' �Τ褦�˹Ԥκǽ�� non-white-space-character �� # �ξ��ϡ�̵���� directive �ȹ�ʸ�塢���̤��Ĥ��ޤ��� +'# + DW_EH_PE_sdata4' �˻�äƤ� C �ǤϹ�ʸ���顼�ˤʤ��ΤǤ���
+¾�Υե�����ˤϼ��Τ褦����⤢��ޤ��� +������ '\'' �Ȥ���ʸ���� C �Ǥ� character constant ��ξü�˻Ȥ����ΤʤΤǡ����줬ñ�ȤǸ����� tokenization �Υ��顼�ˤʤ�ޤ���

+ +
+    movl 12(%esp), %eax     # that `fixup' takes its parameters in regs.
+
+ +

����ˡ��嵭�� pthread_cond_wait.S �ˤϼ��Τ褦����ʬ������ޤ���������ϥޥ����θƤӽФ��Ǥ���

+ +
+versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
+          GLIBC_2_3_2)
+
+ +

���Υޥ���������ϼ��Τ褦�ˤʤäƤ��ޤ���

+ +
+# define versioned_symbol(lib, local, symbol, version) \
+  versioned_symbol_1 (local, symbol, VERSION_##lib##_##version)
+                                    /* include/shlib-compat.h:65    */
+# define versioned_symbol_1(local, symbol, name) \
+  default_symbol_version (local, symbol, name)
+                                    /* include/shlib-compat.h:67    */
+# define default_symbol_version(real, name, version) \
+     _default_symbol_version(real, name, version)
+                                    /* include/libc-symbols.h:398   */
+#   define _default_symbol_version(real, name, version) \
+     .symver real, name##@##@##version
+                                    /* include/libc-symbols.h:411   */
+#define VERSION_libpthread_GLIBC_2_3_2  GLIBC_2.3.2
+                            /* make ����������� abi-versions.h:145 */
+
+ +

����ˤ�äơ����Υޥ����Ϥ�������Ÿ����̤ˤʤ뤳�Ȥ����Ԥ���Ƥ��ޤ���

+ +
+.symver __pthread_cond_wait, pthread_cond_wait@@GLIBC_2.3.2
+
+ +

����� _default_symbol_version ������Ǥ��� +'@' �Ȥ���ʸ���� C �� token (pp-token) �ˤϤ���ޤ��� +�����ơ������ ## �黻�Ҥ�Ϣ�뤷�� pthread_cond_wait@@GLIBC_2.3.2 �Ȥ��� token �⤢��ޤ��� +Ϣ�������ˤ� illegal �� token ����������ޤ��� +���Υޥ����� C �� ## �黻�Ҥ�ȤäƤ��ޤ�����ʸˡ�� C �Ȥϳݤ�Υ�줿��ΤǤ���

+

������֥饽�����ˤĤ��ƥץ�ץ������Τ褦�ʤ��Ȥ򤹤�ΤǤ���С���Ϥꥢ����֥��ѤΥޥ����ץ����å���Ȥ��٤��Ǥ��礦�� +C �ץ�ץ����å���Ȥ��ΤǤ���С�*.S �ǤϤʤ� *.c �Ȥ��ơ�������֥��ѤΥ����ɤ�ʸ�����ƥ���������� asm() �ʤ� __asm__() �ʤ�δؿ����Ϥ��٤��Ǥ��礦�� +libc-symbols.h �ˤϼ��Τ褦���̥С������Υޥ������Ѱդ���Ƥ��ơ�*.c �Ǥ���Ф����餬�Ȥ��ޤ��� +������ϵ��ʽ��� C �ץ�ץ����å�������ʤ������Ǥ��ޤ���

+ +
+#   define _default_symbol_version(real, name, version) \
+     __asm__ (".symver " #real "," #name "@@" #version)
+
+ +

glibc �ˤ� asm() �� __asm()__ ��Ȥä� *.c, *.h �ե������¿������ޤ������ޤ���Ⱦ����§Ū�� *.S �ե�����ȤʤäƤ��ޤ���

+

�ɤ����Ƥ⥢����֥饽������ C �ץ�ץ����å��ǽ�������ΤǤ���С�����ƥ����ȵ���Ȥ��Ƥ� # �ǤϤʤ� /* */ �� // ��Ȥ��٤��Ǥ��� +�ºݡ�glibc �Ǥ� /* */ �� // ��ȤäƤ��륽������¿���ΤǤ�����# ��ȤäƤ��륽�����⤤���Ĥ�����ޤ���

+

�Ȥϸ�����glibc 2.4 �Ǥ� *.S �ե����뤬���ޤ�ˤ�¿���������� 2.1.3 �Τ������� C ��ʸˡ��̵�뤷����������¿���ʤäƤ���Τǡ�mcpp �Ǥ� V.2.6.3 ���� lang-asm �⡼�ɤǤ�ʸˡ�����å��������˴��¤�����������§�������������Ǥ���褦�ˤ��ޤ�����

+ +

3.9.8.8. versions.awk, rpcgen �� -dM ���ץ����λ��ͤ�����

+ +

3.9.4.8 �˽񤤤� stdlib/isomac.c ��������Ѥ�äƤ��ޤ���

+

rpcgen ��������Ѥ�äƤ��ޤ���

+

����� glibc 2.4 �ˤ� scripts/versions.awk �Ȥ����ե����뤬����ޤ���������ϥץ�ץ����å��ν��Ϥι�Ƭ�� space �ο��ˤĤ��ơ�GCC �Ǥ������Ѥ��ʤ�������������Ǥ��ޤ��� +mcpp ��¾�Υץ�ץ����å���Ȥ�����ˤϡ����Υե�����򼡤Τ褦�˽������ʤ���Фʤ�ޤ���

+ +
+$ diff -c versions.awk*
+*** versions.awk        2006-12-13 00:59:56.000000000 +0900
+--- versions.awk.orig   2005-03-23 10:46:29.000000000 +0900
+***************
+*** 50,56 ****
+  }
+
+  # This matches the beginning of a new version for the current library.
+! /^ *[A-Z]/ {
+    if (renamed[actlib "::" $1])
+      actver = renamed[actlib "::" $1];
+    else if (!versions[actlib "::" $1] && $1 != "GLIBC_PRIVATE") {
+--- 50,56 ----
+  }
+
+  # This matches the beginning of a new version for the current library.
+! /^  [A-Za-z_]/ {
+    if (renamed[actlib "::" $1])
+      actver = renamed[actlib "::" $1];
+    else if (!versions[actlib "::" $1] && $1 != "GLIBC_PRIVATE") {
+***************
+*** 65,71 ****
+  # This matches lines with names to be added to the current version in the
+  # current library.  This is the only place where we print something to
+  # the intermediate file.
+! /^ *[a-z_]/ {
+    sortver=actver
+    # Ensure GLIBC_ versions come always first
+    sub(/^GLIBC_/," GLIBC_",sortver)
+--- 65,71 ----
+  # This matches lines with names to be added to the current version in the
+  # current library.  This is the only place where we print something to
+  # the intermediate file.
+! /^   / {
+    sortver=actver
+    # Ensure GLIBC_ versions come always first
+    sub(/^GLIBC_/," GLIBC_",sortver)
+
+ +

3.9.8.9. -include, -isystem, -I- ���ץ����

+ +

-isystem, -I- ���ץ����ϻȤ��Ƥ��ޤ���

+

��������-include ���ץ����϶�ü�����ˤ˻Ȥ��Ƥ��ޤ��� +include/libc-symbols.h �Ȥ����إå��ե����뤬 -include ���ץ����ˤ�ä� 7000 ��� include �����ΤǤ��� +���Υ��ץ����ϡ�����ϥ�������� #include �ǽ񤯤٤��Ԥ� makefile �˲����Ф��ƻȤ�����Τ�ΤǤ��� +���������Դ����ˤ���Τǡ��褷���ɤ����ȤǤϤ���ޤ���

+ +

3.9.8.10. Undocumented �ʻ�������ޥ���

+ +

����� glibc ������ǤϤʤ���GCC ������Ǥ��� +GCC 2 �ǤϤ����Ĥ��ν��פʻ�������ޥ����� undocumented �Ǥ����������ξ��֤� GCC 3 �Dz�ä���ޤ����� +��������¾���� GCC 3.3 ����ϻ�������ޥ�������ü���������Τ�ȼ�äơ�undocumented �ʤ�Τ������������Ƥ��ޤ��ޤ�����

+ +

3.9.8.11. ����¾������

+ +

debug/tst-chk1.c �ˤϴ�̯����ʬ�����ꡢ���Τ褦�˽������ʤ��� GCC �ʳ��Υץ�ץ����å��Ǥϰտ��̤�˽�������ޤ���

+ +
+$ diff -cw tst-chk1.c*
+*** tst-chk1.c  2007-01-11 00:31:45.000000000 +0900
+--- tst-chk1.c.orig     2005-08-23 00:12:34.000000000 +0900
+***************
+*** 113,119 ****
+  static int
+  do_test (void)
+  {
+-   int   arg;
+    struct sigaction sa;
+    sa.sa_handler = handler;
+    sa.sa_flags = 0;
+--- 113,118 ----
+***************
+*** 135,146 ****
+    struct A { char buf1[9]; char buf2[1]; } a;
+    struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
+
+  #ifdef __USE_FORTIFY_LEVEL
+!   arg = (int) __USE_FORTIFY_LEVEL;
+  #else
+!   arg = 0;
+  #endif
+!   printf ("Test checking routines at fortify level %d\n", arg);
+
+    /* These ops can be done without runtime checking of object size.  */
+    memcpy (buf, "abcdefghij", 10);
+--- 134,146 ----
+    struct A { char buf1[9]; char buf2[1]; } a;
+    struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
+
++   printf ("Test checking routines at fortify level %d\n",
+  #ifdef __USE_FORTIFY_LEVEL
+!         (int) __USE_FORTIFY_LEVEL
+  #else
+!         0
+  #endif
+!         );
+
+    /* These ops can be done without runtime checking of object size.  */
+    memcpy (buf, "abcdefghij", 10);
+
+ +

���θ��������ϲ�����ů��ʤ������˸����ޤ������¤Ϥ����Ǥ� printf() ���ޥ����Ȥ����������Ƥ���ΤǤ��� +���Τ��ᡢ#ifdef ���Υǥ��쥯�ƥ��ֹԤ餷����Τ��̾�ϥޥ����ΰ����Ȥ��ư������̤ˤʤ�ޤ��� +�ޥ����ƤӽФ�����Ǥʤ���Хǥ��쥯�ƥ��ֹԤȤʤ��Τ�������˸��줿���η�̤ϡ����ʤǤ� undefined �Ǥ��� +�ǥ��쥯�ƥ��֤ν����ȥޥ���Ÿ����Ʊ�� translation phase �ǹԤ���Τǡ��ǥ��쥯�ƥ��֤���˽�������Τϡ�GCC �ξ�����ͤǤ��� +���⤽�⡢#ifdef __USE_FORTIFY_LEVEL �ν����ˤ�ޥ����ν�����ɬ�פʤΤǡ����ιԤ���˽������Ƥ��� printf() �ޥ�����Ÿ������Ȥ����Τϡ����������Ū�ʽ����Ǥ��� +C �ץ�ץ������Ȥ�����Τϡ�Ƭ���� sequentially �˽������Ƥ椯�٤���ΤʤΤǤ���

+ +

glibc �� configure ����Ȥ��ˤ⡢GCC ���ü�� help message ��Ȥ���ʬ������ޤ��� +Help �� "-z relro" �Ȥ������ץ���󤬽ФƤ��뤫�ɤ����򥵡��������ΤǤ��� +�ץ�ץ����å��� mcpp ��ȤäƤ���ȡ�����ϴ��Ԥ����̤ˤϤʤ�ޤ��� +������������Ǥ� glibc �Υ���ѥ���ȥƥ��Ȥ�����˹Ԥ��ޤ���

+ +

�ʤ���GCC 3.2 �ޤǤ� gcc ��ư�����̵�Ѥ� -A ���ץ���󤬤��������ȥǥե���Ȥ��ղä���ޤ�������GCC 3.3 ����Ϥʤ��ʤ�ޤ�����

+ +

3.9.8.12. ���ޤ� GCC ��¸

+ +

glibc 2.4 ��ǯ���� glibc 2.1.3 ����٤�ȡ��䤬���ĤƼ��夲�� portability ������ϤۤȤ�ɲ�������Ƥ��餺���դ� portability ��礤���������������Ƥ��Ƥ��뤳�Ȥ��狼��ޤ���

+

�������줿�Τϡ��Ԥ�ޤ���ʸ�����ƥ�뤬�ʤ��ʤä����ȡ�-isystem, -I- ���ץ���󤬻Ȥ��ʤ��ʤä����ȡ�GCC ��¦�� -A ���ץ���󤬻Ȥ��ʤ��ʤä����Ȥ��餤�Ǥ���

+

#include_next��GCC2 ���ͤβ��Ѱ����ޥ�������Ǥ���Ѱ����� 0 �ĤΥޥ����ƤӽФ����ִ��ꥹ�Ȥ� 'defined' �Τ���ޥ�����*.S �ե����롢-include ���ץ���󡢤����������������ޤ������ޥ����ƤӽФ��Υ�������������ޤ����� +Portable �ʥ������˽�ľ�����Ȥ���ñ�ˤϤǤ��ʤ���Standard C �ȣ��У����б����ʤ��������������Τ⡢��ä����ʤȤ����Ǥ���

+

����������Ϥ��٤� GCC �� local �ʻ��ͤؤΰ�¸�ˤ���ΤǤ��� +GCC �� undocumented ��ư��˰�¸���Ƥ�����ʬ��¿������ޤ��� +�絬�Ϥʥ��եȥ������Ǥ���������ʬ��ȯ������ȡ�¿���Υ������ե����뤬���߹礦���ᡢ����������ˤʤꡢ��ǯ�Ǥ�Ʊ���������Ѿ�����Ƥ椯���Ȥˤʤ꤬���Ǥ��� +�����ơ��������������⤽��˹�碌�ƽ񤫤�뤳�Ȥˤʤ�ޤ��� +���Ѱ����ޥ����� GCC2 ���ͤΤ�Τ����ǡ�C99 �λ��ͤΤ�ΤϤ����� GCC3 ���ͤΤ�Τ����Ȥ��Ƥ��ʤ����Ȥϡ����δط���üŪ��ɽ���Ƥ��ޤ��� +�ޤ������ä��������Υ������� unportable ����ʬ����ľ����Ƥ⡢¾�Υ������˸Ť������������˸�������¿�����ʤ��ʤ���������ޤ���

+

�դ� GCC �Τۤ�����ͤ��ѹ����礭�ʱƶ���⤿�餹�Τǡ���ñ�ˤϤǤ��ʤ��ʤäƤ��ޤ��ޤ��� +�ɤ����������λפ��ڤä�������ɬ�פ��Ȼפ��ޤ���

+ +

3.9.9. Linux �� stddef.h, limits.h, #include_next ������

+

Linux �Ǥ� GCC �������ƥॳ��ѥ���Ǥ����˥饤�֥�꤬ glibc �Ǥ��뤿�ᡢ�����ƥ�إå��ˤ� GCC �������ꤷ�Ƥ��ʤ���ʬ���Ȥ����ɤ����ˤ���ޤ��� +���줬 compiler-independent-build �� mcpp �Τ褦��¾�ν����Ϥ�Ȥ����ξ㳲�ˤʤ�ޤ��� +��Ǥ� stddef.h ���Τ����Ĥ���ɸ��إå��ե����뤬 GCC �� version-specific �� include directory �ˤ������ä� /usr/include ��¸�ߤ��ʤ��Ȥ����ΤϤ������ʷ�٤Ǥ��ꡢmcpp �ˤȤäƤ��к���ɬ�פǤ��� +���Υ��������ǤϤ��������Ƥ���ޤ���

+

Linux �Ǥ� GCC �ΥС�����󤴤Ȥ��㤨�� /usr/lib/gcc-lib/SYSTEM/VERSION/include �Ȥ��ä� include directory �������ƥ���ɲä���ޤ����������ˤ��� stddef.h, limits.h ���ϴ�̯�ʤ�ΤǤ��� +CygWIN �Ǥ�Ʊ���Ǥ��� +Mac OS X �ˤ⾯�����꤬����ޤ���

+ +

3.9.9.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 �Ǥ��ԲIJ��ư��򤷤ޤ���

+

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

+

�ʤ�������� compiler-independent-build �� mcpp ������ˤʤ��ΤǤ��� +GCC-specific-build �Ǥ������ȯ�����ޤ���

+ +

3.9.9.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-linux��VERSION �� 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 �ˤϼ��Τ褦�˽񤤤Ƥ���ޤ���

+
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.2, 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.9.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.9.4. ���̤��к�

+

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

+
    +
  1. Linux �Υ����ƥ�إå��� GCC ���Ѥˤ��ʤ�����ˤ� /usr/include �� float.h, iso646.h, stdarg.h, stdbool.h, stddef.h ��ɬ�פǤ��뤬�����줬�ʤ���
    +
  2. C++ ��ɸ�� include directory �� GCC �ΥС�������¸�ˤ��ʤ�����ˤϡ�/usr/include/c++/VERSION �ǤϤʤ� /usr/include/c++ ��ȤäƤ�餤������ΤǤ��롣/usr/include/c++/VERSION/* �� GCC ��ͭ�Τ�Τ˸¤�٤��Ǥ��롣 +FreeBSD, Linux, Mac OS X �ǤϤ��٤� C++ �� standard library �� GCC �� libstdc++ �ʤΤǡ��н褷�ˤ������ȤǤ��뤬��
    +
  3. GCC �� #include_next ��ư��ϻ��ͤȰۤʤäƤ��ꡢ���İ�������ʤ���
    +
  4. GCC �� <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 �� compiler-independent �ǤǤϰʾ��������н褹�뤿�ᡢ�Ȥꤢ�����ϼ��Τ褦�����ꤹ��ɬ�פ�����ޤ���Compiler-independent �ǤǤϺ�����򤱤뤿�ᡢ#include_next �ϼ������ޤ���GCC ��ͭ�� include directory ���Ȥ߹��ߤޤ���

+
    +
  1. /usr/include/stddef.h �� /usr/lib/gcc-lib/SYSTEM/VERSION/include/stddef.h �ؤΥ�󥯤Ȥ��ƺ������Ƥ�����ʣ���� GCC �ΥС�����󤬥��󥹥ȡ��뤵��Ƥ�����⤽�Τɤ줫�˥�󥯤��Ƥ����С�Linux, CygWIN ��� compiler-independent �ǻȤ�ʬ�ˤ�����ʤ��Ȼפ��롣����� GCC �ˤ⡢GCC �����Ǥ� mcpp �ˤⰭ�ƶ���Ϳ���ʤ���stdarg.h ��Ʊ�ͤǤ��롣�ޥ����� GCC ���Ȥ߹��ߴؿ���Ÿ������뤬��ñ�˥ץ�ץ�������������ʤ餽��Ǥ⤹�ࡣ
    +
  2. iso646.h, stdbool.h �Ϥ�����ñ�ʤ�ΤǤ��ꡢ�����Ϥ䥷���ƥ�˰�¸�����ΤǤϤʤ��Τǡ�GCC �Τɤ줫�ΥС������Τ�Τ� /usr/include �˥��ԡ����뤫��ư����Ф��ࡣlimits.h �� GCC �ʳ��ν����ϤǤ� /usr/include �Τ�Τ����ǽ�ʬ�Ǥ��롣
    +
  3. float.h �� DBL_MAX_EXP �� __DBL_MAX_EXP__ ����������Ȥ��ä����ƤʤΤǡ�¾�Υץ�ץ����å��ˤ����Ω���ʤ���ɬ�פʤ� GCC ����������ʤɤ򻲹ͤ˽񤯡�*5
    +
  4. GCC ��ͭ�� 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 ������̤�˼��������ߴ��Τ���λ�������ޥ������������Τǡ����̤������ɬ�פ���ޤ���

+

��:

+

*1 ���� 3.9.9 �ε��ܤ� Linux / GCC 2.95.3, 3.2, 3.3.2, 3.4.3, 4.0.2, 4.1.1, 4.3.0 ����� CygWIN / GCC 2.95.3, 3.4.4 �dz�ǧ������ΤǤ��롣 +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 6.2, 6.3 / GCC 3.4.6 �Ǥ� /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 Mac OS X Leopard / Apple-GCC 4.0.1 �Ǥ� GCC �� version-specific �� include directory �� Linux ��Ʊ�ͤǤ��롣 +#include_next �� limits.h ���ǻȤ��Ƥ��롣 +limits.h �ι����� Linux ��Ʊ�ͤǤ��뤬�������� syslimits.h �� #include_next �Ϻ������Ƥ��롣 +�ޤ���float.h, iso646.h, stdarg.h, stdbool.h, stddef.h �Ϥ��٤� /usr/include �ˤ���Τǡ�mcpp ��¦�Ǥ��к��Ϥ��ޤ�ɬ�פʤ��� +��������float.h, stdarg.h �� GCC �Ѥ� Metrowerks (for powerpc) �ѤʤΤǡ�mcpp �ǻȤ��ʤ� stdarg.h �� GCC �� version-specific �ʥǥ��쥯�ȥ���Υإå��� include ����褦�˥ǥ��쥯�ƥ��֤��­����float.h �Ǥϥޥ������­���Ƥ����ʤ���Фʤ�ʤ��� +float.h �� x86 �� powerpc �ȤǤ����Ĥ����ͤ��ۤʤ뤳�Ȥ����ա�

+

*4 MinGW / GCC 3.4.* �Ǥ� include directories �Ȥ���ͥ���̤�¾�Υ����ƥ�Ȱۤʤ뤬��GCC �� #include_next ��ư���Ʊ���Ǥ��ꡢ�ޤ�ɸ��� include directory �Ǥ��� /mingw/include �ˤ����Ĥ���ɸ��إå����ʤ��� version-specific-directory �ˤ������� CygWIN ����Ʊ���Ǥ��롣

+

*5 GCC ������򻲾Ȥ��� i386 �Ǥ� float.h ��񤱤С����Τ褦�ˤʤ롣

+
+/* 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.9.10. Mac OS X / Apple-GCC �ȥ����ƥ�إå�������

+

mcpp �� V.2.7 ���� Mac OS X / GCC �⥵�ݡ��Ȥ���褦�ˤʤ�ޤ����������Υ����ƥ����������ʲ��ˤޤȤ�Ƥ����ޤ��� +������ɮ�ԤϤޤ����Υ����ƥ�ǤϤۤȤ�� mcpp �� firefox ���餤��������ѥ��뤷�Ƥ��ʤ��Τǡ��Τ�ʤ���ʬ��¿������ޤ��� +���Ȥ� Objective C / Objective C++ �ˤĤ��ƤϤޤä����Τ�ޤ���

+

���� OS �� GCC ���ۤȤ��ͣ��Υ���ѥ���ȤʤäƤ��뤿�ᡢ���Υ����ƥ�إå��ˤ� GCC-local �ʻ��ͤؤΰ�¸�������˸����ޤ��� +�饤�֥�꤬ glibc �ǤϤʤ����������������٤� Linux �ۤɤǤϤ���ޤ��� +��������FreeBSD ����¿���褦�Ǥ��� +�⤦���������Ǥ���Ϥ����Ȼפ��ޤ���

+

���Υ����ƥ�Τ⤦���Ĥ���ħ�� Apple �ˤ�äƤ��ʤ���ä���줿 GCC �������ƥॳ��ѥ���ȤʤäƤ��뤳�ȤǤ��� +Mac OS X �Υ����ƥ�إå��� Apple �Υ������Ǥϡ����̤� GCC-local �ʻ��ͤ���ष�� Apple-GCC-local �ʻ��ͤؤΰ�¸�Τۤ�����Ω���ޤ��� +��Ǥ⡢Intel-Mac �� PowerPC-Mac �������򣱤ĤΥޥ���ǥ��ݡ��Ȥ��뤿��γ�ĥ���ͤ���ħŪ�Ǥ���

+

�ʤ��������Ǽ��夲��Τ� Mac OS X Leopard / Apple-GCC 4.0.1 �Ǥ���

+ +

3.9.10.1. #include_next, #warning

+

GCC-local �ʻ��ͤǤ��� #include_next ��¿���Ϥ���ޤ��󤬡�/usr/include/ �� float.h, stdarg.h, varargs.h ����� /Developer/SDKs/MacOSX10.*.sdk/usr/include/ ��Ʊ̾�Υե�����ǻȤ��Ƥ��ޤ��� +�����Ϥ�����⥳��ѥ��餬 GCC �Ǥ��뤫 Metrowerks �Ǥ��뤫�ˤ�ä� include �����إå��ե�����򿶤�ʬ���뤿��Τ�ΤǤ��� +GCC ���� stdarg.h ����Ʊ̾�Υإå��ե����뤬 #include_next �����褦�ˤʤäƤ��ޤ���
+�ޤ���Linux ��Ʊ�ͤˡ�GCC �� version-specific �� include directory �Ǥ� limits.h �� #include_next ������ޤ�����syslimits.h �Τ�ΤϺ������ơ�����������������Ƥ��ޤ���

+

���Υǥ��쥯�ƥ��֤Ϲ����ܤ˻Ȥ��Ƥ��ޤ�����float.h, stdarg.h �� GCC �� Metrowerks �������ꤷ�Ƥ��ʤ��Τ�����Ǥ��� +FreeBSD ��Ʊ���Ȥ����ޤ� portable �˽񤯤��ȤϤǤ���Ϥ��Ǥ���*1
+�ޤ���/usr/include ��Υإå��ե������ GCC �Ѥ� #include_next ��񤯤Τϥʥ󥻥󥹤Ǥ��� +GCC �ǤϤ��Υǥ��쥯�ȥ�Τۤ��� version-specific �� include directory ���ͥ���̤��㤤����Ǥ��� +�������äơ����� #include_next �Ϸ褷�Ƽ¹Ԥ���뤳�ȤϤ���ޤ���

+

#warning �� /usr/include/ �� objc/, wx-2.8/wx/ ���Υǥ��쥯�ȥ�䤽����б����� /Developer/SDKs/MacOSX*.sdk/usr/include/ ��Υǥ��쥯�ȥ�˻��������ޤ��� +¿���� obsolete �ʤ��� deprecated �ʻȤ�����ե�����˴ؤ��륦�����˥󥰤Τ褦�Ǥ���
+/usr/include/c++/VERSION/backward/ ����Ӥ�����б����� /Developer/SDKs/MacOSX*.sdk/ ��� backward_warning.h �Ϥ�Ϥ� deprecated �ʥإå���Ȥ��ʤȤ��� #warning ��¹Ԥ��뤿��Υե�����Ǥ��������Υǥ��쥯�ȥ���Υإå��ե�����Ϥ��٤Ƥ��Υե������ include ����褦�ˤʤäƤ��ޤ��� +����� Linux �� FreeBSD ��Ʊ���Ǥ���

+

��:

+

*1 mcpp �� compiler-independent-build �Ǥ����Υإå���Ȥ���ˡ�ˤĤ��Ƥϡ�3.9.9.4 ����Ӥ����� 3 �򻲾ȡ�

+ +

3.9.10.2. 'defined' ��Ÿ�������ޥ���

+

/usr/include/sys/cdefs.h ����Ӥ�����б����� /Developer/SDKs/MacOSX*.sdk/ ���Ʊ̾�Υإå��ե�����ˤϡ����Τ褦�ʥޥ������������ޤ���

+
+#define __DARWIN_NO_LONG_LONG   (defined(__STRICT_ANSI__) \
+                && (__STDC_VERSION__-0 < 199901L) \
+                && !defined(__GNUG__))
+
+

�����ơ����Υޥ����� stdlib.h ���Ǽ��Τ褦�˻Ȥ��Ƥ��ޤ���

+
+#if __DARWIN_NO_LONG_LONG
+
+

���Υޥ����ϼ��Τ褦��������٤��Ǥ���*1

+
+#if     defined(__STRICT_ANSI__) \
+                && (__STDC_VERSION__-0 < 199901L) \
+                && !defined(__GNUG__)
+#define __DARWIN_NO_LONG_LONG   1
+#endif
+
+

��:

+

*1 ������ͳ�� 3.9.4.6, 3.9.8.6 �򻲾ȡ�

+ +

3.9.10.3. #endif �ԤΥȡ�����

+

/System/Library/Frameworks/Kerberos.framework/Headers �� gssapi.h, krb5.h, profile.h �ˤϼ��Τ褦�ʴ���� #endif �Ԥ�����ޤ���

+
+#endif \* __KERBEROS5__ */
+
+

���� \* __KERBEROS5__ */ �Ȥ����Τϥ����ȤΤ褦�Ǥ������ʤ��虜�虜����ʽ�����ȯ������Τ�������˶줷�ߤޤ��� +¾�Υ����ƥ�� GCC �ǤϤ���ˤϥ������˥󥰤��Фޤ�����Apple-GCC �ǤϤ��Ȥ� -pedantic ���Υ��ץ������դ��Ƥ⥦�����˥󥰤ϽФޤ��� +Apple-GCC �Ǥϼ��ν����ˤĤ��Ƥ⥦�����˥󥰤��Фޤ��� +C90 �����δ��Ф򤤤ޤ��ˤҤ����äƤ��ޤ���

+
+#endif __KERBEROS5__
+
+ +

3.9.10.4. �ޥ����ν�����

+

���Τ褦���ü�ʥޥ����λȤ����ϡ�glibc �Υ������� Linux �Υ����ƥ�إå��ʤɤǤ��Ф��и������ΤǤ������������ firefox 3.0b3pre �Υ������򥳥�ѥ��뤷���¤�Ǥϡ��������� include ����� Mac OS X �Υ����ƥ�إå���ˤϸ����ޤ���

+ + +

3.9.10.5. Apple-GCC ���ȼ�����

+

Apple-GCC �ˤϰ��̤� GCC �Ȱۤʤ��ȼ��λ��ͤ������Ĥ�����ޤ���

+ + +

3.9.11. firefox 3.0b3pre �������Υץ�ץ�����

+

firefox �� developing version �Ǥ��� 3.0b3pre (2008/01) ���ʤ�� 3.0-beta3-prerelease �Υ�������Linux/x86 + GCC 4.1.2 ����� Max OS X + GCC 4.0.1 �ǥץ�ץ����å��� mcpp V.2.7 ���֤������ƥ���ѥ��뤷�Ƥߤޤ����� +mcpp �� -K ���ץ����Υƥ��Ȥ��ͤơ����٤� -Kv ���ץ������դ��Ƽ¹Ԥ������ν��Ϥ� cc1 (cc1plus) ���Ϥ��Ƥ��ޤ��� +���η�̡�����ѥ��뤬����˽�λ����firefox �ΥХ��ʥ꤬���������Τ�Τ���뤳�Ȥ��Ǥ��ޤ�����*1

+

firefox �Υ������Υץ�ץ�������� portability �����ΤȤ��ƤϤ��ʤ�⤤��ΤǤ��� +glibc �Υ������ˤ褯������褦�� GCC-local �ʻ��ͤؤΰ�¸�Ϥ��ޤ긫���ޤ��� +Linux �� Mac OS X �� GCC��Windows �� Visual C ������ʥ������åȤȤ��Ƥ�������Τ��ȤϤ���ޤ���

+

�Ȥϸ������ץ�ץ������� portability ������� GCC �� Visual C �����̤�Ф���櫓�Ǥ⤢��ޤ��� +�ʲ��˶���Ū�˸�Ƥ���Ƥߤޤ��� +�ʤ���GCC ������ˤĤ��ƤϽ�ʣ���򤱤뤿�ᡢ�����Ǥ��������ޤ��� +3.9.4, 3.9.8 ���򻲾Ȥ��Ƥ��������� +firefox �����椹�뤿�� glibc �򤷤Ф��а����礤�˽Ф��Ƥ��ޤ�����glibc �ˤĤ��ƤΥ����Ȥ⤳���Υ��������ˤ���ޤ���*2

+

��:

+

*1 �������� mozilla.org �� CVS ��ݥ��ȥ꤫�� checkout ������ΤǤ��롣 +����򥳥�ѥ��뤷�����Ĥ�ư���� mcpp �� -K ���ץ�����ƥ��Ȥ��뤿��Ǥ��ä��� +���Υ��ץ����� Taras Glek ����Ƥˤ���ΤǤ��뤬����� mozilla project �� C/C++ �������� refactoring �˼���Ȥ�Ǥ���Τǡ�mcpp �κ�Ԥ� firefox �Υ������򤳤Υ��ץ����Υƥ��Ȥ˻Ȥä��ΤǤ��롣 +-K (-Kv) ���ץ����ˤĤ��Ƥ� 2.4 �򻲾ȡ�

+

*2 firefox �Υ����ǥ��󥰡������ɥ饤��ϼ��ΤȤ����ˤ��롣 +�����������ƤϤ��ʤ�Ť���ΤǤ��롣
+portable-cpp

+ +

3.9.11.1. GCC-local �ʻ��ͤϤۤȤ�ɻȤ��ʤ�

+

glibc �Υ������ǻ����Ȥ��Ƥ��뼡�Τ褦�� GCC-local �ʻ��ͤϡ�firefox �Υ������ˤϸ����ޤ��� +��������Linux ��ǥ���ѥ��뤹����ϡ������ƥ�إå��� GCC2 ���ͤβ��Ѱ����ޥ����ʤɤ��ФƤ��ޤ�����������̤Ǥ���

+ + +

���Τ�Τ� glibc �Ǥ�Ƕ�ΥС������ǤϻȤ��ʤ��ʤäƤ����ΤǤ�����firefox �Ǥ�Ȥ��Ƥ��ޤ���

+ + +

3.9.11.2. #include_next

+

��������#include_next �����ϣ��ĤΥǥ��쥯�ȥ�˸¤äƤ������󤢤�ޤ��� +����� configure �ˤ�ä���������� config/system_wrappers �Ȥ����ǥ��쥯�ȥ�Ǥ��� +����������������ΤϤ��٤�Ʊ�����򤷤��� 900 �ܤΥإå��ե�����Ǥ��� +�㤨�� stdio.h �ϼ��Τ褦�ˤʤäƤ��ޤ���

+
+#pragma GCC system_header
+#pragma GCC visibility push(default)
+#include_next <stdio.h>
+#pragma GCC visibility pop
+
+

����� GCC 4.* �� #pragma GCC visibility * �ε�ǽ�����Ѥ��뤿��Τ�ΤǤ��� +�����ǡ�config/gcc_hidden.h �Ȥ����ե����뤬����ޤ��� +����ϼ��Τ褦�ʤ�Τǡ����줬¿���� translation unit �� -include ���ץ����ˤ�ä���Ƭ���ɤ߹��ޤ�ޤ���

+
+#pragma GCC visibility push(hidden)
+
+

system_wrappers �ǥ��쥯�ȥ�Ϻ�ͥ��� include �ǥ��쥯�ȥ�Ǥʤ���Фʤ�ʤ��Τǡ���˺ǽ�� -I ���ץ����ǻ��ꤷ�ʤ���Фʤ�ʤ��Ȥ����Τ����դ��٤����Ǥ��������� #include_next �λȤ����ϴ����Ǥ��ꡢ�ä�����Ϥʤ��Ȼפ��ޤ���

+

������nsprpub �ǥ��쥯�ȥ�Ǥ� -include gcc_hidden.h ������� -fvisibility=hidden ���ץ���󤬻��ꤵ����礬���Ф��Ф���ޤ��������ξ��� system_wrappers �Υإå��ե�����ϻȤ��ޤ��� +���Υǥ��쥯�ȥ�Ϥޤ���������Ƥ��ʤ��褦�Ǥ���

+ +

3.9.11.3. C99 ����ꤻ���� C99 �λ��ͤ�Ȥ�

+

��Ω�ĤΤ� C99 ����ꤻ���� C99 �λ��ͤ�Ȥ���ΤǤ��� +GCC �Ǥϥ������ե�����̾�� *.c ���ȥǥե���ȤǤ� gnu89 �Ȥ������ͤ��Ȥ��ޤ���������� C90 �ˤ����Ĥ��� C99 ���ͤ� GCC �ȼ��λ��ͤ�ä�������Ū�ʤ�ΤǤ��� +firefox �Υ������ˤϡ���������Ѥ��Ƽ��Τ褦�� C99 �λ��ͤ���ۤΤ����˻ȤäƤ����Τ�����ޤ���

+ +

�����λ��ͤ� Visual C 2005, 2008 �Ǥ�Ȥ��ޤ��� +GCC �Ǥ� -std=c99 �Ȥ������ץ���󤬤���Τǡ������Ȥ������Ȥ����Ǥ��� +��������Visual C �ˤϵ��ʤΥС���������ꤹ�륪�ץ����Ϥʤ��Τǡ����ۤΤ����˻Ȥ���������ޤ��� +�������äơ����ۤΤ����� C99 �λ��ͤ�Ȥ����ȤˤĤ��Ƥϡ����פʽ����Ϥθ����Ǥ� firefox �Υ��������դ�뤳�ȤϤǤ��ޤ���*1

+

�Ȥ����ǡ����ۤΤ����� C99 ���ͤ�ȤäƤ��ʤ��顢���Ѱ����ޥ����Ϥʤ����Ȥ��Ƥ��ޤ��� +Visual C �Ǥ� 2005 �ǻȤ���褦�ˤʤä��ΤǤ�����2003 �ޤǤϻȤ��ʤ��ä��Τǡ��򤱤Ƥ����ΤǤ��礦����

+

��:

+

*1 C++ �Ǥ� GCC �� "gnu++98" �Ȥ������ͤ��ǥե���ȤǤ��롣 +����� C++98 + GCC extensions �Ȥ���Ƥ��뤬���ºݤˤ� C99 �λ��ͤ����ߤ��Ƥ��롣 +������Visual C �� C �Ǥ� C90��C++ �Ǥ� C++98 �˽��Ȥ���Ƥ��뤬���ºݤˤϤɤ���� C99 ���ͤ��ȼ��λ��ͤ����ߤ��Ƥ��ꡢVisual C 2005, 2008 �ǤϤ��Ȥˤ����Ǥ��롣 +���ʤ����GCC �� Visual C ������ʤ��ȼ����ͤ����ߤ��Ƥ���ΤǤ��롣 +�Ȥ�櫓 Visual C �ϵ��ʤΥС����������Ǥ��ʤ��Τ�����Ȥ����Ǥ��롣

+ +

3.9.11.4. Function-like �ޥ�����̾�����ִ������ object-like �ޥ���

+

Function-like �ޥ�����̾�����ִ������ object-like �ޥ����������¾�Υץ������ˤ�褯�������ΤǤ��� +firefox �Υ������ˤ⤢�ޤ�¿���Ϥ���ޤ��󤬡����ΤȤ����˸����ޤ���

+content/base/src/nsTextFragment.h, +modules/libimg/png/mozpngconf.h, +modules/libjar/zipstub.h, +modules/libpr0n/src/imgLoader.h, +nsprpub/pr/include/obsolete/protypes.h, +nsprpub/pr/include/private/primpl.h, +nsprpub/pr/include/prtypes.h, +parser/expat/lib/xmlparse.c, +security/nss/lib/jar/jarver.c +security/nss/lib/util/secport.h, +xpcom/glue/nsISupportsImpl.h + +

�ޤ���firefox �� make ���뤳�Ȥ�¿���Υإå��ե�����ؤΥ�󥯤���ȯ�Ķ��ѤΥǥ��쥯�ȥ�˺��졢������ firefox �γ�ȯ�Ķ��򥤥󥹥ȡ��뤹��� /usr/include/firefox-VERSION/ �����äƤ����ޤ�����������ˤϾ嵭�Υե�����ؤΥ���ܥ�å���󥯤������Ĥ�����ޤ��� +configure �ˤ�ä���������� mozilla-config.h �ˤ⤳�μ�Υޥ������������ޤ���

+

�����Ϥ�Ϥ� function-like �ޥ����Ȥ��ƽ񤤤��ۤ��������������狼��䤹���ʤ�ޤ��� +�ºݡ�firefox �Υ������ˤ⤽�ν�����¿������ޤ��� +�ͤˤ�äƽ������ۤʤ�ΤǤ��礦��������ˤĤ��Ƥϥ����ǥ��󥰡������ɥ饤����᤿�ۤ����ɤ������Ǥ���

+ +

3.9.11.5. 'defined' ��Ÿ�������ޥ���

+

glibc �ǻ��˸������ִ��ꥹ����� 'defined' �Ȥ����ȡ�����νФƤ���ޥ�������firefox �ˤ⣱�Ĥ�������ޤ���

+

modules/oji/src/nsJVMConfigManagerUnix.cpp +�Ȥ����ե�����Ǥϼ��Τ褦�ʥޥ�����������ơ� +

+#define NS_COMPILER_GNUC3 defined(__GXX_ABI_VERSION) && \
+                          (__GXX_ABI_VERSION >= 102) /* G++ V3 ABI */
+
+��ʬ���Ȥ���Ǽ��Τ褦�˻ȤäƤ��ޤ���

+
+#if (NS_COMPILER_GNUC3)
+
+

���Υޥ������ѻߤ��ơ�#if �Ԥϼ��Τ褦�˲����٤��Ǥ���

+
+#if defined(__GXX_ABI_VERSION) && (__GXX_ABI_VERSION >= 102) /* G++ V3 ABI */
+
+

���Υե����뤬 GCC �Ǥ�������ѥ��뤵��ʤ���Τ��Ȥϸ����������Ϥθ����ͤ����Ѥ���Τ��ɤ����ȤǤϤ���ޤ���*1

+

��:

+

*1 mcpp �� V.2.7 ����� GCC-specific-build �Ǥ� #if �ԤΥޥ����˽ФƤ��� 'defined' �� GCC ��Ʊ�ͤ˽�������褦�ˤ����� +���������������˥󥰤��Ф�Τǡ����������������ۤ����ɤ���

+ +

3.9.11.6. #endif �������� token sequences

+

jpeg �ǥ��쥯�ȥ����μ��Υե�����ˤϡ����� #endif �Ԥ˥����Ȥ������ȥޡ����ʤ��˽񤫤�Ƥ���Ԥ�����ޤ��� +�������Ƕ�Υ��ץǡ��Ȥ�ȯ��������ΤǤ���

+
+jmorecfg.h, jconfig.h, jdapimin.c, jdcolor.c, jdmaster.c
+
+

���ν����� 1990 ǯ����椴���ޤǤ� UNIX �ϤΥ��եȥ������˸����ޤ����������ޤǤϤܾۤü����Ƥ����ΤǤ��� +���� glibc �������Ǥ�����Ȥ��Ƥ��ޤ��� +�������� GCC �⤳��ˤϥ������˥󥰤�Ф��ޤ��� +�������������Υ������Ϥ���ʤ��ȤˤϤ����ޤ��ʤ��Τ褦�Ǥ��� +Apple-GCC �ϥ������˥󥰤�Ф��ޤ��󤬡������ Mac OS ��ǥ��ǥ��åȤ��줿��ΤʤΤǤ��礦����

+ +

3.9.11.7. �ץ�ץ��������פ��륢����֥饽����

+

������֥饽������ *.s (*.asm) �Ȥ���̾���ˤʤäƤ��ơ���ˤϥޥ������Ȥ��Ƥ����Τ⤢��ޤ������ץ�ץ����å����ƤӽФ���뤳�Ȥϸ�§�Ȥ��Ƥ���ޤ���

+

��������Mac OS X / ppc �Ǥϣ��Ĥ����㳰�����ꡢxpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_rhapsody.s �ǥץ�ץ����å����ƤӽФ���ޤ��� +���Υե�����ˤϤ��ä����Ԥ� #if �֥��å������Ĥ��뤫��Ǥ��������ȤʤäƤ�ɬ�פʤ��Ȼפ���֥��å��Ǥ���

+ +

3.9.11.8. -include ���ץ����

+

firefox �Υ���ѥ���Ǥ� configure �� mozilla-config.h �Ȥ����إå��ե����뤬��������ޤ�������Ⱦ�Υ������Υ���ѥ���Ǥ��Υإå��� -include ���ץ����ǻ��ꤷ�Ƥ��ޤ��� +config/gcc_hidden.h �ˤĤ��Ƥ�Ʊ�ͤǤ��� +�ʤ������򥽡�������Ƭ�� #include ���ʤ��ΤǤ��礦����

+ +

3.9.11.9. �ޥ����κ����

+

�ޥ������ۤäƺ��������뤳�Ȥ����ˤ���ޤ���

+ + +

3.9.11.10. Ĺ��ʥ�����

+

���Υե�����ˤϿ�ɴ�԰ʾ�ˤ����Ĺ��ʥ����Ȥ�����ޤ���

+

extensions/universalchardet/src/base/Big5Freq.tab, extensions/universalchardet/src/base/EUCKRFreq.tab,intl/unicharutil/src/ignorables_abjadpoints.x-ccmap, layout/generic/punct_marks.ccmap

+

���Ȥ� intl/uconv/ucv*/ �Ȥ����ǥ��쥯�ȥ�ˤ�Ĺ��ʥ����Ȥ���ĥե����뤬¿������ޤ��� +��ˤϣ��ĤΥ����Ȥ� 8000 �Ԥ�Ķ�����ΤޤǤ���ޤ��� +�����Ϥ��٤� *.uf, *.ut �Ȥ���̾���ˤʤäƤ��ޤ��� +������� unicode �ȥ������γƼ� encoding �Ȥδ֤� mapping table �Τ褦�ǡ��ġ���ˤ�äƼ�ư����������ΤǤ��� +C/C++ �Υ������ˤϸ����ޤ��󤬡�C++ �Υ��������� include ����ޤ��� +�����ȤϤ����Υɥ�����Ȥ�¾�Υġ���Τ����ɽ�Τ褦�Ǥ���

+

Ĺ��ʥɥ�����Ȥ�ɽ�򥳥��ȤȤ��ƥ�������˴ޤ��Τϡ��������ʤ�ΤǤ��礦���� +�������ĥ꡼�˴ޤ��Ȥ��Ƥ⡢�������Ȥ��̤Υե������ʬΥ���٤��Ǥ��礦��

+

�ʾ�Υե�����Ϥ������ Linux �ǤϻȤ��ޤ�����Mac OS X �ǤϻȤ��ޤ��� +¾���� Mac OS X �Ǥ� framework �ǥ��쥯�ȥ���Υ����ƥ�إå������Ф��лȤ��ޤ�����������ˤϥ����Ȥ���Ⱦ�����Ƥ����̯�ʥե����뤬���������ޤ���

+ +

3.9.11.11. ���ԥ����ɤκ���

+

firefox �Υ������β��ԥ����ɤ� [LF] �Ǥ�����[CR][LF] �ιԤ����������äƤ���ե����뤬���ܤ���ޤ��� +�����Ϥ������û���֥��å��ǡ��������˥ѥå�������������ˡ�������ʬ���� [CR][LF] �ˤʤäƤ��ޤä���ΤΤ褦�Ǥ��� +�������� Windows ����Խ�������ϡ����ԥ������Ѵ��ġ���ǥ����å����٤��Ǥ��礦��

+
+ +

3.10. Visual C++ �Υ����ƥ�إå�������

+

Visual C++ 2003, 2005, 2008 �Ǥ����Ĥ��Υ���ץ�ץ������Υץ�ץ������� mcpp ��ȤäƤߤޤ��������Υ����ƥ�Υ����ƥ�إå��ˤϡ��ץ�ץ�������θߴ���������Ȥʤ�褦�ʤ�ΤϤ������ʤ��褦�Ǥ������Τ褦�ʤ�ΤϤ���ޤ�����������¾�ν����ϤǤ⤷�Ф��и������Τǡ��ä�����Ȥʤ��ΤǤϤ���ޤ���

+
    +
  1. C99 �λ��ͤϤۤȤ�ɼ�������Ƥ��ʤ��ä��������顢C �� // �����Ȥ�¿�Ѥ���Ƥ�����
    +
  2. Function-like �ޥ�����̾����Ÿ������� object-like �ޥ�������������������롣
    +
  3. Visual C++ 2003 �Ǥ� limits.h �˴ְ�ä��ޥ�����������Ĥ��ä� +��Visual C++ 2005 �Ǥ�ľ���줿�� cpp-test.html#5.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 �Ǥ⡢���Υޥ�����Ʊ���Ǥ��롣
+Visual C++ 2008 express edition �� Microsoft SDKs/Windows/v6.0A/Include �ǥ��쥯�ȥ��Ʊ̾�Υإå��ե�����Ǥ�Ʊ�ͤǤ��롣

+ +

3.10.2. Identifier ��� '$'

+

�⤦��Ĥ�����ϡ�Visual C++ 2008 �Υ����ƥ�إå��Ǥϥޥ���̾�� '$' ��Ȥ����������������������ȤǤ��� +����� Visual C++ 2005 �ޤǤˤ�ʤ��Ϥ���ޤ���Ǥ��������㳰Ū�ʤ�ΤˤȤɤޤäƤ��ޤ����� +��������2008 �ǤϤ��������˽ФƤ��Ƥ��ޤ���

+

�Ǥ���Ω�ĤΤ� Microsoft Visual Studio 9.0/VC/include/sal.h �Ȥ����إå��Ǥ��� +����� Visual C++ �� SAL (standard source code annotation language) �ʤ��Τ򥽡�����˵��Ҥ��뤿��Υޥ�����������Ƥ����ΤǤ��� +�����Ǥ� '$' ��ޤ�̾�������̤˻Ȥ��Ƥ��ޤ��� +���Υإå���¿����ɸ��إå��ե����뤫�� Microsoft Visual Studio 9.0/VC/include/crtdefs.h �Ȥ����إå���𤷤� #include ����ޤ��� +�������äơ�¿���Υ������Υ���ѥ���ǤϤ����Υޥ������Τ�ʤ������˻Ȥ��뤳�Ȥˤʤ�ޤ���

+

-Za ���ץ������դ��� cl�ʥ���ѥ���ˤ�ư����ȡ�SAL ��̵���ˤʤꡢsal.h �� '$' ��ޤ�̾���Ϥ��٤ƾä���褦�ˤϤʤäƤ��ޤ������ʤ������̾����ɬ�פʤΤ�����˶줷�ߤޤ��� +GCC �Ǥ� identifier �� '$' ���Ȥ���Τ��ǥե���ȤˤʤäƤ��ޤ������ºݤˤϻȤ��Ƥ�����ϤۤȤ�ɸ��ݤ��ʤ��ʤäƤ��ޤ���

+

Microsoft SDKs/Windows/v6.0A/Include �ǥ��쥯�ȥ�ˤ⤳�μ��̾������ĥإå��ե����뤬����ޤ��� +specstrings*.h �Ȥ����إå��Ǥ��� +�����Υإå��� WinDef.h ��𤷤� Windows.h ���� include ����ޤ������������ -Za ���ץ�������ꤷ�Ƥ� '$' ���ä���褦�ˤϽ񤫤�Ƥ��餺��ñ�˥��顼�ˤʤ�����Ǥ��� +�������äơ�Windows.h �� include ���륽������ -Za ���ץ����ǥ���ѥ��뤹�뤳�ȤϤǤ��ޤ���

+
+ +

4. ������������

+

�ø���Υץ�ץ��������ͤ���줳���˽񤯤櫓�ˤϤ椭�ޤ���cpp-test.html �� 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 �ǤǤ� 3.1+3.2�Ǥ��롣 +Compiler-independent �ǤǤ� 3.2 �Ǥ��롣
    +
    +3.1. �����ȥǥ��쥯�ȥ�ʤ������ mcpp ��ư���Ρˡ�#include ���ͥ��Ȥ���Ƥ��Ƥ⡢��˥����ȥǥ��쥯�ȥ����Ȥ��롣
    +3.2. �������ե�����ʥ��󥯥롼�ɸ��ˤΤ���ǥ��쥯�ȥꡣ#include ���ͥ��Ȥ���Ƥ����硢�إå��ե����뤬�̥ǥ��쥯�ȥ�ˤ���ȡ����Τ��Ӥ˴�ब����Ƥ椯��

    +GCC �ǤǤϤ���� -iqoute ���ץ����ǻ��ꤵ�줿�ǥ��쥯�ȥ꤬����������롣 +Visual C �ǤǤϥ������ե�����οơʥ��󥯥롼�ɸ��˥ե�����Υǥ��쥯�ȥ��缡�����Τܤäơ�����������롣 +�����ȯ���Ǥ��ʤ���С�<file-name> �η���Ʊ�ͤΥ������򤹤롣
    +
    +
  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_PATH��C++ �Ǥ� CPLUS_INCLUDE_PATH ��ˡ�����¾�Ǥ� INCLUDE��C++ �Ǥ� 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�ˡ�
    +
+

-I- (GCC �Ǥ� -nostdinc��Visual C �Ǥ� -X) ���ץ�������ꤹ��ȡ��嵭�� 4.4 �ʹߤΥ������ϹԤ��ޤ���

+

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

+
+ +

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.4. #if ����ɾ��

+

#if ����ɾ���ϥۥ��Ƚ����ϡ�mcpp �򥳥�ѥ��뤷�������ϡˤȥ������åȽ����ϡ�mcpp ��Ȥ������ϡˤ����ĺ�����������ˤ�äƷ�ޤ�ޤ��������η����ۤʤ���ϡ��������ۤ��η��� #if ���η��ˤʤ�ޤ���Compiler-independent �Ǥ� 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 ���ɤ��ؤ��Ƥ���������

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

�ɤ���ˤ��Ƥ���������ȡ�����Ͼ��������ͤ�Ȥ�ޤ���
+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 ���Ѵ�����ޤ���

+

��:

+

*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 �� ((���Х����ܤ��� << 8) + ���Х����ܤ���) ��ɾ�����ޤ���8 �� <limits.h> �� CHAR_BIT ���͡ˡ�

+

'ab', '\x12\x3', '\x123\x45' �Ȥ����褦�� multi-character character constant �Ǥϡ�'a', 'b', '\x12', '\x3', '\x123', '\x45' ���򤽤줾�죱�Х��ȤȤ��� [0, 0xFF] ���ϰϤ�ɾ���������η�̤��̥Х��Ȥ���缡 8 ���ĺ����եȤ����ʤ���­���Ƥ椭�ޤ���0xFF �� <limits.h> �� UCHAR_MAX ���͡ˡ����Ĥ� escape sequence ���ͤ� 0xFF ��Ķ�������ϡ�out of range �Υ��顼�Ȥʤ�ޤ����������äơ�ʸ�����åȤ� 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, 0xFFFF] ���ϰϤ�ɾ���������η�̤��̤� wide character ����缡 16 ���ĺ����եȤ����ʤ���­���Ƥ椭�ޤ������Ĥ� escape sequence ���ͤ����Х������ʤ������κ����ͤ�Ķ�������ϡ�out of range ���顼�Ȥʤ�ޤ����������äơ�ʸ�����åȤ� 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 �˰��̤��ޤ��� +��������STD �⡼�ɤ� -k �ޤ��� -K ���ץ���󤬻��ꤵ�줿�Ȥ��ϡ����̤����ˤ��Τޤ޽��Ϥ��ޤ��� +�ޤ��������� white space sequence �Ϻ�����ޤ��� +

��Ƭ�� white spaces �� POSTSTD �⡼�ɤǤϺ������¾�Υ⡼�ɤǤ����̰����ǡ����Τޤ޽��Ϥ��ޤ��� +��ԤϿʹ֤����Ϥ��ɤ���ΤĤ����˹�碌�Ƥ���ޤ���*1

+

������������ϥץ�ץ�����������ʳ����äǤ������θ�� 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 ���Ѵ����ޤ���

+

��:

+

*1 V.2.6.3 �ޤǤϸ�§�Ȥ��� one space �˰��̤��Ƥ�������V.2.6.4 �����ѹ�������

+
+ +

4.8. mcpp �¹ԥץ������Υǥե���Ȥλ���

+

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

+

Compiler-independent �Ǥ� mcpp �λ��ͤˤϽ����Ϥˤ�����ϤۤȤ�ɤ���ޤ��󤬡�OS �� CPU �ˤ����㤬��������ޤ���

+

mcpp �ˤ� compiler-independent-build �� compiler-specific-build �Ȥ����ꡢ���Τɤ���Ǥ⤤���Ĥ���ư��⡼�ɤ�����ޤ�������ˤĤ��Ƥ� 2.1 �򸫤Ƥ��������������Ǥ� STD �⡼�ɤ��濴���������ޤ���

+

�����κ�ʬ�ե������ makefile �ϼ��ν������ѤΤ�ΤǤ���

+
+ + + + + + + + + + + + +
FreeBSD 6.3 GCC V.3.4
Vine Linux 4.2 / x86 GCC V.2.95, V.3.2, V.3.3, V.3.4, V.4.1
Debian GNU/Linux 4.0 / x86 GCC V.4.1
Ubuntu Linux 8.04 / x86_64 GCC V.4.2
Fedora Linux 9 / x86 GCC V.4.3
Mac OS X Leopard / x86 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 2003-08, 2006-03
WIN32 Visual C++ 2003, 2005, 2008
WIN32 Borland C++ V.5.5
+
+

���Τۤ�����λ��äƤ��ʤ����ν����ϤˤĤ��Ƥ⡢�桼������ contribute ���줿��ʬ�ե����뤬��Ͽ����Ƥ��ޤ���

+
+ + + +
WIN32 Visual C++ V.6.0, 2002
WIN32 Borland C++ V.5.9 (C++Builder 2007)
+
+

������⤽���ν����ϼ��Ȥǥ���ѥ��뤵��ޤ��� +

+

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

+

DIGRAPHS_INIT == FALSE �ǥ���ѥ��뤵��Ƥ���Τǡ�digraph �� -2 (-digraphs) ���ץ�����ͭ���Ȥʤ�ޤ���
+TRIGRAPHS_INIT == FALSE �Ȥ��Ƥ���Τǡ�trigraph �� -3 (-trigraphs) ���ץ�����ͭ���Ȥʤ�ޤ���
+OK_UCN �� TRUE �ˤ��Ƥ���Τǡ�C99, C++ �� UCN (universal character name) ���Ȥ��ޤ���
+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
INCLUDE_NEST��#include �κ���ͥ��ȥ�٥�� 256
NBUFF�ʥ������κ����Ĺ��*1 65536
NWORK�ʽ��Ϥκ����Ĺ�� 65536
NMACWORK�ʥޥ���Ÿ�����������Хåե��Υ�������262144
+
+

��������GCC �ǡ�Visual C �ǤǤϽ��Ϥκ����Ĺ�� NWORK �ǤϤʤ� NMACWORK �Ǥ���

+

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

+

MBCHAR �ʥǥե���Ȥ� multi-byte character encoding��

+
+ + + +
FreeBSD, Linux, Mac OS X EUC_JP
Win32, CygWIN, MinGW SJIS
+
+

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

+

STDC_VERSION ��__STDC_VERSION__ �ν���͡�

+
+ + + +
Compiler-independent, GCC 2199409L
����¾ 0L
+
+

HAVE_DIGRAPHS ��digraphs �򤽤Τޤ޽��Ϥ��뤫��

+
+ + + +
Compiler-independent, GCC, Visual CTRUE
����¾ FALSE
+
+

EXPAND_PRAGMA ��C99 �� #pragma �Ԥΰ�����ޥ���Ÿ�����뤫��

+
+ + + +
Visual C, Borland CTRUE
����¾ FALSE
+
+

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 ���̾�� token ���Ѵ�����Ƥ�����Ϥ���ޤ���

+

EXPAND_PRAGMA �� TRUE �Ǥ��äƤ⡢STDC, MCPP, GCC �Τɤ줫�ǻϤޤ� #pragma �Ԥϥޥ���Ÿ�����ޤ���

+

Include �ǥ��쥯�ȥ�ϼ��Τ褦�����ꤷ�Ƥ���ޤ���
+�ޤ���UNIX ���Ǹ��������� system-specific �ʤ�Τ���� site-specific �ʤ�Τϼ����̤�Ǥ�������� compiler-independent �ǤǤ�Ʊ���Ǥ���

+
+ + +
FreeBSD, Linux, Mac OS X, CygWIN/usr/include, /usr/local/include
+
+

Mac OS X �ǤϤ��Τۤ���framework �ǥ��쥯�ȥ꤬ /System/Library/Frameworks, /Library/Frameworks �����ꤵ��ޤ���

+

MinGW �Ǥ� /mingw/include ��ɸ��� include �ǥ��쥯�ȥ�ˤʤ�ޤ���

+

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

+

mcpp �� GCC ��, Visual C �ǰʳ��Ǥϡ��ץ�ץ�����������̤� NWORK-1 ��Ķ������ϡ�����ʲ���Ĺ���˹Ԥ�ʬ�䤷�ƽ��Ϥ��ޤ���ʸ�����ƥ���Ĺ���� NWORK-2 �ʲ��Ǥʤ���Фʤ�ޤ���

+

ǰ�Τ���˷����֤��ޤ������ʾ�� italic ��ɽ������Ƥ���ޥ����Ϥ������ mcpp �򥳥�ѥ��뤷�����Τ�ΤǤ��ꡢmcpp �μ¹ԥץ�����ब���äƤ����Ȥ߹��ߥޥ����ǤϤ���ޤ���

+

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

+

__STDC__ �� 1 �ʾ�ξ��֤Ǥϡ�_ �ǻϤޤ�ʤ��Ȥ߹��ߥޥ����Ϻ������ޤ���-N (-undef) ���ץ����Ǥ� __MCPP �ʳ������٤ƺ������ޤ������ξ�� -D ���ץ��������ꤷľ���Ƥ⤫�ޤ��ޤ��󡣽����ϤΥС�����󤬾����㤦������ include directory �����ʤ����ϡ�mcpp ��ꥳ��ѥ��뤷�ʤ��Ƥ⡢������ˡ�ǥС������ޥ������������뤳�Ȥ��̥С��������б������뤳�Ȥ��Ǥ��ޤ���-N �� -U ��Ȥ�ʤ��Ƥ⡢-D ������Υޥ���������������뤳�Ȥ��Ǥ��ޤ���

+

-+ (-lang-c++) ���ץ����� C++ �Υץ�ץ���������ꤷ�����ϡ�__cplusplus �������������ޤ��������ν���ͤ� 1L �Ǥ������Τۤ��ˤ���ˤ����Ĥ��Υޥ����������������ޤ���

+

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, Visual C 2008 �� long long ����äƤ���Τǡ�#if ���� long long, unsigned long long ��ɾ�����ޤ���Visual C 6.0, 2002, 2003, 2005, Borland C 5.5 �Ǥ� long long �Ϥ���ޤ��󤬡�__int64, unsigned __int64 �Ȥ�����������ΤǤ����Ȥ��ޤ���

+

�����ν����ϤǤ� 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, 2008 �ʳ��ǤϤ��줬���󥹥ȡ��뤵��Ƥ�����ϡ�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.html#4.extra ���ȡˡ�*2

+

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

+

��:

+

*1 ����� <backslash><newline> �ˤ�����³�򤷤���ι�Ĺ�ˤ⡢�����Ȥ� a space ���Ѵ�������ι�Ĺ�ˤ�Ŭ�Ѥ���롣�����Ȥ�ʣ���Ԥˤޤ����äƤ����硢�����Ȥ��Ѵ��ˤ�äƤ��줬���Ԥ�Ϣ�뤵��뤳�Ȥ����ա�

+

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

+
+ +

5. ���ǥ�å�����

+ +

5.1. ���ǥ�å������η���

+

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

+

���ǥ�å������ϼ��η���ȤäƤ��ޤ���

+
    +
  1. "filename:line: " �� "fatal error: ", "error: ", "warning: " �Τɤ줫��³��������� 5.3 - 5.9 �Υ�å������Τ����Τɤ줫��³����"filename:line: " �˻Ϥޤ룱�Ԥο��ǥ�å������Ȥ����ΤϤ�����������ʻ��ͤǤ��뤬��UNIX ��Σý����ϤǤ�����Ū�ʿ��Ƿ����ǡ��Ƽ�Υġ��뤬���������Ȥ��Ƥ���ΤǺ��Ѥ��Ƥ��롣���̾�Σ��Ԥˤ����ޤ�ʤ����Ȥ����Ф��Ф��롣
    +
  2. �ޥ���Ÿ����Ǥ���С����Υޥ����ƤӽФ���ɽ������롣�ͥ��Ȥ��줿�ޥ����ƤӽФ��Ǥ���С����줾��Υޥ���̾��ɽ������롣���Υޥ��������ɽ�����졢���Υޥ�������Τ��륽�����ե�����̾�ȹ��ֹ��ɽ������롣
    +
  3. �������ե�����̾�ȹ��ֹ�Ȥ��ιԤ�ɽ������롣�ե����뤬 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 16trigraph, digraph �ˤĤ��Ƥ� warning
+
+

mcpp �Ϥ�����¿��ο��ǥ�å��������Ѱդ��Ƥ��ޤ���STD �⡼�ɤǤϼ��Τ褦�ʼ���ˤΤܤäƤ��ޤ���

+
+ + + + + + + + +
fatal error 17 ��
error 76 ��
warning class 1 49 ��
warning class 2 15 ��
warning class 4 17 ��
warning class 8 30 ��
warning class 16 2 ��
+
+

�����ˤĤ��ơ���§�Ȥ��Ƥ��ιԤ�����������ʬ�����Ū�˻�Ŧ���ޤ���

+

�ʤ����ʲ��������Ǥϡ����ǥ�å������ǰ��Ѥ���륽������Υȡ��������ͤ���ʬ�ˤ���Ȥ��Ʋ����Υȡ������Ϥᤳ��Ǥ��ޤ������Τ��������ͤΤ����˥ޥ���̾��񤤤Ƥ���Ȥ����ϡ��ºݤˤϤ��Υޥ�����Ÿ�������ͤ�ɽ������ޤ���
+�ޤ������ˤ�äƥ��顼�Ȥ��ƽФ��ꥦ�����˥󥰤Ȥ��ƽФ��ꤹ���å������⤢��ޤ����ʲ��������Ǥ�Ʊ��Υ�å������ˤĤ��ƤϺǽ�˵��ܤ���Ȥ����Ǥ��������ä������Ȥ�ñ�˥�å��������¤٤�����ˤ��ޤ���

+
+ +

5.2. Translation limits

+

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

+
+ +

5.3. Fatal error

+

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

+
+ +

5.3.1. mcpp ���ȤΥХ�

+ + +

5.3.2. ʪ��Ū���顼

+ + +

5.3.3. Translation limits �������Хåե��Υ��顼

+ +

���Σ��ĤΥ��顼�ϥȡ����󤬤��ۤ�Ĺ���ʤ��Ƥ⡢�ޥ���Ÿ����ˤ��Υȡ�����ΤȤ����ǥХåե������С��ե����ˤʤä����ˤⵯ����ޤ������ξ��ϥޥ����ƤӽФ���ʬ�䤷�Ƥ���������

+ + +

5.3.4. #pragma MCPP preprocessed �˴ؤ��륨�顼

+ + +

5.4. Error

+

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

+

�ޤ���Standard C �� undefined �Ȥ���Ƥ����Τ�¿���ˤĤ��Ƥ� error ��å������ޤ��� warning ���Фޤ���Undefined �Ǥ���ʤ��� error �� warning ��Фʤ��Τϡ����Τ�Τ����Ǥ���

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

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

+

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

+ +

5.4.1. ʸ���ȥȡ�����˴ؤ��륨�顼

+ +

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

+
+#error  I can't understand.
+
+

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

+

�ʤ��������åפ���� #if group ����Ǥ� pp-token ���顼�ϥ��顼�Ȥʤ�ޤ���

+ + +

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 �ʳ��ϥ������˥󥰤�����Фޤ���

+ + +

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 ���ǤϤ��ޤ줿���Ĥιԥ֥��å���ؤ��ޤ���

+ +

���Σ��Ĥ� #asm, #endasm ���б��ط��Υ��顼�Ǥ����������pre-Standard �⡼�ɤ�����ν����Ϥξ������Ǥ���

+ + +

5.4.4. �ǥ��쥯�ƥ��ֹԤ�ñ��ʹ�ʸ���顼

+

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

+ +

���Υ��顼�� Standard �⡼�ɤξ������ǡ������Υǥ��쥯�ƥ��֤�̵�뤵��ޤ���OLDPREP �⡼�ɤǤϥ��顼�⥦�����˥󥰤�Ф���KR �⡼�ɤǤϥ������˥󥰤Ȥʤꡢ���� "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 �Υ��顼�Ϥ��Ȥ�ɾ���򥹥��åפ������ʬ����ˤ��äƤ�����å�����ޤ���

+ +

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

+ + +

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 ����ʸ������ϻȤ��ʤ��Τǡ��̤Υ��顼�ˤʤ�ޤ���

+ +

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

+ + +

5.4.7. #define �Υ��顼

+

���� #define �˴ؤ��륨�顼�Ǥ��� +�ޥ������������ޤ���

+

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

+ +

GCC-specific-build �� STD �⡼�ɤǤ� GCC2 ���ͤβ��Ѱ����ޥ������Ȥ��ޤ��������Υޥ�������� __VA_ARGS__ ���Ȥ��Ƥ���ȡ����Υ��顼�ˤʤ�ޤ��� +__VA_ARGS__ ��Ȥ��ʤ� GCC3 ���ͤ� C99 ���ͤǽ񤫤ʤ���Фʤ�ޤ���

+ + +

5.4.8. #undef �Υ��顼

+

���� #undef �˴ؤ��륨�顼�Ǥ���

+ + +

5.4.9. �ޥ���Ÿ���Υ��顼

+

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

+ +

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

+ +

���Υ��顼�� STD �⡼�ɤ� -K ���ץ�������ꤷ���Ȥ������Τ�ΤǤ��� +�Ȥ�ˡ��ޥ�������ü��ʣ���ʤ��ᡢmacro notification �Τ���ΥХåե���­��ʤ��ʤä����Ȥ��̣���Ƥ��ޤ��� +�ºݤˤϤޤ����������ޤ���

+ + +

5.4.10. #error, #assert

+ + +

5.4.11. #include ���

+ + +

5.4.12. ����¾�Υ��顼

+

���Σ��Ĥ� Standard �⡼�ɤ� C99 �����Τ�ΤǤ��� +C++ �Ǥ� -V199901L ���ץ����ǵ�ư��������Ʊ�ͤǤ���

+ +
+ +

5.5. Warning (class 1)

+

ʸˡŪ�ˤϴְ㤤�ǤϤʤ��������ν񤭴ְ㤤�β�ǽ����������� portability ������Τ�����ˡ�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 ��Ф��ޤ���

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

Standard �⡼�ɤǤϡ�implementation-defined �Ȥ���Ƥ���ư���¿���ˤĤ��Ƥ� warning ��Ф��ޤ���Implementation-defined �Ǥ���ʤ��� warning �νФʤ��Τϡ������������Ǥ���

+
    +
  1. #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 �ǥ������ѥ���ɽ�����롣
    +
  2. #if ���Ǥ� single byte ʸ�������'a' ���ˤ�ɾ���ȡ�ñ��� multi- byte character �Υ磻��ʸ�������L'��' ���ˤ�ɾ��������ϴ���ʸ�����åȤ�Ʊ��Ǥ��äƤ⡢single byte �Υ������ʤȤ�������̵ͭ�Ȥ��������� en-coding �Ȥ��ˤ�ä� portability �Ϥ����¤���ΤǤ��뤬�����꤬�ʤ���UCN �ˤĤ��Ƥ�Ʊ�ͤǤ��롣
    +
  3. #if ��������������ӥåȱ黻������������ɽ���ˤ�äƷ�̤��ͤ��ۤʤ뤬����Ⱦ�Υޥ���ϣ��������ɽ����ȤäƤ���Τǡ����������Ȥ���� portability ������ϤۤȤ��¸�ߤ��ʤ���������������α��ӥåȥ��եȤ���� operand �������ޤ�������������ν����� portability ��˳�����Τǡ�warning ��Ф���
    +
  4. Token separator �Ȥ��Ƥ�ʣ���� white spaces �� sequence��Standard C �Ǥ� translation phase 3 �Ǥ���� one space �˰��̤��뤫�ɤ����� implementation-defined �Ȥ���Ƥ��뤬���̾�ϥ桼���Ϥޤä������ˤ���ɬ�פϤʤ���Portability ������ˤʤ�Τϡ�preprocessing directive �Ԥ� <vertical-tab> �ޤ��� <form-feed> ������������Ǥ��롣mcpp �ǤϤ����� space ���Ѵ����뤬�����λ��� warning ��Ф���ʣ���� space, tab �� sequence �� one space ���ۤäư��̤��롣
    +
  5. �������ȼ����Ȥ߹��ߥޥ����ˤĤ��Ƥ� warning �ϽФ��ʤ���
    +
  6. #pragma sub-directive �ˤĤ��Ƥ⸶§�Ȥ��� warning �ϽФ��ʤ���mcpp ���Ȥ��������� #pragma once, #pragma __setlocale, #pragma MCPP * �ǰ������ְ�äƤ�����ϡ�warning ��Ф����ޤ���GCC V.3 �Ǥ� #pragma GCC poison (dependency) �Τ褦�ˡ���������°�Υץ�ץ����å��Ͻ������뤬 mcpp �Ͻ������ʤ� #pragma �ˤĤ��Ƥ� warning ��Ф���
    +
  7. C99 �Ǥϡ�UCN sequence �� # �黻�Ҥˤ�ä�ʸ���󲽤�����硢\ �� \\ �Ȥ����դ��˽Ťͤ뤫�ɤ����� implementation-defined �ȤʤäƤ��뤬������ˤĤ��Ƥ� warning �ϽФ��ʤ���mcpp �Ǥ� \ �ϽŤͤʤ���
    +
+

�������äơ�mcpp �Ǥϥץ�ץ������Υ�٥�Ǥ� portability �Υ����å���ܴۤ����˹Ԥ����Ȥ��Ǥ��ޤ���

+

POSTSTD �⡼�ɤǤϡ� 2.1 �ˤ�����ͤΰ㤤������� STD �⡼�ɤ�Ʊ�ͤǤ��� +

+

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

+ +

5.5.1. ʸ�����ȡ����󤪤�ӥ����Ȥ˴ؤ��륦�����˥�

+ + +

5.5.2. ���뤷�ʤ��������ե�����Υ������˥�

+

�������ե�����κǸ�ιԤ�����Ⱦü�Ǥ�����ˡ����Υ������˥󥰤��Фޤ���old_prep �⡼�ɤǤϥ������˥󥰤�Фޤ���

+ +

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

+ + +

5.5.3. �ǥ��쥯�ƥ��ֹԤ˴ؤ���Ƽ�Υ������˥�

+ +

���� Standard �⡼�ɤξ������Ǥ���

+ +

���� STD �⡼�ɤξ������Ǥ���

+ +

���� lang-asm �⡼�ɤξ������Ǥ���

+ +

�ʲ��� #pragma �˴ؤ��륦�����˥󥰤� Standard �⡼�ɤξ������Ǥ����������˥󥰤ϽФƤ⤽�ιԤϸ�§�Ȥ��Ƥ��Τޤ޽��Ϥ���ޤ�����#pragma MCPP, #pragma GCC �ǻϤޤ�ԤΤ������ץ�ץ������ǽ��������٤���ΤϽ��Ϥ��ޤ��� +#pragma GCC visibility * �Τ褦�˥���ѥ�����󥫤Τ���ιԤϡ��������˥󥰤ʤ��ˤ��Τޤ޽��Ϥ���ޤ���

+ +

GCC �ǤǤϼ��Υ������˥󥰤��Фޤ���

+ +

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

+

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

+ +

���� 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 �ξ�硢����� GCC �ѤǤ� STD �⡼�ɤ� #endif �Ԥξ������Фޤ���Standard �⡼�ɤΤ���¾�ξ��ϥ��顼��OLDPREP �Ǥϥ��顼�⥦�����˥󥰤�Фʤ��ˡ�

+ + +

5.5.4. #if ���˴ؤ��륦�����˥�

+

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

+ +

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

+ +

���� #if (#elif, #assert) �Ԥ�������α黻�ȷ��˴ؤ��륦�����˥󥰤Ǥ�����Ϥꥹ���åפ������ʬ���˴ؤ��ƤϽФޤ����-W8 ���ץ����ǤϽФ�ˡ�

+

Standard �⡼�ɤǤ� #if ���� C90, C++98 �Ǥ� long long / unsigned long long ��ɾ�����ޤ�����������C90, C++98 �� long / unsigned long ���ϰϤ�Ķ�������ϥ������˥󥰤�Ф��ޤ���LL �Ȥ��� suffix �ˤĤ��Ƥ�Ʊ�ͤˡ�C99 �ʳ��Ǥϥ������˥󥰤��Фޤ��������Υ������˥󥰤� compiler-independent-build �Ǥ� class 1 �ǡ�compiler-specific-build �Ǥ� class 2 �Ǥ���
+POSTSTD �⡼�ɤǤ�ʸ������� #if ���ˤϻȤ��ʤ��Τǡ��������˥󥰤�Фޤ���ʥ��顼�ˤʤ�ˡ�

+ + +

5.5.5. �ޥ���Ÿ���˴ؤ��륦�����˥�

+

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

+ +

���Σ��Ĥ� OLDPREP �⡼�ɤ����Ǥ���¾�Υ⡼�ɤǤϥ��顼�ˡ�

+ + +

5.5.6. ���ֹ�˴ؤ��륦�����˥�

+

���Ϲ��ֹ�˴ؤ��륦�����˥󥰤Ǥ���

+ +

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

+ + +

5.5.7. #pragma MCPP warning (#warning)

+ + +

5.6. Warning (class 2)

+

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

+ +

#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 ���Ȥ��ޤ���������ˤĤ��Ƥ�Ʊ�ͤǤ��������Υ������˥󥰤� compiler-independent-build �Ǥ� class 1 �ǡ�compiler-specific-build �Ǥ� class 2 �Ǥ���

+ +

���Σ��Ĥ� Standard �⡼�ɤξ������Ǥ���

+ +

���� POSTSTD �⡼�ɤξ������Ǥ���

+ +

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

+ +
+ +

5.7. Warning (class 4)

+

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

+ +

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

+ +

__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 ���鳰���Ƥ���ޤ���

+ +

���Σ��Ĥ� Standard �⡼�ɤξ������Фޤ���

+ +

���� STD �⡼�ɤ� -k �ޤ��� -K ���ץ�������ꤷ���Ȥ������Τ�ΤǤ���

+ +
+ +

5.8. Warning (class 8)

+

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

+

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

+ +

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

+ +
+ +

5.9. Warning (class 16)

+

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

+ +
+ +

5.10. ���ǥ�å���������

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
���ǥ�å�����Fatal
error
ErrorWarning class
124816
"..." isn't the last parameter5.4.7
"/*" in comment5.5.1
"and" is defined as macro5.5.3
"defined" shouldn't be defined5.4.7
"MACRO" has not been defined5.5.3
"MACRO" has not been pushed5.5.3
"MACRO" is already pushed5.5.3
"MACRO" wasn't defined5.8
"op" of negative number isn't portable5.5.45.8
"__STDC__" shouldn't be redefined5.4.7
"__STDC__" shouldn't be undefined5.4.8
"__VA_ARGS__" without corresponding "..."5.4.7
"__VA_ARGS__" cannot be used in GCC2-spec variadic macro5.4.7
## after ##5.4.7
#error5.4.10
#include_next is not allowed by Standard5.65.8
#warning5.5.7
'$' in identifier "THIS$AND$THAT"5.6
16 bits can't represent escape sequence L'\x12345'5.4.65.8
2 digraph(s) converted5.9
2 trigraph(s) converted5.9
8 bits can't represent escape sequence '\x123'5.4.65.8
_Pragma operator found in directive line5.4.12
Already seen #else at line 1235.4.3
Bad defined syntax5.4.5
Bad pop_macro syntax5.5.3
Bad push_macro syntax5.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 a character constant 'a'5.4.5
Can't use a string literal "string"5.4.5
Can't use the character 0x245.4.5
Can't use the operator "++"5.4.5
Constant "123456789012" is out of range of (unsigned) long5.5.45.65.8
Constant "1234567890123456789012" is out of range5.4.65.8
Converted 0x0c to a space5.7
Converted [CR+LF] to [LF]5.5.15.6
Converted \ to /5.6
Division by zero5.4.65.8
Duplicate parameter names "a"5.4.7
Empty argument in macro call "MACRO( a, ,"5.6
Empty character constant ''5.4.15.5.1
Empty parameter5.4.7
End of file with no newline, supplemented the newline5.5.2
End of file with unterminated #asm block started at line 1235.4.25.5.2
End of file with unterminated comment, terminated the comment5.5.2
End of file with \, deleted the \5.5.2
End of file within #if (#ifdef) section started at line 1235.4.25.5.2
End of file within macro call started at line 1235.4.25.5.2
Excessive ")"5.4.5
Excessive token sequence "junk"5.4.45.5.3
File read error5.3.2
File write error5.3.2
Header-name enclosed by <, > is an obsolescent feature 5.6
GCC2-spec variadic macro is defined5.6
I64 suffix is used in other than C99 mode "123i64"5.65.8
Identifier longer than 31 bytes "very_very_long_name"5.7
Ignored #ident5.5.35.8
Ignored #sccs5.5.35.8
Illegal #directive "123"5.4.45.5.35.8
Illegal control character 0x1b in quotation5.5.1
Illegal control character 0x1b, skipped the character5.4.1
Illegal digit in octal number "089"5.5.1
Illegal multi-byte character sequence "XY" in quotation5.5.1
Illegal multi-byte character sequence "XY"5.4.1
Illegal parameter "123"5.4.7
Illegal shift count "-1"5.5.45.8
Illegal UCN sequence5.4.1
In #asm block started at line 1235.4.3
Integer character constant 'abcde' is out of range of unsigned long5.5.45.65.8
Integer character constant 'abcdefghi' is out of range5.4.65.8
Less than necessary N argument(s) in macro call "macro( a)"5.4.95.5.5
Line number "0x123" isn't a decimal digits sequence5.4.45.5.6
Line number "2147483648" is out of range of 1,21474836475.4.4
Line number "32768" got beyond range5.5.6
Line number "32768" is out of range of 1,327675.5.6
Line number "32769" is out of range5.5.6
LL suffix is used in other than C99 mode "123LL"5.5.45.65.8
Logical source line longer than 509 bytes5.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 token5.5.4
Macro "macro" needs arguments5.8
Macro started at line 123 swallowed directive-like line5.5.5
Macro with mixing of ## and # operators isn't portable5.7
Macro with multiple ## operators isn't portable5.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 1024 macros defined5.7
More than 31 parameters5.7
More than 32 nesting of parens in #if expression5.7
More than 8 nesting of #if (#ifdef) sections5.75.8
More than 8 nesting of #include5.7
More than BLK_NEST nesting of #if (#ifdef) sections5.3.3
More than INCLUDE_NEST nesting of #include5.3.3
More than necessary N argument(s) in macro call "macro( a, b, c)5.4.9
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 NMACPARS parameters5.4.7
Multi-character or multi-byte character constant '��' isn't portable5.75.8
Multi-character wide character constant L'ab' isn't portable5.75.8
Negative value "-1" is converted to positive "18446744073709551615"5.5.45.8
No argument5.4.45.5.3
No header name5.4.4
No identifier5.4.4
No line number5.4.4
No space between macro name "MACRO" and repl-text5.5.3
No sub-directive5.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.95.6
Not a valid string literal5.4.9
Not an identifier "123"5.4.45.5.3
Not an integer "1.23"5.4.5
Not in a #if (#ifdef) section5.4.3
Not in a #if (#ifdef) section in a source file5.4.35.5.3
Old style predefined macro "linux" is used5.5.5
Operand of _Pragma() is not a string literal5.4.12
Operator ">" in incorrect context5.4.5
Out of memory (required size is 0x1234 bytes)5.3.2
Parsed "//" as comment5.6
Preprocessing assertion failed5.4.10
Quotation longer than 509 bytes "very_very_long_string"5.7
Recursive macro definition of "macro" to "macro"5.4.9
Removed ',' preceding the absent variable argument5.5.5
Replacement text "sub(" of macro "head" involved subsequent text5.5.55.8
Rescanning macro "macro" more than RESCAN_LIMIT times at "something"5.4.9
Result of "op" is out of range5.4.65.8
Result of "op" is out of range of (unsigned) long5.5.45.65.8
Shift count "40" is larger than bit count of long5.5.45.65.8
sizeof is disallowed in C Standard5.8
sizeof: Illegal type combination with "type"5.4.65.8
sizeof: No type specified5.4.5
sizeof: Syntax error5.4.5
sizeof: Unknown type "type"5.4.65.8
Skipped the #pragma line5.6
String literal longer than 509 bytes "very_very_long_string"5.7
The macro is redefined5.5.4
This is not a preprocessed source5.3.4
This preprocessed file is corrupted5.3.4
Too long comment, discarded up to here5.7
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 comments5.3.3
Too long logical line5.3.3
Too long number token "12345678901234"5.3.3
Too long pp-number token "1234toolong"5.3.3
Too long quotation "long-string"5.3.3
Too long source line5.3.3
Too long token5.3.3
Too many magics nested in macro argument5.4.9
Too many nested macros in tracing MACRO5.4.9
UCN cannot specify the value "0000007f"5.4.15.8
Undefined escape sequence '\x'5.5.45.8
Undefined symbol "name", evaluated to 05.75.8
Unknown #directive "pseudo-directive"5.4.45.5.45.8
Unknown argument "name"5.5.3
Unterminated character constant 't understand.5.4.1
Unterminated expression5.4.5
Unterminated header name 5.4.1
Unterminated macro call "macro( a, (b,c)"5.4.9
Unterminated string literal5.4.1
Unterminated string literal, catenated to the next line5.5.1
Variable argument macro is defined5.6
Wide character constant L'abc' is out of range of unsigned long5.5.45.65.8
Wide character constant L'abc' is out of range5.4.65.8

+
+ +

6. �������

+ +

�ץ�ץ������� Standard C Ŭ���٤򸡾ڤ��뤿��� Validation Suite �� mcpp �Υ������ȤȤ�˸������Ƥ��ޤ���Standard C �Υץ�ץ������Τ��٤Ƥε���򸡾ڤǤ����Τˤ����Ĥ��Ǥ����������mcpp �Ϥ����Ȥäƥ����å����Ƥ���ޤ��������¿���ν����Ϥǥ���ѥ��뤷�ƥ����å����Ƥ���ޤ����������äơ��Х�������ͤϤۤȤ�ɤʤ��Ĥ��Ǥ��������������ޤ������Ĥ��ĤäƤ��붲��Ͻ�ʬ����ޤ���

+

�⤷���ԲIJ��ư�ȯ�����줿�顢���Ҥ���𤯤�������
+�⤷�� +"Bug: ..." �Ȥ������ǥ�å��������Ф��顢����ϴְ㤤�ʤ� mcpp �ޤ��Ͻ����ϤΡʤ��֤� mcpp �Ρ˥Х��Ǥ����ޤ������Ȥ�����㤯����ʡ֥������פǤ⡢����򿩤碌�뤳�Ȥ� mcpp ��˽������ʤ顢�����Х��Ǥ���

+ +

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

+
    +
  1. mcpp ��ܿ����������ϡ�
    +
  2. �Х��Ȼפ����Τ�Ƹ��Ǥ���ʤ�٤�û������ץ륽������ +
    +
  3. ���ν�����̡� +
    +
+ +

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

+

http://mcpp.sourceforge.net/

+

�� "Open Discussion Forum" �ޤ��ϥ᡼��Ǥ��ꤤ���ޤ��� +

+ + +