1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<style> pre {color: navy} tt {color: maroon} </style>
<style> table {border-collapse: separate; border-spacing: 0px; empty-cells: show; background-color: #f0f0ff} </style>
<style> th, td {text-align: left; padding-left: 15px; padding-right: 15px} </style>
</head>
<body>
<div align="center">
<h1>MCPP-MANUAL</h1>
<h2>== How to Use MCPP ==</h2>
</div>
<div align="right">
<h4>for V.2.7.1 (2008/05)<br>
(kmatsui@t3.rim.or.jp)</h4>
</div>
<div align="center">
<h2>== ܼ ==</h2>
</div>
<dl><dt><a name="toc.1" href="#1">1. </a>
<dd><a name="toc.1.1" href="#1.1">1.1. ϣӤϤФʤ portable ʥ</a>
<dd><a name="toc.1.2" href="#1.2">1.2. Τ Standard C ⡼ɤ˲äƤ¾γƼ⡼ɤ</a>
<dd><a name="toc.1.3" href="#1.3">1.3. Υޥ˥奢ɽˡ</a>
<br>
<br>
<dt><a name="toc.2" href="#2">2. ưΥץȴĶ</a>
<dd><a name="toc.2.1" href="#2.1">2.1. <b>mcpp</b> ¹ԥץΣΥӥɤȣĤư⡼</a>
<dd><a name="toc.2.2" href="#2.2">2.2. ưΥץλˡ</a>
<dd><a name="toc.2.3" href="#2.3">2.3. ̤Υץ</a>
<dd><a name="toc.2.4" href="#2.4">2.4. <b>mcpp</b> ư⡼ɤˤ륪ץ</a>
<dd><a name="toc.2.5" href="#2.5">2.5. νϰʳνϤ˶̤Υץ</a>
<dd><a name="toc.2.6" href="#2.6">2.6. ϤȤΥץ</a>
<dd><a name="toc.2.7" href="#2.7">2.7. Ķѿ</a>
<dd><a name="toc.2.8" href="#2.8">2.8. Multi-byte character encoding</a>
<dd><a name="toc.2.9" href="#2.9">2.9. ѥѥ <b>mcpp</b> Ȥˤ</a>
<dd><dl><dt><a name="toc.2.10" href="#2.10">2.10. 糫ȯĶ <b>mcpp</b> Ȥˤ</a>
<dd><a name="toc.2.10.1" href="#2.10.1">2.10.1. Visual C++ IDE <b>mcpp</b> Ȥˡ</a>
<dd><a name="toc.2.10.2" href="#2.10.2">2.10.2. Mac OS X / Xcode.app <b>mcpp</b> Ȥˡ</a></dl>
<br>
<dt><a name="toc.3" href="#3">3. ĥǽȸߴ</a>
<dd><dl><dt><a name="toc.3.1" href="#3.1">3.1. #pragma MCPP put_defines, #pragma MCPP preprocess </a>
<dd><a name="toc.3.1.1" href="#3.1.1">3.1.1. إåե pre-preprocess</a></dl>
<dd><dl><dt><a name="toc.3.2" href="#3.2">3.2. #pragma once</a>
<dd><a name="toc.3.2.1" href="#3.2.1">3.2.1. إåե #pragma once ġ</a></dl>
<dd><a name="toc.3.3" href="#3.3">3.3. #pragma MCPP warning, #include_next, #warning</a>
<dd><a name="toc.3.4" href="#3.4">3.4. #pragma MCPP push_macro, #pragma __setlocale </a>
<dd><dl><dt><a name="toc.3.5" href="#3.5">3.5. #pragma MCPP debug, #pragma MCPP end_debug, #debug, #end_debug</a>
<dd><a name="toc.3.5.1" href="#3.5.1">3.5.1. #pragma MCPP debug path, #debug path</a>
<dd><a name="toc.3.5.2" href="#3.5.2">3.5.2. #pragma MCPP debug token, #debug token</a>
<dd><a name="toc.3.5.3" href="#3.5.3">3.5.3. #pragma MCPP debug expand, #debug expand</a>
<dd><a name="toc.3.5.4" href="#3.5.4">3.5.4. #pragma MCPP debug if, #debug if</a>
<dd><a name="toc.3.5.5" href="#3.5.5">3.5.5. #pragma MCPP debug expression, #debug expression</a>
<dd><a name="toc.3.5.6" href="#3.5.6">3.5.6. #pragma MCPP debug getc, #debug getc</a>
<dd><a name="toc.3.5.7" href="#3.5.7">3.5.7. #pragma MCPP debug memory, #debug memory</a>
<dd><a name="toc.3.5.8" href="#3.5.8">3.5.8. #pragma MCPP debug macro_call</a></dl>
<dd><a name="toc.3.6" href="#3.6">3.6. #assert, #asm, #endasm</a>
<dd><a name="toc.3.7" href="#3.7">3.7. C99 οǽ_Pragma() 黻ҡѰޥ</a>
<dd><dl><dt><a name="toc.3.8" href="#3.8">3.8. ϤȤüʻ</a>
<dd><a name="toc.3.8.1" href="#3.8.1">3.8.1. GCC, Visual C βѰޥ</a>
<dd><a name="toc.3.8.2" href="#3.8.2">3.8.2. GCC 'defined' ν</a>
<dd><a name="toc.3.8.3" href="#3.8.3">3.8.3. Borland C asm ʸ¾üʹʸ</a>
<dd><a name="toc.3.8.4" href="#3.8.4">3.8.4. #import ¾</a></dl>
<dd><dl><dt><a name="toc.3.9" href="#3.9">3.9. GCC GCC Ȥθߴ</a>
<dd><a name="toc.3.9.1" href="#3.9.1">3.9.1. FreeBSD 2 / kernel Υץץ</a>
<dd><a name="toc.3.9.2" href="#3.9.2">3.9.2. FreeBSD 2 / libc Υץץ</a>
<dd><a name="toc.3.9.3" href="#3.9.3">3.9.3. GCC 2 / cpp λͤ</a>
<dd><a name="toc.3.9.4" href="#3.9.4">3.9.4. Linux / glibc 2.1 Υץץ</a>
<dd><dl><dt><a name="toc.3.9.5" href="#3.9.5">3.9.5. GCC 2 <b>mcpp</b> Ȥˤ</a>
<dd><a name="toc.3.9.5.1" href="#3.9.5.1">3.9.5.1. <b>mcpp</b> Υ˥ˤ</a></dl>
<dd><a name="toc.3.9.6" href="#3.9.6">3.9.6. GCC 3.2 Υץץ</a>
<dd><a name="toc.3.9.7" href="#3.9.7">3.9.7. GCC 3, 4 <b>mcpp</b> Ȥˤ</a>
<dd><a name="toc.3.9.8" href="#3.9.8">3.9.8. Linux / glibc 2.4 Υץץ</a>
<dd><a name="toc.3.9.9" href="#3.9.9">3.9.9. Linux stddef.h, limits.h, #include_next </a>
<dd><a name="toc.3.9.10" href="#3.9.10">3.9.10. Mac OS X / Apple-GCC ȥƥإå</a>
<dd><a name="toc.3.9.11" href="#3.9.11">3.9.11. firefox 3.0b3pre Υץץ</a></dl>
<dd><dl><dt><a name="toc.3.10" href="#3.10">3.10. Visual C++ Υƥإå</a>
<dd><a name="toc.3.10.1" href="#3.10.1">3.10.1. Ȥޥ ?</a>
<dd><a name="toc.3.10.2" href="#3.10.2">3.10.2. Identifier '$'</a></dl>
<br>
<dt><a name="toc.4" href="#4">4. λ</a>
<dd><a name="toc.4.1" href="#4.1">4.1. λ status </a>
<dd><a name="toc.4.2" href="#4.2">4.2. Include directory Υѥ</a>
<dd><a name="toc.4.3" href="#4.3">4.3. Header name ιˡ</a>
<dd><a name="toc.4.4" href="#4.4">4.4. #if ɾ</a>
<dd><a name="toc.4.5" href="#4.5">4.5. #if Ǥʸɾ</a>
<dd><a name="toc.4.6" href="#4.6">4.6. #if sizeof (type)</a>
<dd><a name="toc.4.7" href="#4.7">4.7. White-space sequence ΰ</a>
<dd><a name="toc.4.8" href="#4.8">4.8. <b>mcpp</b> ¹ԥץΥǥեȤλ</a>
<br>
<br>
<dt><a name="toc.5" href="#5">5. ǥå</a>
<dd><a name="toc.5.1" href="#5.1">5.1. ǥåη</a>
<dd><a name="toc.5.2" href="#5.2">5.2. Translation limits</a>
<dd><dl><dt><a name="toc.5.3" href="#5.3">5.3. Fatal error</a>
<dd><a name="toc.5.3.1" href="#5.3.1">5.3.1. <b>mcpp</b> ȤΥХ</a>
<dd><a name="toc.5.3.2" href="#5.3.2">5.3.2. ʪŪ顼</a>
<dd><a name="toc.5.3.3" href="#5.3.3">5.3.3. Translation limits ХåեΥ顼</a>
<dd><a name="toc.5.3.4" href="#5.3.4">5.3.4. #pragma MCPP preprocessed ˴ؤ륨顼</a></dl>
<dd><dl><dt><a name="toc.5.4" href="#5.4">5.4. Error</a>
<dd><a name="toc.5.4.1" href="#5.4.1">5.4.1. ʸȥȡ˴ؤ륨顼</a>
<dd><a name="toc.5.4.2" href="#5.4.2">5.4.2. 뤷ʤեΥ顼</a>
<dd><a name="toc.5.4.3" href="#5.4.3">5.4.3. Preprocessing group бطΥ顼</a>
<dd><a name="toc.5.4.4" href="#5.4.4">5.4.4. ǥ쥯ƥֹԤñʹʸ顼</a>
<dd><a name="toc.5.4.5" href="#5.4.5">5.4.5. #if ιʸ顼</a>
<dd><a name="toc.5.4.6" href="#5.4.6">5.4.6. #if ɾ˴ؤ륨顼</a>
<dd><a name="toc.5.4.7" href="#5.4.7">5.4.7. #define Υ顼</a>
<dd><a name="toc.5.4.8" href="#5.4.8">5.4.8. #undef Υ顼</a>
<dd><a name="toc.5.4.9" href="#5.4.9">5.4.9. ޥŸΥ顼</a>
<dd><a name="toc.5.4.10" href="#5.4.10">5.4.10. #error, #assert</a>
<dd><a name="toc.5.4.11" href="#5.4.11">5.4.11. #include μ</a>
<dd><a name="toc.5.4.12" href="#5.4.12">5.4.12. ¾Υ顼</a></dl>
<dd><dl><dt><a name="toc.5.5" href="#5.5">5.5. Warning (class 1)</a>
<dd><a name="toc.5.5.1" href="#5.5.1">5.5.1. ʸȡӥȤ˴ؤ륦˥</a>
<dd><a name="toc.5.5.2" href="#5.5.2">5.5.2. 뤷ʤեΥ˥</a>
<dd><a name="toc.5.5.3" href="#5.5.3">5.5.3. ǥ쥯ƥֹԤ˴ؤƼΥ˥</a>
<dd><a name="toc.5.5.4" href="#5.5.4">5.5.4. #if ˴ؤ륦˥</a>
<dd><a name="toc.5.5.5" href="#5.5.5">5.5.5. ޥŸ˴ؤ륦˥</a>
<dd><a name="toc.5.5.6" href="#5.5.6">5.5.6. ֹ˴ؤ륦˥</a>
<dd><a name="toc.5.5.7" href="#5.5.7">5.5.7. #pragma MCPP warning, #warning</a></dl>
<dd><a name="toc.5.6" href="#5.6">5.6. Warning (class 2)</a>
<dd><a name="toc.5.7" href="#5.7">5.7. Warning (class 4)</a>
<dd><a name="toc.5.8" href="#5.8">5.8. Warning (class 8)</a>
<dd><a name="toc.5.9" href="#5.9">5.9. Warning (class 16)</a>
<dd><a name="toc.5.10" href="#5.10">5.10. ǥå</a>
<br>
<br>
<dt><a name="toc.6" href="#6">6. Х</a>
</dl>
<br>
<h1><a name="1" href="#toc.1">1. </a></h1>
<p><b>mcpp</b> Martin Minow DECUS cpp kmatsuiʾ
ˤŪ˽ľåץץåǤ<b>mcpp</b> Ȥ̾ Matsui cpp Ȥ̣ǤϥΤǡƽϤǻȤˤϤνϤ˹碌ƥ˼㴳ѹäǥѥ뤷 <b>mcpp</b> μ¹ԥץɬפޤ*1</p>
<p>Υޥ˥奢ǤϡǤνϤ˰ܿ줿¹ԥץλͤƤޤ˾ܺ٤Τꤿ͡鲿餫νϤ˰ܿƤߤͤϡ <a href="mcpp-porting.html">mcpp-porting.html</a> ȤɥȤȤƤ<br>
ΥɥȤϤ٤ƥץեȥȤޤ<br>
ޥ˥奢Ƥˡޤ <b>mcpp</b> ħҲ𤷤Ƥޤ</p>
<p>:</p>
<p>*1 <b>mcpp</b> V.2.6.3 ϡѥ뤺ߤβफΥХʥꡦѥå⼡ΥȤ褦ˤʤä</p>
<blockquote>
<p><a href="http://mcpp.sourceforge.net/">http://mcpp.sourceforge.net/</a></p>
</blockquote>
<br>
<h2><a name="1.1" href="#toc.1.1">1.1. ϣӤϤФʤ portable ʥ</a></h2>
<p>Linux, FreeBSD, Windows ¿ΣϣӤݡȤƤ portable ʥץץåǤꡢΥ Standard C (ANSI/ISO/JIS C) νϤޤ Standard C++ νϤǤХѥǤ빭 portability äƤޤ饤֥ؿϸŵŪʤΤȤäƤޤ<br>
ƽϤ˰ܿ뤿ˤϡ¿ξ硢إåեΤĤΥޥؤƥѥ뤹ǤߤޤǰξǤ⥽ե˿Խ٤Ǥ</p>
<p>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 ξ硢ѥΤǧʤϤǤϡ<b>mcpp</b> 䤤ޤ</p>
<br>
<h2><a name="1.2" href="#toc.1.2">1.2. Τ Standard C ⡼ɤ˲äƤ¾γƼ⡼ɤ</a></h2>
<p>Standard C ư⡼ɤΤۤˡK&R 1st. Υ⡼ɤ "Reiser" model cpp Υ⡼ɤ⤢ꡢˤϼ post-Standard ͤΥ⡼ɤޤǤޤC++ ΥץץåȤư¹Իץ⤢ޤ<br>
Standard C ⡼ɤϴ¸¿ΥץץåȰäơʤ˼ƤĤǤC90, C95, C99, C++98 Τ٤ƤбƤޤStandard C ץץ reference model ȤʤΤܻؤƺäƤޤεʤΥСϼ¹Իץǻꤹ뤳ȤǤޤ*1</p>
<p>ۤˤĤͭѤʳĥǽäƤޤޥŸ #if ɾȥ졼 #pragma MCPP debug ⤢ޤإåե "pre-preprocess" ƤȤǤޤ<br>
ĤͭѤʼ¹ԻץƤޤ˥Υ٥ꤹ륪ץ䡢include directory ꤹ륪ץǤ<br>
ˤɤʴְ㤤äƤ <b>mcpp</b> ˽긫ʥåФꤻΤǤ狼䤹ǥåФŬڤʽޤܿȤʤˤĤƤٹȯޤ<br>
ʼǤʤ顢ɥŪŪʤƤߤޤ<br>
ܺ٤ʥɥȤ°Ƥޤ</p>
<p><b>mcpp</b> ηƵС®٤٤ȤǤGCC 3.*, 4.* / cc1 ٤ȣܤ飳ܤλ֤ޤBorland C 5.5 / cpp Ʊ餤®٤ǡإåե pre-preprocess εǽȤȤ⤦®ʤΤǡä٤ۤǤϤޤΤǤ뤳ȡportable ʥǤ뤳ȡʤǤư뤳Τˤϡ٤ν֤ϤʤȹͤƤޤ</p>
<p>ʤץץå Standard C ٤ƥȤ뤿θڥåȤǤ "Validation Suite for Standard C Preprocessing"β⤪ӤȤäƥƥȤƼץץåκ cpp-test.html <b>mcpp</b> ȤȤ˸ƤޤȡStandard C פȾΤ¸Υץץåˤ¿꤬뤫狼ޤ</p>
<p><b>mcpp</b> V.2.3 γȯǡڥå V.1.3 ȤȤˡʵ(IPA) ʿǯ١̤Ƨեȥ¤ȡפ˿ ͵ץȥޥ͡ˤäƺ졢2002/07 - 2003/02 δ֤ IPA λȿУͤνΤȤ˳ȯʤޤѸǥɥȤ⤳ΥץȤǡͭ²ҡϥ˻䤬ȥƥäƤǤäΤǤ*2<br>
<b>mcpp</b> Ϥʿǯ٤ˤ̤Ƨեȥ¤ȡפ˰ PM ˤäƷ³ƺ졢V.2.4 ؤ update Ȥʤޤ<br>
θ <b>mcpp</b> ȸڥåȤϤ˲ɤκȤ³Ƥޤ</p>
<p>:</p>
<p>*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 ȸƤ֡</p>
<p>*2 ̤Ƨեȥ¤ȡ(Exploratory Software Project) γפϼΤȤΤ뤳ȤǤ롣</p>
<blockquote>
<p><a href="http://www.ipa.go.jp/jinzai/esp/"> http://www.ipa.go.jp/jinzai/esp/</a></p>
</blockquote>
<p><b>mcpp</b> V.2.3 ʹߤΥӥɥȤȸڥå V.1.3 ʹߤϼΤȤ֤Ƥ</p>
<blockquote>
<p><a href="http://www.m17n.org/mcpp/"> http://www.m17n.org/mcpp/</a></p>
</blockquote>
<p>2006/04 ˼ΤȤ˰ܤä</p>
<blockquote>
<p><a href="http://mcpp.sourceforge.net/"> http://mcpp.sourceforge.net/</a></p>
</blockquote>
<p><b>mcpp</b> θŤСǤ cpp
V.2.2 Ӹڥå V.1.2 ϥ٥ҤΥȤμΤȤˤ롣dos/prog/c Ȥǥ쥯ȥƤ뤬MS-DOS ѤǤϤʤ UNIX, WIN32/MS-DOS бƤ롣</p>
<blockquote>
<p>
<a href="http://www.vector.co.jp/soft/dos/prog/se081188.html">http://www.vector.co.jp/soft/dos/prog/se081188.html</a><br>
<a href="http://www.vector.co.jp/soft/dos/prog/se081189.html">http://www.vector.co.jp/soft/dos/prog/se081189.html</a><br>
<a href="http://www.vector.co.jp/soft/dos/prog/se081186.html">http://www.vector.co.jp/soft/dos/prog/se081186.html</a><br>
</blockquote>
<p>Υ֥եΥƥȥեϡ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 ǤΣΥ֥ե֤褦ˤ</p>
<br>
<h2><a name="1.3" href="#toc.1.3">1.3. Υޥ˥奢ɽˡ</a></h2>
<p>Υޥ˥奢ϤĤƤϥƥȥեǤV.2.6.2 html եѤޤ<br>
Υޥ˥奢ǤϼΤ褦˥եȤȤʬƤޤ</p>
<ul>
<li><tt style="color:navy">source</tt>:<br>
<tt style="color:navy"></tt>եȤϡ
ɤҤӥޥɥ饤ϤΤ˻Ȥޤ<br>
<li><tt>__STDC__</tt>:<br>
<tt style="color:maroon">꿧</tt>եȤϡɸޥӲ餫ΥޥΤ˻Ȥޤ<br>
<li><i>STD</i>:<br>
<i>Italic</i> եȤ <b>mcpp</b> system.H ȤեޥɽޤΥޥ˥奢ǤϤ̾ <b>mcpp</b> μɽ뤿˻ȤޤΥޥ <b>mcpp</b> ѥ뤹˻Ȥǡ<b>mcpp</b> μ¹ԥץˤ¸ߤƤʤȤդƤ<br>
</ul>
<br>
<h1><a name="2" href="#toc.2">2. ưΥץȴĶ</a></h1>
<h2><a name="2.1" href="#toc.2.1">2.1. <b>mcpp</b> ¹ԥץΣΥӥɤȣĤư⡼</a></h2>
<p><b>mcpp</b> ˤϡɤνϡʥѥˤΩñȤư <b>compiler-independent-build </b> ȡνϤΥץץå˼ääư build (<b>compiler-specific-build) </b> ȤޤԤϥץץ뤿ΤΤǡνϤ餫ΥѥͿƤѥ뤵Ȥϸ¤ޤԤνϤǥѥȥޤǹԤΤΤǡ<b>mcpp</b> νϤϤΥѥλͤ˹碌Ƥޤ*1, *2</p>
<p>ԤǤϥץλͤ <b>mcpp</b> ѥ뤷ϤΤˤ餺ۤܰǡOS ˤ㤬ǤԤǤ϶̤λͤȤȤˡϤȤθߴΤλͤ¿ꡢʬϽϤȤ˰ۤʤäƤޤCompiler-independent ǤΥץϽǤǤܻۤȤޤϤΥץȤξͤ뤿̤ΥץˤʤäƤΤ⤢ޤ<br>
ʤΥɥȤǡGCC ѡסVisual C ǡɽƤΤϤ⤽줾 GCC build, Visual C build ΰ̣Ǥ</p>
<p>Compiler-independent ǤǤǤǤ⡢<b>mcpp</b> ˤϤĤư⡼ɤꡢ줾ۤʤץץͤưޤ⡼ɤˤϼΣĤޤ</p>
<ul>
<li><i>STD</i><br>
Standard C (C90, C99, C++98) ΥץץͤǤ줬ǥեȤΥ⡼ɤǤ<br>
<li><i>COMPAT</i><br>
std ⡼ɤѼǡƵŪޥʤ⤵Ÿޤ<br>
<li><i>POSTSTD</i><br>
kmatsui ˺äץץͤǡStandard C μӤʤñ㲽ΤǤ<br>
<li><i>KR</i><br>
C90 K&R 1st. ΥץץͤǤ<br>
<li><i>OLDPREP</i><br>
"Reiser"
model cpp ưͤǤ<br>
</ul>
<p>Υ⡼ɤꤹ륪ץϼ̤Ǥ
⡼ɤꤷʤ -@std ꤷȤˤʤޤ</p>
<ul>
<li><samp>-@std</samp><br>
<i>STD</i> ⡼<br>
<li><samp>-@compat</samp><br>
<i>COMPAT</i> ⡼<br>
<li><samp>-@post, -@poststd</samp><br>
<i>POSTSTD</i> ⡼<br>
<li><samp>-@kr</samp><br>
<i>KR</i> ⡼<br>
<li><samp>-@old, -@oldprep</samp><br>
<i>OLDPREP</i> ⡼<br>
</ul>
<p><i>STD</i>, <i>COMPAT</i>, <i>POSTSTD</i> 碌 Standard ⡼ɡ<i>KR</i>
<i>OLDPREP</i> 碌 pre-Standard ⡼ɤȸƤ֤Ȥˤޤޤ<i>COMPAT</i> <i>STD</i> ȤۤȤƱʤΤǡäǤʤ¤ <i>STD</i> ˤ <i>COMPAT</i> ޤᡢɬפʾ <i>COMPAT</i> ˸ڤޤ*3</p>
<p>Standard pre-Standard Υ⡼ɤȤǤϡޥŸˡΰ㤤¿ޤC90 pre-C90 Ȥΰ㤤Ȼפäƴְ㤤ޤǤ礭ʰ㤤ϡؿͥޥʰդޥˤŸǡ˥ޥޤޤƤ硢Standard ⡼ Ǥϰ˴ŸƤ鸵ޥִꥹΥѥ֤ΤФơpre-Standard ǤŸ˥ѥִƥŸ뤳ȤǤ<br>
ޤStandard ⡼ ǤľܤˤܤˤޥκƵŪŸϸ§ȤƤޤpre-Standard ǤϺƵŪʥޥȡŸ̵ºƵƥ顼Ȥʤޤ</p>
<p>ˤ \ ΰ⡼ɤˤäưۤʤꡢStandard ⡼ Ǥ trigraph θ塢tokenization <backslash><newline> sequence ޤpre-Standard ⡼ Ǥʸƥˤ #define Ԥˤ˸¤äƤޤ</p>
<p> tokenizationʥȡʬ䡢ȡڤФˤ⡼ɤˤä̯˰㤤ޤ<br>
Standard ⡼ Ǥϡtoken base ǤưפȤ¤ tokenization ԤޤŪˤϡStandard ⡼ ǤϡޥŸȤ space ơ token ȤΰտޤʤϢ뤬ȯΤɤޤpre-Standard ⡼ ŪصŪŪ tokenization ȡcharacter base ǤΥƥִפˤޥŸˡκפĤƤޤˤĤƤϡ<a href="cpp-test.html#2"> cpp-test.html#2</a> <br>
Standard ⡼ Ǥ preprocessing number
Ȥͥȡ̤˰ޤpre-Standard ǤϡͥȡϣäȡưȡƱǤǤ 'U', 'u', 'LL', 'll'ưǤ 'F', 'f', 'L', 'l' ϥȡΰȤǧޤ<br>
磻ʸʸƥʸ Standard ⡼ ǤñΥȡȤǧޤ</p>
<p>Digraph, #error, #pragma, _Pragma() operator Standard ⡼ ǤʤȻȤޤ-S <n> ץstrict-ansi ⡼ɡˤ -+ ץC++ ץץåȤưˤ Standard ⡼ ǤȤޤޥ <tt>__STDC__</tt>, <tt>__STDC_VERSION__</tt> Standard ⡼ λ졢pre-Standard λޤ<br>
#if defined, #elif pre-Standard ǤϻȤޤ#include, #line ΰ˥ޥȤȤ pre-Standard ǤϤǤޤޥ <tt>__FILE__</tt>, <tt>__LINE__</tt>, <tt>__DATE__</tt>, <tt>__TIME__</tt> pre-Standard λޤ<br>
¾ǡ#assert, #asm (#endasm), #put_defines, #debug pre-Standard ⡼ɤǤȤޤ<br>
#if Standard ⡼ Ǥ long long / unsigned long long ɾޤpre-Standard ⡼ Ǥ (signed) long ɾޤ#if sizeof (type) ȤΤ pre-Standard Ǥ</p>
<p>Trigraph UCN (universal-character-name) ϡ<i>STD</i> ⡼ɤǤȤޤ</p>
<p>ǥåν⡼ɤˤäƾäƤޤ</p>
<p>ʾ˽Ҥ٤Ȱʳ K&R 1st. Standard C ȰۤʤΤʵΤʤȤˤĤƤϡpre-Standard ⡼ Ǥ C90 ε˽ޤ</p>
<p><i>OLDPREP</i> ⡼ɤ <i>KR</i> ⡼ɤȤΰ㤤 <i>POSTSTD</i>, <i>COMPAT</i> ƥ⡼ɤ <i>STD</i> ⡼ɤȤΰ㤤ϼΤ褦ʤΤǤ</p>
<ul>
<li><i>OLDPREP</i><br>
Τ褦ʻͤθŤ "Reiser model cpp" ưold preprocessor ΰաˡ<br>
<br>
<ol>
<li>ȤĤ space ǤʤĤ space Ѵ롣Ѵϸ§ȤƺǸνϻ˹Ԥ롣ޥǤľ˹Ԥ롣<br>
<li>ޥִꥹʸƥޤʸꡢˤɤ줫Υѥ̾ȰפʬϡΥޥθƤӽФκݤˤʬϡѥб֤롣פʬȤΤϡξü " ޤ ' ϤȤȡȤƸ˰פȡΤȤǤ롣<br>
<li>#else, #endif ιԤ˲ƤäƤ⥨顼ˤ̵뤹б #if MACRO, #ifdef MACRO MACRO ꤹˡ<br>
<li>ƥĤ " ' ʤϡĤƤȤߤʤunterminated string literal, unterminated character constant Υ顼ȯʤˡ<br>
<li># 123 ȤԤ #line 123 ƱΤȤư<br>
<br>
</ol>
<li><i>COMPAT</i><br>
ƵŪޥʤ⤵Ÿ롣
ʤƵŪޥŸ˺ݤơƱ̾ޥκִػߤϰϤʤⶹȤ롣<br>
ƵŪޥŸεˤĤƤ <a href="cpp-test.html#3.4.26"> cpp-test.html#3.4.26</a> ȤΤȡƵŪޥζ test-t/recurs.t ȤΤȡ*4<br>
<br>
<li><i>POSTSTD</i><br>
ϵʤ˼Τ褦ѹäΤǤ롣<br>
<br>
<ol>
<li>Trigraphs ǧʤDigraph translation phase 1 ǡ
ʤץץκǽѴƤޤToken ȤƤϰʤ<br>
<li>Tokenization token-base θ§ˤäñ㲽Ƥ롣 preprocessing token δ֤ token separator ȤƤ white space ʤϡ˼ưŪ a space ʤޥΥޥ̾ȼ '(' δ֤ˤʤˡäơ# 黻ҤˤʸǤ⤹٤Ƥ preprocessing token δ֤ˤ a space äʸ뤳Ȥˤʤ롣ޤޥκ˺ݤƤϡtoken separator ̵ͭˤʤʤ<br>
<li>ؿͥޥκ˺ݤƤϡѥ̾ΰ㤤ˤʤ<br>
<li>#if ʸϻȤʤʥ顼ˤˡ<br>
<li>ؿͥޥŸ˴ؤִؿ͡פǤʤԵ§ʵåȤƤ롣
ʤƥϤΥޥִꥹȤоݤȤθ sequence ϼޤʤ<br>
<li>#include <stdio.h> Ȥ header name ̤̾˥Фclass 2 Υ˥ץǡˡޥ <stdio.h> η header name Ȥȡüʾˤϥ顼Ȥʤ뤳Ȥ롣#include "stdio.h" η侩롣<br>
<li>ޥǤϥޥִ̾ꥹȤȤδ֤ space ɬפȤ꤬ C99 ɲä줿εˤϽʤtokenization κݤ˼ưŪ a space Τǡˡ<br>
<li>UCN (universal-character-name) ǧʤޤidentifier multi-byte character ǧʤ<br>
<li>C++ Ǥϣ identifier operator operator ȤƤϰʤ<br>
</ol>
</ul>
<p>ʤΤۤ <b>lang-asm</b> ⡼ɤȤΤ⤢ޤ
ϥ֥饽 C Υȡǥ쥯ƥ֡ޥ줿§Ūʥ⡼ɤǤ
<i>POST_STD</i> ϤΥ⡼ɤˤʤ뤳ȤϤǤޤʳΥ⡼ɤϰΥץꤹ뤳ȤǤΥ⡼ɤˤʤޤ
λͤˤĤƤ <a href="#2.5">2.5</a> Ƥ</p>
<p>Ȥ <b>mcpp</b> μ¹ԥץˤϤĤλͤΤǡޥ˥奢դɤǤξϤǤϤޤ <b>mcpp</b> ζ̤Υץư⡼ɤˤäưۤʤ륪ץҤ١νǤƶ̤ΥץҤ١ΤȤǽǤνϤȤ˰ۤʤ륪ץܤޤ</p>
<p>:</p>
<p>*1 Τۤ subroutine-build ȤΤ⤢롣餫¾Υᥤץफ <b>mcpp</b> ֥롼ȤƸƤӽФΤǤ롣λͤ <b>mcpp</b> ѥ뤷ˤä compiler-specific-build ޤ compiler-independent-build Τɤ餫ƱˤʤΤǡΥޥ˥奢ǤäˤȤꤢʤ
Subroutine-build ˤĤƤ <a href="mcpp-porting.html#3.12">mcpp-porting.html#3.12</a> ȤΤȡ</p>
<p>*2 SourceForge ΥȤХʥꡦѥåϤ٤ compiler-independent-build Ǥ롣</p>
<p>*3 V.2.5 ޤǤ Standard ⡼ɤ pre-Standard ⡼ɤȤǼ¹ԥץब̤ˤʤäƤV.2.6 飱Ĥ礵줿</p>
<p>*4 GCC, Visual C++ μפʽϤȤθߴΤΥץǤ롣'<i>COMPAT</i>' "compatible" ΰ̣Ǥ롣</p>
<br>
<h2><a name="2.2" href="#toc.2.2">2.2. ưΥץλˡ</a></h2>
<p>ʲεܤǤϡ<arg> Ȥˡ arg 桼Ϥ٤ǤդΰǤ뤳Ȥ[arg] arg άǽʰǤ뤳ȤޤɤˤƤ <, >, [, ] ʸΤΤϤƤϤޤ</p>
<p><b>mcpp</b> ưϼηǤmcpp Ȥ̾ <b>mcpp</b> ΥȡλˤäƤ̤̾ˤʤޤ</p>
<pre>
mcpp [-<opts> [-<opts>]] [in_file] [out_file] [-<opts> [-<opts>]]
</pre>
<p>out_fileʽϥѥˤά줿ϡ-o ץꤵʤ¤ɸϤ˽Ϥޤin_fileϥѥˤά줿ɸϤϤޤǥåϡ-Q ץꤵʤ¤ɸ२顼Ϥ˽Ϥޤ<br>
Τɤ줫Υե뤬ץǤʤϡ顼åФƽλޤ</p>
<p>ɬפȤ륪ץ˰ʤϥ顼Ȥʤޤ-M ץ̡ˡ<br>
ɬפȤ륪ץǤ -I<arg>, -I <arg> ΤɤͭǤʥץʸȰδ֤ space ϤäƤʤƤɤˡ<br>
Τʤץ -Qi, -Q -i ΤɤͭǤʣĤ '-' θˤĤʤƤ̡ '-' դƤɤ-M ϤĤʤƤϤʤˡ<br>
ƱΥץʣꤵ줿硢-D, -U, -I, -W ץϤ줾줬ͭǤ-S, -V, -+ ϣܰʹߤ̵뤵ޤ-2, -3 ϤΤӤ˻ͤȿžޤ¾ΥץϺǸ˻ꤵ줿ΤͭǤ</p>
<p>ʸȾʸ϶̤ޤ<br>
륹å饯 Windows Ǥ - Ǥꡢ/ ǤϤޤ<br>
ʥץꤹ usage ʸɽΤǡmcpp -? Ȥ뤳ȤǡȤ륪ץΤ뤳ȤǤޤUsage ʸΤۤˤ⤤ĤΥ顼åޤƤϤ⼫ΤΤǤΤǡϾάޤ</p>
<br>
<h2><a name="2.3" href="#toc.2.3">2.3. ̤Υץ</a></h2>
<p><b>mcpp</b> ư⡼ɤϤˤʤ̤Υץϼ̤Ǥ</p>
<ul>
<li><samp>-C</samp><br>
ΥȤϤ롣ǥХåͭѤʥץǤ롣ȤϥԤƬ˰ܤƽϤ롣ȤνϥޥŸǥ쥯ƥ֤ν˹ԤΤǤꡢȤϥޥƤӽФˤ뤫⤷ʤǤ롣<br>
<br>
<li><samp>-D <macro>[=[<value>]]</samp><br>
<li><samp>-D <macro(a,b)>[=[<value>]]</samp><br>
ޥ macro 롣ƤޥǤ <tt>__STDC__, __STDC_VERSION__, __FILE__, __LINE__, __DATE__, __TIME__, __cplusplus</tt> ʳǤСΥץѹǤC99 <tt>__STDC_HOSTED__</tt> GCC V.3 Τ褦 -D ץϤ⤢Τǡ㳰Ū˵Ĥˡ=<value> ꤵƤ value άƤ 1 bcc32 ǤϾάˤϣĤΥȡΤǡȤϰ㤦Ȥաˡ= ˤ϶ƤϤʤ= θ˶ФΥޥϣĤΥȡ롣<br>
ΥץǤϡĤޥǤ롣<br>
ΥץϲǤǤ롣
<br>
<br>
<li><samp>-e <encoding></samp><br>
Multi-byte character encoding <encoding> ѹ롣
<encoding> ˤĤƤ <a href="#2.8"> 2.8</a> ȤΤȡ
<br>
<br>
<li><samp>-I <directory></samp><br>
Include directory Υѥ̤ directory
ꤹʥѥˤĤƤ <a href="#4.2"> 4.2</a> ȡˡdirectory ̾ space
ޤޤϡdirectory ̾Τ " " ǰϤळȡ<br>
<br>
<li><samp>-I 1, -I 2, -I 3</samp><br>
#include
"header" ηΡ<header> ηǤϤʤ˥ǥ쥯ƥ֤Ǻǽ˥ǥ쥯ȥδꤹ롣-I1 Ǥϥȥǥ쥯ȥꡢ-I2 Ǥϥեʥ롼ɸˤΤǥ쥯ȥꡢ-I3 ǤϤʾܺ٤ <a href="#4.2"> 4.2</a> ȡˡ<br>
<br>
<li><samp>-j</samp><br>
ǥåνϤǤϥղþϽϤ
ԤοǥåϤʥǥեȤǤϣԤοǥå³ơΥԤɽ롣ե뤬 include 줿ΤǤϡinclude ιԤ缡ɽ롣ޥ˴ؤǥåǤϡŸΥޥ缡ɽˡ<br>
GCC testsuite ǻθڥåȤȤϡΥץꤷơGCC Ʊǥåˤɬפ롣<br>
<br>
</ul>
<p>-M* ץ makefile Ѥΰ¸طԤϤΤǤʣΥե뤬硢٤ƤΥˤĤƤ -M* ץդƼ¹ԤơνϤޡȡmakefile ɬפʰ¸طҹԤޤΥץ GCC ΤΤ˹碌Ƥޤ㤤ޤ*1</p>
<ul>
<li><samp>-M</samp><br>
եΰ¸طҤԤϤ롣ϥޥɥ饤ǻꤵ줿ϥե롢줬ꤵƤʤɸϤǤ롣ԤĹޤꤿࡣ̾Υץץ̤ϽϤʤ<br>
<br>
<li><samp>-MM</samp><br>
-M ȤۤƱǤ뤬ΥإåϽФʤ<br>
<ol>
<li>#include <stdio.h>
η include Ρ<br>
<li>#include "/include/stdio.h"
ХѥǻꤵƤΡ<br>
<li>#include "stdio.h" ηǤ뤬
ȥǥ쥯ȥʽϤ -I <n> ץˤäƤϥΤǥ쥯ȥˤȯ줺ƥ include ǥ쥯ȥȯ줿Ρ-I <directory> ץĶѿǻꤵ줿ǥ쥯ȥޤˡ<br>
</ol>
GCC-specific-build Ǥ GCC ƱͤˡФʤΤϥƥإåǤ롣<br><br>
<li><samp>-MD [FILE]</samp><br>
-M ȤۤƱǤ뤬̾Υץץ̤⥳ޥɥ饤ǻꤵ줿եޤɸϤ˽Ϥ뤳ȤäƤ롣ޤ¸طԤνϡ FILE ꤵ줿ϤΥեȤʤꡢꤵƤʤϥե̾ .c .d ѤեȤʤ롣<br>
<br>
<li><samp>-MMD [FILE]</samp><br>
-MD ȤۤƱǤ뤬-MM Ʊͤ˥ƥإåȤߤʤΤϽФʤȤäƤ롣¸طԤν -MD [FILE] Ʊ<br>
<br>
<li><samp>-MF FILE</samp><br>
FILE ˤ롣-MD FILE, -MMD FILE ͥ褹롣<br>
<br>
<li><samp>-MP</samp><br>
"Phony
target" Ϥ롣Phony target ȤΤϡ롼ɤե룱ģĤˤĤơ켫Τ¸ʤåȤȤơΤ褦˵ҤΤǤ롣<br>
<pre>
test.o: test.c test.h
test.h:
</pre>
<li><samp>-MT TARGET</samp><br>
åȤ̾̾ foo.o ǤϤʤ TARGET ˤ롣-MT '$(objpfx)foo.o' ȤץǤϼΤ褦ʹԤϤ롣<br>
<pre>
$(objpfx)foo.o: foo.c
</pre>
<li><samp>-MQ TARGET</samp><br>
-MT ƱͤǤ뤬make ˤȤä̤ʰ̣ʸϼΤ褦 quote 롣<br>
<pre>
$$(objpfx)foo.o: foo.c
</pre>
<li><samp>-N</samp><br>
'_' ǻϤޤΤޤƤ٤Ƥλޥ̵ˤ롣ʤᤵƤޥ __MCPP ϽʤᤵƤޥȤϡ<tt>__FILE__, __LINE__, __DATE__, __TIME__, __STDC__, __STDC_VERSION__</tt>, C99 <tt>__STDC_HOSTED__</tt> C++ <tt>__cplusplus</tt> Ǥ롣<tt>__MCPP</tt> undefine -U ץȤȡˡ<br>
<br>
<li><samp>-o <file></samp><br>
ץץΥ file ˽Ϥ롣άϥѥȤʤΤǡ̵Ƥ褤ץǤ뤬ѥɥ饤ФˤäƤϤΥץȤΤ롣<br>
<br>
<li><samp>-P</samp><br>
ѥΤ˹ֹϤά롣äΥץץåʳӤήѤ˻ȤץǤ롣<br>
<br>
<li><samp>-Q</samp><br>
ǥåʥȥǥ쥯ȥΡmcpp.err Ȥ̾Υե˽Ϥmcpp.err ϸ˥ڥɤƤ椯Τǡ뤳ȡˡ<br>
<br>
<li><samp>-U <macro></samp><br>
Ƥޥ macro ä<tt>__FILE__, __LINE__, __DATE__, __TIME__, __STDC__, __STDC_VERSION__</tt>, C99 ⡼ɤǤ <tt>__STDC_HOSTED__</tt> -+ ץǵư <tt>__cplusplus</tt> ϼäʤˡ<br>
<br>
<li><samp>-v</samp><br>
<b>mcpp</b> ΥСӥ롼ɥǥ쥯ȥΥɸ२顼Ϥ˽Ϥ롣<br>
<a href="#2.4">2.4</a> ǽҤ٤ -K ץꤵ줿ޤ <a href="#3.5.8">3.5.8</a> ǽҤ٤ #pragma MCPP macro_call ꤵ줿ϡΥץϤΰ̣Ѥ롣<br>
<br>
<li><samp>-W <level></samp><br>
Warning Ϥ٥ level ˻ꤹ롣
level 0 ޤ 1, 2, 4, 8, 16 ΤǤդͤ OR ȤäΤǤ롣
1, 2, 4, 8, 16 Ϥ줾 warning class ̣롣
㤨 -W 5 Ǥ class 1, 4 warning Ϥ롣
0 ξ warning ϽϤʤ
Υץʣꤵȡ٤Ƥλ OR Ȥ롣
㤨 -W 1 -W 2 -W 4 -W 7 ƱǤ롣
-W 7 -W "1|2|4" Ȥ뤳ȤǤ| ѥפȲᤵʤ褦 " " ǰϤɬפˡ
-W "3|4" ȤƤ⤫ޤʤ
-W 0 ꤵ줿ϡ¾ -W ץϤ٤ƥ뤵롣
Υץꤷʤ -W 1 ꤷΤƱǤwarning Ƥ <a href="#5.5"> 5.5</a> - <a href="#5.9"> 5.9</a> ȡˡ<br>
<br>
<li><samp>-z</samp><br>
#include Ǽޤ줿եΥץץ̤ϽϤʤ
ޥ롣ץץΥǥХå˻ȤץǤ롣<br>
</ul>
<p>:</p>
<p>*1 GCC Ȱ㤦ΤϼǤ롣</p>
<ol>
<li>-MG ץϤʤץλʣ뤫Ǥʤäơɤͤάˡ
-M ץǤ⡢롼ɥե뤬Ĥʤϥ顼ˤϤʤ뤬¸طԤϽϤΤǡѤǤ롣<br>
<li>GCC-specific-build GCC ˹碌Ƥ뤬ʳǤϡ-MM, -MMD ץǽإåϰϤ<br>
</ol>
<br>
<h2><a name="2.4" href="#toc.2.4">2.4. <b>mcpp</b> Υ⡼ɤˤ륪ץ</a></h2>
<p><b>mcpp</b> ˤϤĤư⡼ɤޤλͤ <a href="#2.1"> 2.1</a> ȤƤ
<br>
Υޥ˥奢ǤϳƼΥ⡼ɤλͤ¤٤ƵܤƤΤǡ
ˤʤäƤޤޤƤޤʲǽФƤ <i>DIGRAPHS_INIT</i>, <i>TRUE</i>, <i>FALSE</i>, etc. ʸ̾__ ǻϤޤʤΡˤ <i>italic</i> ɽƤΤϤ٤ system.H ޥǤΥޥϤޤǤ <b>mcpp</b> Ȥѥ뤹˻ȤǡǤä <b>mcpp</b> ¹ԥץˤϤΥޥϻĤäƤϤޤ㤤ʤ褦ˤƤ</p>
<p>Standard ⡼ɤǤϼΥץȤޤ</p>
<ul>
<li><samp>-+</samp><br>
C++ ΥץץåȤư롣ޥ <tt>__cplusplus</tt> ʤͤ system.H Ƥ롣ǥեȤ 1ˡ// ԤιޤǤȤȲᤷ<samp>::, .*, ->*</samp> 줾ñΥȡȤǧ롣#if Ǥ true, false ȤȡϤ줾 1, 0 ɾ롣<tt>__STDC__</tt>, <tt>__STDC_VERSION__</tt> ƤСʤGCC ǤǤ GCC ȤθߴΤ <tt>__STDC__</tt> Ϻʤˡ_ ǻϤޤʤޥ롣extended characters UCN ؤѴϤʤ*1, *2<br>
<br>
<li><samp>-2</samp><br>
Digraphs νȿž롣<i>DIGRAPHS_INIT</i> == <i>FALSE</i> ξϤ digraph ǧ褦ˤʤꡢդξǧʤʤ롣<br>
<br>
<li><samp>-h <n></samp><br>
ޥ <tt>__STDC_HOSTED__</tt> ͤ <n> 롣<br>
<li><samp>-S <n></samp><br>
C Ǥ <tt>__STDC__</tt>
ͤ <n> ѹ롣C++ Ǥ̵뤵롣<n> [0,9] ϰϤοͤǤʤФʤʤ<n> 1 ʾǤС_ ǻϤޤʤޥ<tt>unix, linux</tt> ˤ̵ˤ롣<br>
S <tt>__STDC__</tt> ΰ̣Ǥ롣Υץꤷʤȡ<tt>__STDC__</tt> ϥǥեȤͤȤʤ̾ 1ˡ<br>
GCC ǤǤ -pedantic, -pedantic-errors, -lang-c89 Ǥ -S1 ꤷƱȤˤʤΤǡμ -S ̵뤵롣
ޤΥץǤ <tt>unix, linux, i386</tt> ʰȿλޥ̵ˤʤʤ
GCC ȤθߴΤǤ롣
λޥ -ansi ޤ -std=iso* ץǽ̵ˤʤ롣<br>
<br>
<li><samp>-V <value></samp><br>
C Ǥ <tt>__STDC_VERSION__</tt>C++ Ǥ <tt>__cplusplus</tt> Ȥޥͤꤵ줿 <value> ѹ롣ξ <value> long ͤȤʤC95 ǤϤͤ 199409LC99 Ǥ 199901LC++ Standard Ǥ 199711L Ǥˡ<tt>__STDC__</tt> 0 Ƥ <tt>__STDC_VERSION__</tt> ɬ 0L Ȥʤꡢ-V ̵Ǥ롣<br>
C ǤϡΥץꤷʤȡ<tt>__STDC_VERSION__</tt> system.H <i>STDC_VERSION</i> ͤȤʤGCC V.2.7 - V.2.9 Ǥ 199409LʳǤ 0Lˡ-V199901L Ȥ <tt>__STDC_VERSION__</tt> >= 199901L ˤʤäϼΤ褦 C99 λͤȤʤ<a href="#3.7"> 3.7</a> ȡˡ<br>
<br>
<ol>
<li>// ޤǤȤȤư
*3<br>
<li>Preprocessing-number e+, E+, e-, E- Ʊͤ p+, P+,
p-, P- Ȥ sequence ǧ롣ưΥӥåȥѥ 0x1.FFFFFEp+128 Ȥդˡʤɽ뤿ΤΤǤ롣<br>
<li>_Pragma( "foo bar") Ƚ #pragma foo bar ȽΤƱ̤ _Pragma operator ͭˤʤ롣<br>
<li><i>EXPAND_PRAGMA</i> Ȥޥ <i>TRUE</i> ƥѥ뤵줿 <b>mcpp</b> Ǥϡ#pragma ԤΰϡSTDC ޤ <b>mcpp</b> ǻϤޤΤǤʤ¤ޥŸоݤȤʤʥǥեȤǤ Visual C ǰʳǤ <i>EXPAND_PRAGMA</i> == <i>FALSE</i> ǤꡢޥŸʤˡ<br>
<li>̻ҡʸʸƥ롦pp-number ˤ UCN (universal-character-name) sequence ̤ʤ <i>STD</i> ⡼ɤ˸¤ˡ<br>
<br>
</ol>
ʤѰޥ C99 λͤǤ뤬C90 C++ ǤȤ褦ˤƤ롣*4<br>
C++ Ǥ -V199901L Ȥ <tt>__cplusplus</tt> >= 199901L ˤȡC99 ߴ⡼ɤȤʤꡢ嵭 2,3,4 εǽĥԤ1 ̵ͭ5 ϤۤƱ͡ˡ <b>mcpp</b> ȼγĥǤꡢC++ Standard ˤϰȿ롣<br>
ʤΥޥ <tt>__STDC__</tt>, <tt>__STDC_VERSION__</tt>, <tt>__cplusplus</tt> λ -D ץϻȤʤ̤Υ桼ޥȶ̤뤿Ǥ롣<br>
</ul>
<p><i>STD</i> ⡼ɤǤϼΥץȤޤ</p>
<ul>
<li><samp>-3</samp><br>
Trigraph νȿž롣
<i>TRIGRAPHS_INIT</i> == <i>FALSE</i> ξϤ trigraph ǧ褦ˤʤꡢդξǧʤʤ롣<br>
<li><samp>-K</samp><br>
ޥ˴ؤȤ˽ǽϤ֥ޥ⡼ɡ(macro notification mode) ꤹ롣
Υ⡼ɤǤϡץץνϤ鸵ΥΥޥΰ֤Τ뤳ȤǤ롣
Υ⡼ɤ C/C++ refactoring tool Τ˼줿ΤǤ롣
C/C++ ˤϥץץȤեΤ뤳Ȥ refactoring tool ˤȤäƺΥ⡼ɤȤХץץνϤ饽ƹ뤳ȤǤ롣
ˡϤΤޤƥץץƥѥ뤹뤳ȤǤ롣*5<br>
Υ⡼ɤϼ pragma ǻꤹ뤳ȤǤ롣
<pre>
#pragma MCPP debug macro_call
</pre>
-K ץϤ pragma Ƭ˽ΤȤۤƱ̤ġ
pragma ǤϻޥϽϤʤ
Macro notification λͤˤĤƤ <a href="#3.5.8">3.5.8. #pragma MCPP debug macro_call</a> ȤΤȡ<br>
Υ⡼ɤǤϼ -k ץưŪ˻ꤵ롣
Υ⡼ɤƱ -v ץꤵ줿 -v ץϤΰ̣Ѥmacro notification Ƥܺ٤ˤʤ롣
ޤ-a (-x assembler-with-cpp) ޤ -C ץꤵ줿ϡ-K ץϼưŪ̵ˤʤ롣*6<br>
</p>
<li><samp>-k</samp><br>
horizontal white spaces (space, tab) ̤ˤΤޤϤ롣
ȤƱĹ spaces Ѵ롣
ȥץץνϤȤ column ֤бݻ뤿ΥץǤ롣
ޥȰ֤뤬-K ץȤȤ⸵ΰ֤Τ뤳ȤǤ롣*7<br>
</ul>
<p>:</p>
<p>*1 C++ <tt>__STDC__</tt> ƤΤϥȥ֥θǤꡢ
ɤͤǤϤʤGCC ΥɥȤˤȡإåե¿ <tt>__STDC__</tt> Ƥ뤳ȤԤƤΤǡC++ Ǥ⤳Ƥɬפ롢ȤΤȤǤ롣ϥإåեνȸ虜ʤC90, C99, C++ ˶̤ʬˤϡ<samp>#if __STDC__ || __cplusplus</samp> Ƚ٤ʤΤǤ롣</p>
<p>*2 C++ Standard Ǥ C99 ȰäơUCN 硹ŪʰƤꡢȾüʼϤǤʤC 1997/11 draft Ǥ⤽ǤäUnicode ޤƳ뤳Ȥˤϡô礭뤳꤬äƵǤ롣</p>
<p>*3 // C90Standard ⡼ɤξˤǤ⥳ȤȤư˥Ф</p>
<p>*4 GCC ȤθߴΤǤ롣</p>
<p>*5 GCC-specific-build <b>mcpp</b> ȡ뤹ȡ<b>mcpp</b> ˤץץϤ cc1 (cc1plus) -fpreprocessed ȤץդϤ褦ˤʤ롣
ΥץϤץץߤǤ뤳Ȥ cc1 ΤǤ뤬Ǥ⥳ȤϽ롣
äơ-K ץη̤ cc1 -fpreprocessed ץդϤƺ٤ʤ
ޤgcc (g++) ޥɤ -save-temps Ȥץդȡץץ̤ *.i (*.ii) ե뤬ĤΤǡ refactoring tool ǽ뤳ȤǤ롣</p>
<p>*6 -x assembler-with-cpp ץǤ C/C++ ΥǤϤʤ GCC Ѥ *.S ե뤬եȤƻȤ뤬 *.S եΥץץǤϡ-K ץȤäƥȤȥ֤뤿ᡢ֥Ǥʤʤ뤫Ǥ롣
ޤ-C ץˤ륳Ȥ -K ץ줿Ȥʶ路ȤΤǡƱˤϻȤʤ</p>
<p>*7 ΥץȤäƤ⡢üʾˤΤбݻʤȤ롣
<backslash><newline> ˤϢȹԤޤȤˤϢ뤬Ϣ³䡢Ȥ 256 ʾ³ʤɤǤ롣
ʤΥץꤷƤ⤷ʤƤ⡢'\v', '\f' space Ѵ롣</p>
<br>
<h2><a name="2.5" href="#toc.2.5">2.5. νϰʳνϤ˶̤Υץ</a></h2>
<p>GCC ϥץ¿ΤǡGCC ǤǤϤȤξͤ뤿ˤĤΥץ¾νϤȤϰ㤦ΤˤƤޤʤGCC ǥѥ뤷 <b>mcpp</b> Ǥ compiler-independent ǤΥץ¾νϤǥѥ뤷ΤƱǤʲΥץ GCC ǰʳ˶̤ΤΤǤ</p>
<ul>
<li><samp>-a</samp><br>
Υ֥饽˸뼡Τ褦ʵˡ顼ˤ̤<br>
<ol>
<li>
<pre>
#APP
</pre>
<p>Τ褦 # μ identifier äΥǥ쥯ƥ֤˹פʤ硢ιԤΤޤϤ롣</p>
<li>
<pre>
# + any comment.
</pre>
<p>Ȥä # μ identifier, pp-number ʳΤΤԤϡ˥ȤȤ˼ΤƤ뤬顼ˤϤʤ</p>
<li>
<pre>
"Jugemjugem
gokouno
surikire"
</pre>
<p>ȤäΤήιԤޤʸƥ<br>
<samp>"Jugemjugem\ngokouno\nsurikire"</samp><br>
ȤԤϢ뤹롣</p>
<li>## 黻Ҥˤ token Ϣ pp-token ȤƤ̵ token Ƥ⡢顼ˤʤ<br><br>
<li>ޥŸ space ʤ
η̡ pp-token ȰۤΤϢ뤵Ƥ⥨顼ˤʤ<br>
</ol>
<p> GNU Υʤɤ˻ΤǤGCC ǤǤϤΥץ -x assembler-with-cpp -lang-asm Ǥ<br>
Υץ <i>POSTSTD</i> ⡼ɤǤϻȤޤ<br>
Υ⡼ɤΥޥ˥奢Ǥ <b>lang-asm</b> ⡼ɤȸƤӤޤ<br>
Υ⡼ɤ <b>mcpp</b> C/C++ ʳΥƥȤΥޥץåȤƻȤŬƤޤxrdb ƤӽФ cpp ȤƻȤʤɤǤ</p>
<li><samp>-I-</samp><br>
ǥեȤ include directory 뤵졢Ķѿǻꤵ줿 directory ¾ -I ץǻꤵ줿 directory ͭȤʤ롣GCC ǤǤϤΥץ -I- ǤϤʤ -nostdinc Ǥ롣GCC Ǥ -I- ץϤޤäạ̈ġ<a href="#2.6"> 2.6</a> ȡˡ<br>
</ul>
<br>
<h2><a name="2.6" href="#toc.2.6">2.6. ϤȤΥץ</a></h2>
<p>νϤǥץץåȤ <b>mcpp</b> ȤˤϡϤΥץץåΤŬ֤̾Ƥޤλˡ°ΥץץåäƤޤȤΤʤ褦餫̾Υե˥ԡƤƤ<br>
Linux, FreeBSD, CygWIN ǤˤĤƤ <a href="#3.9.5"> 3.9.5</a> ȤƤ
GCC 3.*, 4.* ǤˤĤƤ <a href="#3.9.7">3.9.7</a>, <a href="#3.9.7.1">3.9.7.1</a> ȤƤMinGW ǤˤĤƤ <a href="#3.9.7.1">3.9.7.1</a> ȤƤ
</p>
<p>°Υѥɥ饤Ф̾ˡǤ <b>mcpp</b> ϤˡΤʤץ⤢ޤ<br>
Gcc Ǥ -Wp ȤޥƥץȤȡɤʥץǤץץåϤȤǤޤ㤨С</p>
<pre>
gcc -Wp,-W31,-Q23
</pre>
<p>Ȥȡץץå -W31 -Q23 ȤץϤޤץץåϤץ -Wp, ³ , Ƕڤä¤٤ޤ*1, *2</p>
<p>¾νϤǤ⡢⤷ѥɥ饤ФΥСμΥޥƥץɲäۤɤǤ礦㤨С-P<opt> Ȼꤹ P Ȥä -<opt> ץץåϤ褦ˤƤȡɤʥץǤȤ褦ˤʤΤǤ</p>
<p>⤦Ĥˡϡ <b>mcpp</b> ǥץץơνϥեեȤƥѥϤ褦 makefile ȤǤˡˤĤƤ <a href="#2.9"> 2.9</a>, <a href="#2.10"> 2.10</a> ȤƤ
</p>
<p><b>mcpp</b> νϤȤΥץϰʲ̤ǤCompiler-independent ǤˤϤΥץϤޤ</p>
<p>LCC-Win32 ǤǤϼΥץȤޤ</p>
<ul>
<li><samp>-g <n></samp><br>
ޥ <tt>__LCCDEBUGLEVEL</tt> <n>
롣<br>
<li><samp>-O</samp><br>
ޥ <tt>__LCCOPTIMLEVEL</tt> 1 롣
<br>
</ul>
<p>Visual C ǤǤϼΥץȤޤ
</p>
<ul>
<li><samp>-arch:SSE, -arch:SSE2</samp><br>
ޥ <tt>_M_IX86_FP</tt> 줾 1, 2 롣
<br>
<li><samp>-Fl <file></samp><br>
GCC -include <file> Ʊ
<br>
<li><samp>-G<n></samp><br>
<n> 3, 4, 5, 6, B ǤСޥ <tt>_M_IX86</tt> 줾
300, 400, 500, 600, 600 롣<br>
<li><samp>-GR</samp><br>
ޥ <tt>_CPPRTTI</tt> 1 롣
<br>
<li><samp>-GX</samp><br>
ޥ <tt>_CPPUNWIND</tt> 1 롣
<br>
<li><samp>-GZ</samp><br>
ޥ <tt>__MSVC_RUNTIME_CHECKS</tt> 1 롣
<br>
<li><samp>-J</samp><br>
ޥ <tt>_CHAR_UNSIGNED</tt> 1 롣
<br>
<li><samp>-RTC*</samp><br>
-RTC1, -RTCc, -RTCs, -RTCu Υץꤵȡޥ
<tt>__MSVC_RUNTIME_CHECKS</tt> 1 롣<br>
<li><samp>-Tc, -TC</samp><br>
C ΥǤ뤳Ȥؼ롣
ꤷʤƤƱ<br>
<li><samp>-Tp, -TP</samp><br>
-+ ץƱ
<br>
<li><samp>-u</samp><br>
-N ץƱ
<br>
<li><samp>-Wall</samp><br>
-W17 (-W1 -W16) Ʊ
<br>
<li><samp>-WL</samp><br>
-j ץƱ
<br>
<li><samp>-w</samp><br>
-W0 ץƱ
<br>
<li><samp>-X</samp><br>
-I- ץƱ
<br>
<li><samp>-Za</samp><br>
ޥ <tt>_MSC_EXTENSIONS</tt> ̤ˤidentifier '$' Ȥʤ褦ˤ롣
<li><samp>-Zc:wchar_t</samp><br>
ޥ <tt>_NATIVE_WCHAR_T_DEFINED</tt>, <tt>_WCHAR_T_DEFINED</tt> 줾
1 롣<br>
<li><samp>-Zl</samp><br>
ޥ <tt>_VC_NODEFAULTLIB</tt> 1 롣
<br>
</ul>
<p>Mac OS X <b>mcpp</b> Ǥ GCC-specific-build Ǥ compiler-independent-build Ǥ⡢ΥץȤޤ</p>
<ul>
<li><samp>-F <framework></samp><br>
<framework> ǥ쥯ȥɸ framework ǥ쥯ȥͥ褷ƥ롣
ɸ framework ǥ쥯ȥϥǥեȤǤ /System/Library/Frameworks, /Library/Frameworks Ǥ롣
</ul>
<p>Mac OS X GCC-specific-build ǤϼΥץȤޤ</p>
<ul>
<li><samp>-arch <arch></samp><br>
åȥޥΥƥǥեȤΤΤ <arch> ѹ롣
ˤäơޥΤĤѤ롣
<arch> ȤͭʤΤ x86 μ¹ԥץǤ i386, x86_64ppc μ¹ԥץǤ ppc, ppc64 Τɤ줫Ǥ
gcc ޥɤˤϣĤΤɤǤϤ롣gcc ޥɤ -arch i386, -arch x86_64 Τɤ줫ꤹ x86 ѤΥץץåƤӽФ-arch ppc, -arch ppc64 Τɤ줫ꤹ ppc ѤΥץץåƤӽФˡ
</ul>
<p>GCC (GNU C) ǤǤϡʲΡʤ 2.6 νޤǤΡ˥ץȤޤʤGCC ѤǤ <tt>__STDC__</tt> 1 ˤƤΤǡ-S1 ץϻꤷƤ⤷ʤƤƱǤ</p>
<p>ޤ<b>mcpp</b> Υ⡼ɤˤʤץϼΤȤǤ</p>
<ul>
<li><samp>-$</samp><br>
-fno-dollars-in-identifiers Ʊ<br>
<li><samp>-b</samp><br>
ֹäΥΥǽϤ롣
<br>
ץץå饳ѥΤؤιֹμϤ<br>
<pre>
#line 123 "filename"
</pre>
ȤäΥƱǤǤϤ̤Ǥ뤬
ηϻȤʤϤ⤢롣<b>mcpp</b> ϤΤ褦ʽѤ build ǤϡνϤΥѥΤμǹֹϤΤǥեȤλͤǤ롣<br>
νǤǤ⡢ΥץȤȡäΥΥǹֹϤ롣<br>
ΥץϡϤ⤦٥ץץΤΤΤǡ#pragma MCPP preprocess Ȥ߹碌ƥإåեΡ֥ץץץפ˻Ȥ<br>
<li><samp>-dD, -dM</samp><br>
ץץκǸˤλͭʥޥ #define ԤηǽϤ롣-dM ץǤϥץץ̤ϽϤʤޤ줿ޥʤɸޥǤʤнϤ롣-dD ץǤϥץץ̤Ϥ롣ޤޥϽϤʤ*3, *4<br>
<li><samp>-fexceptions</samp><br>
ޥ <tt>__EXCEPTIONS</tt> 1 롣<br>
<samp>-fno-exceptions</samp> ǤϤΥޥʤ<br>
<li><samp>-finput-charset=<encoding></samp><br>
-e <encoding> ץƱGCC ϤΥץꤹ <encoding> UTF-8 Ѵ뤬<b>mcpp</b> ѴϤʤȤա<br>
<li><samp>-fno-dollars-in-identifiers</samp><br>
Identifier '$' ǧʤʥǥեȤǤǧˡ<br>
<li><samp>-fPIC, -fpic, -fPIE, -fpie</samp><br>
ޥ <tt>__PIC__, __pic__</tt> Ȥ 1 롣<br>
<li><samp>-fstack-protector</samp><br>
ޥ <tt>__SSP__</tt> 1 롣<br>
<li><samp>-fstack-protector-all</samp><br>
ޥ <tt>__SSP_ALL__</tt> 2 롣<br>
<li><samp>-fworking-directory</samp><br>
ϤΣܤ˥ȥǥ쥯ȥɽ̤ #line ԤϤ롣<br>
<li><samp>-I-</samp><br>
ΥץȸȤ -I <directory> ץλͤѤ롣Υץ -I ǻꤵ줿ǥ쥯ȥ #include "header.h" ηΥإåեΥˤȤ롣Υץθ -I ǻꤵ줿ǥ쥯ȥϤ٤Ƥ #include directive Υ˻Ȥ롣ޤ#include "header.h" ηǤ include Υǥ쥯ȥϥʤ<br>
<li><samp>-include <file></samp><br>
ᥤΥեˡ<file> #include ʥƬ #include <file> ȽΤƱ̤ˤʤˡ<br>
<li><samp>-iquote <dir></samp><br>
<dir> #include "header.h" ηΥإåեΥѥ˲ä롣<br>
<li><samp>-isysroot=<dir>, -isysroot <dir>, --sysroot=<dir>, --sysroot <dir></samp><br>
<dir> system header directory root Ȥߤʤ
ʤ<dir> system header directory path-list Ƭդ롣
㤨Сinclude directory /usr/include <dir> /Developer/SDKs/MacOSX10.4u.sdk Ǥ /Developer/SDKs/MacOSX10.4u.sdk/usr/include Ȥ롣<br>
<li><samp>-isystem <dir></samp><br>
<dir> 롼ɥѥ system-specific directory ˡsite-specific directory θˡ˲ä롣<br>
<li><samp>-lang-c, -x c</samp><br>
C ΥץץԤꤷʤƤƱ<br>
<li><samp>-m32</samp><br>
ޥ 32 ӥåѤˤ롣
CPU x86_64 ޤ ppc64 ξ硢ǥեȤǤ 64 ӥåѤλޥȤ뤬ΥץꤹȤ줾 i386, ppc ѤΤΤȤ롣<br>
<li><samp>-mmmx</samp><br>
ޥ <tt>__MMX__</tt> 1 롣<br>
<samp>-mno-mmx</samp> Ǥ <tt>__MMX__</tt> ʤ<br>
<li><samp>-nostdinc</samp><br>
¾νϤǤ -I- ץƱ<br>
<li><samp>-undef</samp><br>
-N ץƱ<br>
<li><samp>-O?</samp><br>
? 0 ʳοǤХޥ <tt>__OPTIMIZE__</tt> 1 롣<br>
<li><samp>-Wcomment, -Wcomments, -Wsign-compare</samp><br>
-W1 ץƱꤷʤƤƱ<br>
<li><samp>-Wundef</samp><br>
-W4 ץƱ<br>
<li><samp>-Wtrigraphs</samp><br>
-W16 ץƱ<br>
<li><samp>-Wall</samp><br>
-W17 (-W1 -W16) ץƱclass 2, 4 warning
Linux ɸإåǤȯ䤹뤵Τǡ-Wall ϤƤ롣class 8 warning ̾;פʤǤ롣ˤ portability ΤͭѤʻȤƻ롣Ȥ gcc -Wp,-W31 Ȥ뤳ȡˡ<br>
<li><samp>-w</samp><br>
-W0 ץƱ<br>
</ul>
<p>GCC Ǥ Standard ⡼ɤǤϼΥץȤޤ
</p>
<ul>
<li><samp>-ansi</samp><br>
<tt>__STRICT_ANSI__</tt> ޥ 1 롣
<tt>linux, i386</tt> εʰȿλޥ̵ˤ롣
GCC ͤβѰޥθƤӽФǤϡѰ¸ߤʤƤ⤽ľΥޤʤ*5
<br>
<li><samp>-digraphs</samp><br>
Digraph ǧ-2 Ǥȿžͭˡ
<br>
<li><samp>-lang-c89, -std=gnu89</samp><br>
-S1 ץƱꤷʤƤƱC90 Ǥʤ C95 λͤޤޤ롣<br>
<li><samp>-std=c89, -std=c90</samp><br>
-S1 ץȤۤƱǤ뤬-ansi ްդ롣
<li><samp>-lang-c99, -lang-c9x, -std=gnu99, -std=gnu9x</samp><br>
-V199901L ץƱ<br>
<li><samp>-std=c99, -std=c9x</samp><br>
-V199901L ץȤۤƱǤ뤬-ansi ްդ롣<br>
<li><samp>-lang-c++, -x c++</samp><br>
C++ ΥץץԤ-+ Ʊ<br>
<li><samp>-std=c++98</samp><br>
-+ ȤۤƱǤ뤬-ansi ްդ롣<br>
<li><samp>-pedantic, -pedantic-errors</samp><br>
-W7 (-W1 -W2 -W4) ץƱ
<br>
<li><samp>-std=iso<n>:<ym></samp><br>
ʤΥСꤹ롣<n> C Ǥ 9899 Ǥꡢ
C++ Ǥ 14882 Ǥ롣<n> 9899 ξϡ<ym> 1990, 199409, 1999, 199901 Ǥ롣<n> 14882 ξϡ<ym> 199711 Ǥ롣<ym> ˤ¾ͤꤵ줿ϡ<tt>__STDC_VERSION__</tt> ޤ <tt>__cplusplus</tt> ͤʤξ 200503 Ȥ褦ˣǻꤹ뤳ȡˡ<br>
ΥץǤ -ansi ꤷȤˤʤ롣
¾ǡ-std=gnu* -ansi ްդʤ
-pedantic -ansi ްդʤ<br>
</ul>
<p>GCC Ǥ <i>STD</i> ⡼ɤǤϼΥץȤޤ</p>
<ul>
<li><samp>-lang-asm, -x assembler-with-cpp</samp><br>
¾νϤǤ -a Ʊ
lang-asm ⡼ɤˤ롣
GCC-specific-build Ǥϥޥ <tt>__ASSEMBLER__</tt> 1 졢identifier '$' ϻȤʤʤ롣
ϥե̾ *.S ǤȤϤΥץꤷʤƤ⡢Υ⡼ɤˤʤ롣<br>
<li><samp>-trigraphs</samp><br>
Trigraph ǧ-3 Ǥȿžͭˡ
<br>
</ul>
<p>GCC Ǥ pre-Standard ⡼ɤǤϼΥץȤޤ
</p>
<ul>
<li><samp>-traditional, -traditional-cpp</samp><br>
-@old Ʊ
<br>
</ul>
<p>CygWIN / GCC ǤǤϼΥץȤޤ
</p>
<ul>
<li><samp>-mno-cygwin</samp><br>
Include directory /usr/include /usr/include/mingw ѹ
ޥ cygwin1.dll Ѥ msvcrt.dll Ѥѹ롣<br>
</ul>
<p>ΥץϤ⥨顼ˤϤޤбޤʥ˥Ф⤢ˡ</p>
<ul>
<li><samp>-A <predicate(answer)></samp><br>
GCC ǤϤΥץϥ #assert <predicate(answer)> ȽΤƱ̤ˤʤ뤬#pragma Ǥʤĥǥ쥯ƥ֤ Standard C ǤǧʤΤǤ롣ޤޤǤΤȤ gcc ϥǥեȤǤ -D ץƱΥޥ cpp ϤƤΤǡºݤˤϤۤȤɤξ硢پϤʤ#assert ȤäƤ뵩ʥǤʤ¤ˡ<br>
<li><samp>-g <n></samp><br>
<li><samp>-idirafter <dir></samp><br>
<li><samp>-iprefix <dir>, -iwithprefix <dir>, -iwithprefixbefore <dir></samp><br>
<li><samp>-noprecomp</samp><br>
<li><samp>-remap</samp><br>
</ul>
<p>GCC V.3.3 ʹߤǤϥץץåѥ˵ۼΩץץå¸ߤʤʤäᡢgcc -no-integrated-cpp ץդƸƤӽФƤ⡢ץץåΥץǤϤʤץץץåϤƤ뤳ȤޤGCC V.3.3 ʹѤ <b>mcpp</b> ǤϡΤ褦ʤΤΤ <b>mcpp</b> ǧʤΤϤμΤˤץȤ̵뤷ޤ</p>
<ul>
<li><samp>-c</samp><br>
<li><samp>-E</samp><br>
<li><samp>-f*</samp><br>
<li><samp>-m*</samp><br>
<li><samp>-quiet</samp><br>
<li><samp>-W*</samp><br>
</ul>
<p>:</p>
<p>*1 -Wa ϥ֥Ѥ -Wl ϥѤΥޥƥץǤ롣
UNIX / System V / cc Υޥ˥奢ȡϤꤳΥץ롣GCC / cc -W<x> ץϤȤθߴΤΤΤʤΤǤ</p>
<p>*2 GCC V.3 Ǥ cpp cc1 (cc1plus) ˵ۼƤޤäΤᡢ-Wp ǻꤷץ̾ cc1 (cc1plus) ϤƤޤץץ cc1 ǤϤʤ cpp (cpp0) ˤ뤿ˤϡgcc θƤӽФ -no-integrated-cpp Ȥץꤹɬפ롣</p>
<p>*3 GCC V.3.3 ʹߤǤ̤Υޥ褦ˤʤäϻޥȤƤϰʤʤ-dD ץǤ⤳ΥޥϤ롣</p>
<p>*4 #pragma MCPP put_defines (#put_defines) νϤ -dM ץȤۤƱͤǤ롣äƤ롣</p>
<ol>
<li>put_defines ǤɸޥȤƵꤵƤΤ⡢ȤηǽϤ롣<br>
<li>put_defines ǤϤΥޥΤե̾ȹֹ⥳ȤηǽϤ졢ޤɤߤ䤹褦˷ƽϤ뤬-d* ץǤ GCC ƱǽϤ롣ηꤷƤ makefile ⸫ݤ뤫Ǥ롣<br>
</ol>
<p>*5 <a href="#3.9.6.3">3.9.6.3</a> ȤΤȡ</p>
<br>
<h2><a name="2.7" href="#toc.2.7">2.7. Ķѿ</a></h2>
<p>Compiler-independent Ǥ <b>mcpp</b> Ǥ include ǥ쥯ȥ UNIX OS Ǥ /usr/include, /usr/local/include ʳϥǥեȤǤꤵƤʤΤǡ¾Υǥ쥯ȥɬפǤСĶѿ¹ԻץǻꤷʤФʤޤCompiler-independent ǤδĶѿ C Ǥ INCLUDEC++ Ǥ CPLUS_INCLUDE ǤեΥϥǥեȤǤϥեΤǥ쥯ȥȤޤ<a href="#4.2"> 4.2</a> ȤΤȡˡLinux Ǥ include ǥ쥯ȥ˺𤬤Τǡ̤кɬפǤˤĤƤ <a href="#3.9.9"> 3.9.9</a> ȤƤ</p>
<p>GCC ǤǥǥեȤꤵƤ
system include ǥ쥯ȥˤĤƤϡnoconfig/*.dif եƤޤinclude ǥ쥯ȥΥȴĶѿ̾ˤĤƤϡ<a href="#4.2"> 4.2</a> Ƥ</p>
<p>Ķѿ LC_ALL, LC_CTYPE, LANG ˤĤƤϡ
<a href="#2.8"> 2.8</a> Ƥ
</p>
<br>
<h2><a name="2.8" href="#toc.2.8">2.8. Multi-byte character encoding</a></h2>
<p><b>mcpp</b> multi-byte character ¿ͤ encoding бƤޤ
</p>
<blockquote>
<table>
<tr><th>EUC-JP </th><td>ܤ extended UNIX code (UJIS)</td></tr>
<tr><th>shift-JIS </th><td>ܤ MS-Kanji</td></tr>
<tr><th>GB-2312 </th><td> EUC-like encoding ʴλ</td></tr>
<tr><th>Big-Five </th><td>Ѥ encoding λ</td></tr>
<tr><th>KSC-5601 </th><td>ڹ EUC-like encoding (KSX 1001)</td></tr>
<tr><th>ISO-2022-JP1</th><td>ݵʤܸ</td></tr>
<tr><th>UTF-8 </th><td>unicode encoding Σ</td></tr>
</table>
</blockquote>
<p>ơ¹Ի˼Τ褦ʤĤˡǼºݤ˻Ȥ encoding
ꤷޤ̤ͥϤνΤȤǤ</p>
<ol>
<li> #pragma
__setlocale( "<encoding>") ǻꤵ줿 encoding Visual C ѤǤ #pragma setlocale( "<encoding>") ˡȤȡܤΥեǤʣ encoding ȤȤǤ롣<br>
<li>¹Իץ -e <encoding> ޤ -finput-charset=<encoding> ǻꤵ줿 encoding<br>
<li>Ķѿ LC_ALL, LC_CTYPE, LANG ǻꤵ줿 encoding̤ͥϤνˡ<br>
<li><b>mcpp</b> ѥ뤹ꤵ줿ǥեȤ encoding<br>
</ol>
#pragma
__setlocale-e ץĶѿǻǤ <encoding> ϸ§Ȥƶ̤ǡΤȤǤդ <encoding> Ϻդ encoding ꤷޤ<encoding> ʸʸζ̤ޤޤ'-', '_' ̵뤷ޤ '.' ȡޤǤ٤̵뤷ޤäơȤ EUC_JP, EUC-JP, EUCJP, euc-jp, eucjp, ja_JP.eucJP Ϥ٤ƱΤȤưޤޤ* Ǥդʸ̣ޤiso8859-1, iso8859-2 iso8859* ˥ޥåˡ<br>
<br>
<blockquote>
<table>
<tr><th>EUC-JP </th><td>eucjp, euc, ujis</td></tr>
<tr><th>shift-JIS </th><td>sjis, shiftjis, mskanji</td></tr>
<tr><th>GB-2312 </th><td>gb2312, cngb, euccn</td></tr>
<tr><th>BIG-FIVE </th><td>bigfive, big5, cnbig5, euctw</td></tr>
<tr><th>KSC-5601 </th><td>ksc5601, ksx1001, wansung, euc<i>KR</i></td></tr>
<tr><th>IS0-2022-JP1</th><td>iso2022jp, iso2022jp1, jis</td></tr>
<tr><th>UTF-8 </th><td>utf8, utf</td></tr>
<tr><th>ʤ </th><td>c, en*, latin*, iso8859*</td></tr>
</table>
</blockquote>
<p>C, en* (english), latin*, iso8859* Τɤ줫ꤹȡmulti-byte character ǧʤʤޤASCII ǤϤʤ ISO-8859-* Latin Ϥ single-byte character Ȥϡꤷޤ#pragma __setlocale( "") ȶ̾ꤹȡǥեȤ encoding ޤ</p>
<p>ΤۤVisual C++ Ѥ #pragma setlocale ˸¤äơΤΤȤޤ Visual C++ ȤθߴΤѰդƤΤǤVisual C++ Ǥϥѥ餬ǤʤǧʤΤǡȤäۤɤǤ礦'-' <b>mcpp</b> ǤϾάǤ뤬Visual C++ ΥѥФƤϾάǤʤˡVisual C++ Ǥ C, english Ȥޤ</p>
<blockquote>
<table>
<tr><th>shift-JIS</th><td>japanese, jpn</td></tr>
<tr><th>GB-2312 </th><td>chinese-simplified, chs</td></tr>
<tr><th>BIG-FIVE </th><td>chinese-traditional, cht</td></tr>
<tr><th>KSC-5601 </th><td>korean, kor</td></tr>
</table>
</blockquote>
<p>Visual C++ ǤϡWindows ɤιѤǤ뤫ˤäƥǥեȤ multi-byte character encoding Ѥ뤳ȤˤʤäƤޤޤWindows ΡϰȸΥץפλˤäƤѤޤεǽȾüǤäǤ#pragma setlocale ˤϤͥ褷ޤ</p>
<p>GCC shift-JIS, ISO2022JP, BIG-FIVE Τ褦 multi-byte character 0x5c ͤĥХȤޤ encoding ϤޤǤʤ礬ΤǡGCC ǤǤ <b>mcpp</b> 䤤ޤ*1</p>
<p>:</p>
<p>*1 GCC configure --enable-c-mbchar Ȥץդȡ GCC ǤϴĶѿ LANG C-EUCJP, C-SJIS, C-JIS Τɤ줫˥åȤ뤳Ȥˤä encoding Ǥ뤳ȤˤʤäƤ롣
configuration 1998 餢ΤΤ褦Ǥ뤬ºݤˤϻȤƤ餺ȤäƤưʤ
GCC Ǥ <b>mcpp</b> ǤϤ LANG=C-SJIS δĶѿݡȤƤV.2.7 ѻߤ<br>
GCC Ǥ LANG Τۤ LC_ALL, LC_CTYPE Ǥ encoding Ǥ뤳ȤˤʤäƤ뤬ºݤˤϿǥåѤǤ롣</p>
<br>
<h2><a name="2.9" href="#toc.2.9">2.9. ѥѥ <b>mcpp</b> Ȥˤ</a></h2>
<p>Visual C, Borland C, LCC-Win32 Τ褦˥ץץåѥ餫ΩƤʤ֥ѥѥפ¿ʤäƤޤ®٤夲뤿Ȼפޤץץפ֤ϸߤΥϡɥǤϾʤΤˤʤäƤޤޤ⤽ץץȤΤϼ¹ԻĶϤϤۤΩ̤ΥեǤ뤳Ȥ礭ʰ̣Τǡ֥ѥѥפ¿ʤΤϷ褷ɤȤȤϻפޤץץνϰ¸λ̤ͤˤʤޤ</p>
<p>Ȥ⤢ѥѥǤϡץץå <b>mcpp</b> ֤뤳ȤǤޤäơ<b>mcpp</b> Ȥˤϡޤ <b>mcpp</b> ǥץץνϤѥϤޤѥˤäƺ٥˥ץץ뤳ȤˤʤޤǤޤǤ⡢<b>mcpp</b> ȤȤϥåΤͭǤꡢ°ΥץץåˤϤʤǽȤȤǤޤ<br>
ѥѥ <b>mcpp</b> Ȥˤϡμ makefile ˽ɬפޤΥץȤƤϡ<b>mcpp</b> ȤΥѥ˻Ȥ visualc.mak, borlandc.mak, lcc_w32.mak makefile ΥꥳѥѤƤ</p>
<p>ʤGCC 3, 4 Ǥϥѥ餬ץץǽ¢褦ˤʤäΤΡץץåȤץѰդƤΤǡѤ뤳Ȥ <b>mcpp</b> ʤȤȤǤޤ<a href="#3.9.7">3.9.7</a> ȡˡ</p>
<br>
<h2><a name="2.10" href="#toc.2.10">2.10. 糫ȯĶ <b>mcpp</b> Ȥˤ</a></h2>
<p>GUI Τ糫ȯĶ(IDE) ȤΤϽȼλͤǤꡢŪʥե̾ϸƤʤΤǡ <b>mcpp</b> ȤˤϺޤξ塢ѥ餬ѥѥǤȡ <b>mcpp</b> ȤեΤϤ˺Ǥ</p>
<p>Ǥ Windows Visual C++ 2003, 2005, 2008 IDE <b>mcpp</b> ȤˡޤBorland C Ǥ LCC-Win32 Ǥϡޥɥ饤ǻȤäƤ</p>
<p>ޤMac OS X Xcode.app / Apple-GCC <b>mcpp</b> Ȥˡޤ</p>
<h3><a name="2.10.1" href="#toc.2.10.1">2.10.1. Visual C++ IDE <b>mcpp</b> Ȥˡ</a></h3>
<p>Visual C++ IDE ŪʥեƤ餺⥳ѥ餬ѥѥʤΤǡ̾Ρ֥ץȡפǤ <b>mcpp</b> ȤȤǤޤ<b>mcpp</b> Ȥ makefile ƤСǡ֥ᥤեץȡפ뤳ȤǤޤơԽ両䡢˥٥ǥХåǽޤ IDE ȾεǽȤȤǤޤ</p>
<p>֥ᥤեץȡפˤϼΤ褦ˤޤˡ Visual C++ .net 2003 ɥȡפӡVisual C++ 2005 Express EditionסVisual C++ 2008 Express EditionפΡ֥إספΡ֥ᥤեץȤκפ˽ƤΤǤ</p>
<ol>
<li>IDE ΥǥХåǽȤ¤ĥ桼Ȥƥ롣*1<br>
<li><b>mcpp</b> Ȥ makefile Ƥnoconfig/visualc.mak ȡˡ<br>
<li>Visual Studio ư롣*2<br>
<li>ֿץȡפå
줿ֿץȡפΥɥǡ֥ᥤե ץȡפӡ֥ץ̾פȡ־פꤷơOKפå롣<br>
<li>ȡ֥ᥤե ץꥱ ɡפΥɥΤǡ֥ץꥱפåǡ֥ӥɥޥɥ饤סֽϡס֥ޥɡסʤޤϡ־õޥɡסˡ֥ӥɥޥɡפϤ롣ѸϤ狼ˤ<b>mcpp</b> Ȥ compiler-independent ǤΥѥˤȤȼΤ褦ʤȤǤ <b>mcpp</b> μ¹ԥץ̾ mcpp.exe Ȥˡ<br>
<pre>
֥ӥɥޥɥ饤: nmake
ֽϡ : mcpp.exe
֥ޥɡ : nmake clean
֥ӥɥޥɡ : nmake PREPROCESSED=1
</pre>
<b>mcpp</b> Visual C Ǥѥ뤹 COMPILER=MSC ȤץդäƼΤ褦ˤ롣<br>
<pre>
֥ӥɥޥɥ饤: nmake COMPILER=MSC
ֽϡ : mcpp.exe
֥ޥɡ : nmake clean
֥ӥɥޥɡ : nmake PREPROCESSED=1 COMPILER=MSC
</pre>
֥ᥤեץȡפǤ make install 륳ޥɤʤΤǡ֥ӥɥޥɥ饤ס֥ӥɥޥɡפǻꤵ륳ޥɤǤ install ¹Ԥ褦 makefile Ƥɬפ롣<br>
<b>mcpp</b> ѥ뤹ΤǤʤС֥ӥɥޥɥ饤פȡ֥ӥɥޥɡפȤ̾Ʊɤ<br>
Ϥ顢ִλפå롣<br>
<li>ȡ
֥塼ץפ˥ץȤΤǡΡ֥եפȤեåơơ˥塼Ρ֥ץȡפִ¸ܤɲáפӡե٤ơOKפ롣ȡ֥塼ץפ˥ե̾롣<br>
</ol>
<p>ǡԽס֥ӥɡס֥ӥɡס֥ǥХåεǽ٤ƻȤ褦ˤʤޤ</p>
<p>:</p>
<p>*1 ǥХåǽȤˤϡWindowsXP Pro, Windows2000 Ǥ "Debugger users" Ȥ롼פ˥桼°ɬפ롣WindowsXP HE ǤϤ롼פϤʤΤǡԤȤƥʤФʤʤޤ٥롦ǥХåǽȤˤ cl.exe θƤӽФ -Zi ץղäơǥХå褦 makefile Ƥɬפ롣</p>
<p>*2 ֥ȡ->֥ץפ鵯ưȡ롼ɥǥ쥯ȥδĶѿꤵʤꤹˤˡVisual Studio ޥɥץץȡפơեΤǥ쥯ȥ˰ư VC 2003 Ǥ</p>
<pre>
devenv *.sln /useenv
</pre>
wp>ȤơVC 2005, 2008 express edition Ǥ</p>
<pre>
vcexpress *.sln /useenv
</pre>
<p>ȤƵưʤФʤʤ
</p>
<h3><a name="2.10.2" href="#toc.2.10.2">2.10.2. Mac OS X / Xcode.app <b>mcpp</b> Ȥˡ</a></h3>
<p>Mac OS X IDE Ǥ Xcode.app <b>mcpp</b> ȡ뤷֤ʤȤȤǤޤ*1</p>
<p>Xcode.app Ϥʤ /usr/bin ǤϤʤ /Developer/usr/bin ˤ gcc (g++) Ȥޤ/Developer Xcode ΥǥեȤΥȡǥ쥯ȥˡ
äơ<b>mcpp</b> Ȥˤϡ gcc (g++) Ѥ GCC-specific-build ȡ뤹ɬפޤ
ΤˤϼΤ褦ˤޤ${mcpp_dir} <b>mcpp</b> ΥΤǥ쥯ȥˡ</p>
<pre>
export PATH=/Developer/usr/bin:$PATH
configure ${mcpp_dir}/configure --enable-replace-cpp
make
sudo make install
</pre>
<p>PATH ʳ /usr/bin Υѥ˥ȡ뤹ƱʤΤǡѥؤΥȡ universal binary ȡ뤹ˡʤɤˤĤƤϡINSTALL-jp Ƥ</p>
<p> <b>mcpp</b> ȡ뤷ƤСȤ <b>mcpp</b> Τ̤Ϥ Xcode.app Ȥޤ
Xcode.app Apple-GCC ͭ *.hmap Ȥ̾ "header map file" ʤΤޤ <b>mcpp</b> ǽޤ
<b>mcpp</b> precompiled header νϤʤΤǡ<samp>#include *.pch</samp> ̾ΥإåեȤɤ߹ޤޤ
ޤ<b>mcpp</b> Objective-C, Objective-C++ νϤʤΤǡ*.m, *.mm ΥեΥץץ <b>mcpp</b> ̤餺 cc1obj, cc1objplus ľܡϤޤ</p>
<p><b>mcpp</b> ȼΥץȤϡXcode.app β̥ȥåפΥ˥塼СΡ֥ץȡפ֥ץԽפǥåǸץȥǥΥɥǡ֥ӥɡץڥǡ֤¾ C ե饰פιܤԽޤ
ץϼΤ褦 -Wp, ³ƥޤǶڤʤꤷޤ</p>
<pre>
-Wp,-23,-W3
</pre>
<p>:</p>
<p>*1 Ǽ夲Τ Mac OS X Leopard / Xcode 3.0 Ǥ롣</p>
<br>
<h1><a name="3" href="#toc.3">3. ĥǽȸߴ</a></h1>
<p><b>mcpp</b> ˤϤĤθͭγĥǽޤޤ
ƽ°ΥץץåˤϤ줾γĥǽޤΰ <b>mcpp</b> ǤϻȤޤǤϤĥǽȸߴޤ</p>
<p>ʤStandard ⡼ɤǤ #pragma Ԥϸ§ȤƤΤޤϤޤ<b>mcpp</b> ȤΤˤĤƤƱͤǤƱ #pragma ѥΤˤȤäƤ̣IJǽ뤿Ǥ<br>
#pragma MCPP ǻϤޤԤ <b>mcpp</b> ѤΤΤʤΤǽϤޤGCC ǤǤϡ#pragma GCC poison, dependency, system_header Τɤ줫³ԤϤޤޤ#pragma once, #pragma push_macro, #pragma pop_macro ⥳ѥΤˤȤäƤ̵ѤʤΤǽϤޤ
¾ǡ#pragma GCC visibility * ϥѥȥΤΤΤʤΤǡϤޤ*1</p>
<p><i>EXPAND_PRAGMA</i> == <i>TRUE</i> ǥѥ뤵줿 <b>mcpp</b> Ǥ #pragma ԤΰϥޥŸоݤȤʤޤʼºݤˤ <i>EXPAND_PRAGMA</i> == <i>TRUE</i> Visual C ǤǤˡ#pragma STDC, MCPP, GCC Τɤ줫³ԤŸޤ</p>
<p>#pragma sub-directive implementation-defined ǤΤƱ̾ sub-directive Ϥˤäưۤʤ̣Ķ줬ޤ̾ξͤ빩פɬפǤޤ<i>EXPAND_PRAGMA</i> == <i>TRUE</i> ξϡ#pragma sub-directive ̾ȤޥŸƤϺΤǡ桼֤̾ȽŤʤʤ褦ˤȤߤɬפǤ<b>mcpp</b> ͭ sub-directive #pragma MCPP ǻϤޤޥŸʤΤϤΤǤC99 ǵꤵ줿 #pragma STDC GCC 3 #pragma GCC ˡΤ줿ΤǤ<br>
#pragma once ¿νϤ˼̾ͤ붲ϤʤʤäƤΤǡ̾ΤޤƤޤޤ#pragma __setlocale ϥѥΤФƤɬפʤΤ MCPP Ȥ̾դ"__" Ƭդƥ桼֤̾ȽŤʤʤ褦ˤƤޤ</p>
<p></p>
<p>*1 <b>mcpp</b> GCC-specific-build Ǥϡ#pragma GCC ǻϤޤ pragma Τ system_header ݡȤƤ롣poison, dependency ϥݡȤʤ</p>
<br>
<h2><a name="3.1" href="#toc.3.1">3.1. #pragma MCPP put_defines, #pragma MCPP preprocess </a></h2>
<p>#pragma MCPP put_defines, #pragma MCPP preprocess, #pragma MCPP preprocessed Standard ⡼ɤΤΤǡ#put_defines, #preprocess, #preprocessed pre-Standard ⡼ɤΤΤǤʲǤ #pragma ˤȤäޤ</p>
<p>#pragma MCPP put_defines ǥ쥯ƥ֤˽в <b>mcpp</b> ϡλƤ뤹٤ƤΥޥ #define ԤηǽϤޤ#undef 줿ΤϽФƤޤ<tt>__STDC__</tt> #define, #undef оݤˤǤʤΤϡ #define ԤηȤäơȥޡǰϤǽϤޤ<tt>__FILE__</tt>, <tt>__LINE__</tt> ϥޥƤӽФưŪüʥޥʤΤǡǽϤִꥹȤ̵̣ʤΤǤˡ<br>
pre-Standard ⡼ɤ <i>POSTSTD</i> ⡼ɤǤϡfunction-like ޥΥѥ̾ϵޤǤΥǥ쥯ƥ֤Ǥϡѥ̾裱ѥ˵Ū a, b, c, ... Ȥ̾ɽޤ27 ܰʹߤΥѥˤ a1, b1, c1, ..., a2, b2, c2, ... Ȥ̾Ȥޤ</p>
<p><b>mcpp</b> ϥեϥեꤻ˵ươܡɤ餤ʤ</p>
<pre>
#pragma MCPP put_defines
</pre>
<p>Ǥȡޥ٤Τ뤳ȤǤޤ줾ΥޥΤ륽ե̾ȹֹɽ륳ȤϤޤ-S1, -N ΥץդƵưȡ줾ޥäƤ뤳Ȥ狼ޤ</p>
<p>#pragma MCPP preprocess Ȥǥ쥯ƥ֤˽в <b>mcpp</b> ϡ</p>
<pre>
#pragma MCPP preprocessed
</pre>
<p>ȤԤϤޤϡΥեϥץץѤߤǤ뤳ȤΤǤ</p>
<p>#pragma MCPP preprocessed Ȥǥ쥯ƥ֤˽в <b>mcpp</b> ϡΥե <b>mcpp</b> ˤäƥץץѤߤǤȽǤơ#define ԤФƤޤǤϤΤޤϤ˥ԡޤơ#define ԤФƤȡȤϤ٤ #define ԤǤȽǤơޥޤˤ륽ե̾ȹֹξޤ*1, *2<br>
#pragma MCPP preprocessed ͭϰϤϤΥǥ쥯ƥ֤Τ륽եΤιʹߤǤΥե뤬 #include 줿ΤǤϡinclude ̾Υץץޤ</p>
<p>:</p>
<p>*1 ºݤνϤ⤦ʣǤ롣#pragma MCPP preprocessed
ϹԤȾΤޤϤ˥ԡ뤬ɸޥ #define Ԥȥޡ˰ϤޤƤΤǡιԤϼΤƤ롣ޤνѤǤǤ #line ԤϽϤΥѥΤѴƽϤ롣</p>
<p>*2 äơpre-preprocess Ƥޥξξϼʤ</p>
<h3><a name="3.1.1" href="#toc.3.1.1">3.1.1. إåե pre-preprocess</a></h3>
<p>嵭Υǥ쥯ƥ֤ѤȡإåեΡ֥ץץץפ뤳ȤǤޤ֥ץץץפƤȡ֤Υץץ֤ʤṳ̂ޤˡϡ嵭λͤǤǤˤ狼äȻפޤǰΤ <b>mcpp</b> ȤΥˤȤäޤ</p>
<p><b>mcpp</b> Υˤϣܤ *.c ե뤬ꡢΤΣܤϤɤ "system.H" "internal.H" include Ƥޤơ¾Υإå include ƤޤäΤ˸ȡǤϤʤäƤޤ</p>
<pre>
#if PREPROCESSED
#include "mcpp.H"
#else
#include "system.H"
#include "internal.H"
#endif
</pre>
<p>ơsystem.H noconfig.H ޤ configed.H ȤĤɸإå include Ƥޤmcpp.H ϻ륽ˤϤޤ줬줫 "pre-pre-processed" header ʤΤǤ</p>
<p>mcpp.H ˤϡʤ noconfig.H ꤬Ǥˡ</p>
<pre>
mcpp > mcpp.H
</pre>
<p>Ȥ <b>mcpp</b> ưޤGCC Ǥϡ-b ץդˡ<br>
ơܡɤ</p>
<pre>
#pragma MCPP preprocess
#include "system.H"
#include "internal.H"
#pragma MCPP put_defines
</pre>
<p>Ǥߡend-of-file Ϥ <b>mcpp</b>
λޤ</p>
<p> mcpp.H Ǥޤ system.H,
internal.H ץץΤ #define ԤνդäΤǤ include Сsystem.H, internal.H include ΤȤޤäƱ̤뤳ȤǤޤơɸإåޤีΥإåեפοʬΣΥˤʤäƤޤ#if ȥȤäƤ뤫Ǥܤ *.c ե include Τϡsystem.H, internal.H include Τ٤ơϤ뤫û֤Ǥߤޤ#pragma MCPP preprocess ȤȤǤ˻֤ṳ̂ޤ</p>
<p>֤ΥѥǤ -DPREPROCESSED=1 Ȥץդޤ<br>
μϲΥե˽Ƥơmakefile ǤȤΤɤǤ礦<b>mcpp</b> Υդ makefile preproc.c ˤϡ줬ƤΤǡƤ<br>
Visual C, Borland C, LCC-Win32 Τ褦ʣѥѥǤΩץץåλȤƻ¤ޤξǤ⤳εǽͭѤǤ</p>
<p>Υإåե pre-preprocess εǽϡGCC / cpp -dD ץεǽΤǤäƤޤ</p>
<ol>
<li>GCC Ϲֹ #line 123 "filename" ǤϤʤ # 123 "filename" ηǽϤ롣Τᡢ GCC Ǻƽ뤳ȤϤǤ뤬Standard C ΥץץåǤϤǤʤ<br>
<li>GCC θŤ cpp Ǥ #define ԤϽиȤǽϤ뤬#undef ԤϽϤʤäơƽȸΰտޤȰۤʤ̤ˤʤ뤳Ȥä<br>
<li>GCC ˤϤʤ #pragma MCPP preprocess ȤȤǡ®٤®ʤ롣<br>
</ol>
Pre-preprocess εǽȤƤϡ<b>mcpp</b> Τְۤ㤤ʤŪǤ<br>
<br>
<h2><a name="3.2" href="#toc.3.2">3.2. #pragma once</a></h2>
<p>#pragma once Standard ⡼ɤǻȤޤ<br>
GCC, Visual C, LCC-Win32 Wave ȤñΥץץåǤ #pragma once ϻȤޤ<br>
إåե롼ɤʤ˻Ȥޤإåե</p>
<pre>
#pragma once
</pre>
<p>ȽƤȡΥե롼ɤ #include ԤФƤƤ⡢ǽΣ롼ɤޤ</p>
<p>̾ϡ°ɸإåǤ</p>
<pre>
#ifndef __STDIO_H
#define __STDIO_H
/* stdio.h */
#endif
</pre>
<p>Ǥ¿ɤǤޤ
ȻǽǤޥȤˡǤϥإåեɤޤʤǤޤȤϤǤޤʥåפʬǤ⡢#if, #endif ФƤΤƻ뤹뤿ˡɤޤʤФʤʤƬ # ǥ쥯ƥֹԡ# preprocessing directive ³ԡˤλؼǤ뤫ɤΤ뤿ˤϥȤʤФʤʤΤˤʸƥȽǤʤФʤʤǡɡɤ tokenization ȾޤǤʤФʤʤΤǤˡ<br>
#pragma once ϡեؤΥ⤷ʤǤޤΤǤη̡¿ include ν®٤®ʤޤ</p>
<p>Header name ƱǤ뤫ɤϡѥΥǥ쥯ȥʬޤʸӤȽǤޤWindows Ǥʸʸ϶̤ޤäơ"/DIR1/header.h" "/DIR2/header.h" ̤ΤΤȤư"header.h" "HEADER.H" Ȥ Windows ǤƱΡUNIX ϤǤ̤ΤΤȤưޤǥ쥯ȥХѥѴƵޤ<samp>"foo/../"</samp> ȤäĹʬϺޤUNIX ϤǤ symbolic link ϥѴޤäơƱեǤ뤫ɤϳμ¤Ƚꤵޤ*1, *2, *3</p>
<p> #pragma once GCC V.1.* / cpp #pragma once ΥǥѤΤǤGCC V.2.*, V.3.* Ǥ⤳εǽϻĤäƤޤobsolete ʤΤȤƤޤ#pragma once ʤƤ⡢إåեΤ #ifndef _MACRO, #define _MACRO, #endif ǰϤޤƤСcpp include ʤȤͤѹƤޤ<br>
GCC V.2, V.3 λͤϡGCC λѤȤʤΤνϤʤɤǤϻȤʤȤޤɸإåνäƤ뤫Ǥޤ GCC V.2, V.3 λͤΤۤݤǤǡ<b>mcpp</b> Ǥ #pragma once Ƥޤ</p>
<p>¾ΥץץåǤƱإåեȤϤ櫓ˤϤ椭ޤޥȤˡʻѤơإåեΤ褦ǤǤΤɤǤ礦</p>
<pre>
#ifndef __STDIO_H
#define __STDIO_H
#pragma once
/* stdio.h */
#endif
</pre>
<p><assert.h> ˤ #pragma once ϽƤϤޤʤͳ <a href="cpp-test.html#5.1.2"> cpp-test.html#5.1.2</a> ȡˡC++ <cassert>, <cassert.h> ƱͤǤ</p>
<p>⤦ĤϡGCC / GLIBC κǶΥƥǤ <stddef.h> Τ褦ˡ¾ system header 鷫֤ #include إåե뤬뤳ȤǤ¿ system header <tt>__need_NULL</tt>, <tt>__need_size_t</tt>, <tt>__need_ptrdiff_t</tt>, etc. ΥޥƤ <stddef.h> #include ޤΤӤˡ<stddef.h> Ǥ <tt>NULL</tt>, size_t, ptrdiff_t, etc. Ƥ椭ޤ<errno.h>, <signal.h> ƱͤǤ<stdio.h> Ǥ⡢¾ system header <tt>__need_FILE, __need___FILE</tt> ΥޥƤ #include <stdio.h> ΤӤ FILE Ƥ椯礬ޤΥեˤ #pragma once Ͻ櫓ˤϤޤ*4</p>
<p>:</p>
<p>*1 줿̤ <samp>#pragma MCPP debug path</samp> Ǹ뤳ȤǤ롣<a href="#3.5.1">3.5.1</a> ȡ
<samp>#pragma MCPP put_defines</samp> ǥåΥե̾ɽǤ⡢줬Ȥ롣<br>
#line Ԥ path-list ϰ̤ˤƤ櫓ǤϤʤinclude directory ֤ɽ롣
-K ץǤɽ롣
Υ⡼ɤѤ¾ΥġνѰդˤ뤿Ǥ롣</p>
<p>*2 CygWIN Ǥ /bin /usr/bin/lib /usr/lib Ϥ줾Ʊǥ쥯ȥǡ/ Windows 㤨 C:/dir/cygwin Ȥ /cygdrive/c/dir/cygwin ⤽Ʊǥ쥯ȥǤ뤬<b>mcpp</b> ǤϤϤ٤Ʊǥ쥯ȥȤưpath-list Ϥ٤ /cygdrive/c/dir/cygwin/dir-list/file ηѴ롣</p>
<p>*3 MinGW Ǥ / /usr ȤϼºݤˤƱǥ쥯ȥǡ/ Windows C:/dir/msys/1.0 Ȥ /c/dir/msys/1.0 ⤽Ʊǥ쥯ȥǡ/mingw C:/dir/mingw Ȥ /c/dir/mingw ⤽Ʊǥ쥯ȥǤ롣<b>mcpp</b> ǤϤϤ줾Ʊǥ쥯ȥȤưpath-list Ϥ٤ c:/dir/msys/1.0/dir-list/file, c:/dir/mingw/dir-list/file ηѴ롣</p>
<p>*4 ʤȤ Linux / GCC 2.9x, 3.*, 4.* / glibc 2.1, 2.2, 2.3 ǤϤʤäƤ롣FreeBSD 4, 5, 6 Ǥ glibc ϻȤƤʤΤǡʣʥƥإåˤϤʤäƤʤ</p>
<h3><a name="3.2.1" href="#toc.3.2.1">3.2.1. إåե #pragma once ġ</a></h3>
<p>Τϥإåեοʤ礷ȤǤϤޤ¿ȼǤϤäȤȤˤʤޤǡưŪ˽ñʥġѰդޤ</p>
<p>tool/ins_once.c ϸŤ GCC ΥƥѤǤBorland C 4.0, 5.5 ǤɸإåνƱ롼˽äƤΤǡȤȤǤޤGlibc 2 Τ褦ʥƥǤϾ嵭Τ褦㳰¿ΤǡȤʤ̵ۤǤ<br>
줬Ȥ륷ƥǤ⡢إåեˤ GCC δ˽äƤʤΤޤإåǤ GCC Ρɤ߹ޤʤȤǽưޤ<br>
ǡins_once.c ѥ뤷ơUNIX ʤ /usr/include, /usr/local/include Υǥ쥯ȥǡޤ</p>
<pre>
chmod -R u+w *
</pre>
<p>Ȥǡ</p>
<pre>
ins_once -t *.h */*.h */*/*.h
</pre>
<p>Ȥޤȡ#ifndef ޤ #if !defined
ǻϤޤʤإåե뤬𤵤ޤΥإåǽƤ줫顢</p>
<pre>
ins_once *.h */*.h */*/*.h
</pre>
<p>Ȥȡƥإåեκǽ˽и #directive #ifndef ޤ #if !defined Ǥäϡľ #pragma once Ԥޤޤʤ줬ǤΤ root Υ桼ΤϤɬפʤ chmod -R u-w * Ȥơaccess permission ᤷƤˡ</p>
<p>ins_once ˤϼΤ褦ʥץޤƥ˹碌ŬʥץƤ</p>
<ul>
<li>-t: ե뤬ʥȤȡ#ifndef #if !defined ǻϤޤäƤ뤫ɤƥȤ롣եϽʤ<br>
<li>-p: եƬ #pragma once ԤʥǥեȤǤ #ifndef / #if !defined Ԥμ˽ˡ<br>
<li>-g: GCC Τˡ<stddef.h>, <stdio.h>, <signal.h>, <errno.h> ʤʥǥեȤǤϽʤΤ <assert.h>, <cassert>, <cassert.h> ˡ<br>
</ul>
<p>ins_once ʣ¹ԤƤƱե˥֤äƽळȤϤʤ褦ˡñʥåϤƤޤ̩ʤΤǤϤޤ</p>
<p> ins_once ϴ֤˹碌ʤΤǡtokenization ϤۤȤɤäƤޤFreeBSD 2.0, 2.2.7, Borland C 4.0, 5.5 γƥإåեǤϴ̤ưޤüʥإåե뤬ȸư뤫⤷ޤins_once ɬХååפȤäƤ¹ԤƤ<br>
磻ɥɤ shell ŸƤʥХåեСեϡʬƼ¹Ԥˡ</p>
<br>
<h2><a name="3.3" href="#toc.3.3">3.3. #pragma MCPP warning, #include_next, #warning</a></h2>
<p>Υǥ쥯ƥ֤ GCC ȤθߴΤѰդƤΤǤGCC ˤ #include_next, #warning ȤʰȿΥǥ쥯ƥ֤ޤʰȿǤȤäƤ륽ˤޤGlibc 2 ΥƥǤϡƥإåեˤȤäƤΤޤ <b>mcpp</b> ǤϡΥѥǤ褦ˤ뤿ᡢGCC Ѥ˸¤ä #include_next, #warning ƤޤStandard ⡼ɤǤϥ˥оݤȤʤޤStandard ⡼ɤǤ #pragma MCPP warning Ƥޤ GCC Ѥ˸¤ޤ</p>
<pre>
#include_next <header.h>
</pre>
<p> include directory ݤˡ include ΥեΤǥ쥯ȥåפơμΥΥǥ쥯ȥ꤫饵Ϥޤ</p>
<p>CygWIN, MinGW Ǥϡإå̾ʸʸζ̵̤뤷ޤ</p>
<pre>
#pragma MCPP warning any message
#warning any message
</pre>
<p>Ǥϡany message Τޤ warning Ȥɸ२顼Ϥ˽Ϥޤ #error Ȱäƥ顼ˤϤʤޤ</p>
<br>
<h2><a name="3.4" href="#toc.3.4">3.4. #pragma MCPP push_macro, #pragma __setlocale </a></h2>
<p> Visual C <b>mcpp</b> ܿ˼ĤǤ¾νϤǤȤ褦ˤΤǤ</p>
<p>#pragma MCPP push_macro( "MACRO"), #pragma MCPP pop_macro( "MACRO") ϡλǤ MACRO Υޥå "push" "pop" ꤹΤǤ<br>
Visual C Ǥ #pragma push_macro( "MACRO"), #pragma pop_macro( "MACRO") Ȥޤ<br>
push_macro ǤϤΥޥ졢pop_macro Ǹᤵޤpush Ƥ⤽ΥޥϤޤͭǤ̵ˤ뤿ˤ #undef 뤫ޤ̤Ǻɬפޤpush_macro ǤƱ̾ΥޥŤˤ push 뤳ȤǤޤ</p>
<p>#pragma __setlocale( "<encoding>")
multi-byte character encoding <encoding> ѹޤ__setlocale ΰʸƥǤʤФʤޤ<encoding> ˤĤƤ <a href=#2.8>2.8</a> ƤȤȡĤ translation unit Ǥʣ encoding ȤȤǤޤ<br>
Visual C++ Ǥ #pragma setlocale Ǥꡢ#pragma __setlocale ϻȤޤEncoding λ <b>mcpp</b> Ǥʤѥˤɬפޤѥ餬ǧǤΤ #pragma setlocale Ǥ</p>
<p>#pragma __setlocale ǧǤ륳ѥΤϤޤΤȤޤ</p>
<br>
<h2><a name="3.5" href="#toc.3.5">3.5. #pragma MCPP debug, #pragma MCPP end_debug, #debug, #end_debug</a></h2>
<p>#pragma MCPP debug, #pragma MCPP end_debug Standard ⡼ɤΤΤǤpre-Standard ⡼ɤǤ #debug, #end_debug Ȥʤޤ</p>
<p>#pragma MCPP debug <args> ǥ쥯ƥ֤ϥǤդιԤ˽ȤǤޤ<args> ǥǥХåμꤷޤĤ #pragma MCPP debug ǥ쥯ƥ֤ʣ <arg> ꤹ뤳ȤǤޤɬİʾ <arg> ꤬ɬפǤΥǥ쥯ƥ֤ȡǥХåνϤϤޤޤơ#pragma MCPP end_debug <args> ǡ<args> ΥǥХåϤޤ#pragma MCPP end_debug Ǥϡ<args> ά뤳ȤǤޤξϡꤵƤ٤ƤΥǥХåϤޤ<b>mcpp</b> ǥݡȤʤ <args> ˤäϡ˥ФޤˤäͭǤ<br>
ǥХåϤ٤ơץץνϤƱѥ˽ϤޤνϤƱ뤿ǤäơΥǥ쥯ƥ֤̾ϥѥǤޤ
#pragma MCPP debug macro_call ǤϾϥȤǽϤΤǡƥץץƥѥ뤹뤳ȤǤޤ</p>
<p>ץץη̤˵䤬硢ʬ</p>
<pre>
#pragma MCPP debug token expand
/* ǥХåʬ */
#pragma MCPP end_debug
</pre>
<p>ȤդˤϤǻȤޤ
</p>
<p> <b>mcpp</b> ȤΥǥХåѤΤΤǤ
ץץβȥ졼˻ȤޤŪŪʤΤǡʤǤʤȤ⤢ꡢ뤵⤢ޤޤƤ</p>
<p><arg> μϼ̤Ǥ</p>
<blockquote>
<table>
<tr><th>path </th><td>include եΥѥɽ</td></tr>
<tr><th>token </th><td>token Ĥڤʬơμɽ</td></tr>
<tr><th>expand </th><td>ޥƤӽФŸȥ졼</td></tr>
<tr><th>macro_call</th><td>ޥӥޥƤӽФ˺ݤơΥιԤȥ֤ȤǽϤ</td></tr>
<tr><th>if </th><td>#if (#elif, #ifdef, #ifndef) οɽ</td></tr>
<tr><th>expression</th><td>#if ɾȥ졼</td></tr>
<tr><th>getc </th><td>ץץ 1 byte ĥȥ졼</td></tr>
<tr><th>memory </th><td><b>mcpp</b> λȤäƤҡץξɽ</td></tr>
</table>
</blockquote>
<br>
<h3><a name="3.5.1" href="#toc.3.5.1">3.5.1. #pragma MCPP debug path, #debug path</a></h3>
<p>Υǥ쥯ƥ֤˽в <b>mcpp</b> ϡޤꤵƤ include ǥ쥯ȥΥѥ̤ͥι⤤Τɽޤʤǽ˥륫ȥǥ쥯ȥꤪӥΥǥ쥯ȥϾάˡ</p>
<p>ˡ#include ԤȡΥإåե include 뤿 <b>mcpp</b> ºݤ˥ǥ쥯ȥ꤬ʥȥǥ쥯ȥޤơˤ٤ɽޤ<br>
#pragma once Τإåե #include ϡλݤɽޤ<br>
ޤ<b>mcpp</b> path-list <samp>"foo/../"</samp> ȤäĹʬޤη̡ path-list Ȱä path-list Ȥʤäϡλݤɽޤ<br>
UNIX ϤΥƥǤ <b>mcpp</b> symbolic link link Ѵޤξ⤽λݤɽޤ</p>
<h3><a name="3.5.2" href="#toc.3.5.2">3.5.2. #pragma MCPP debug token, #debug token</a></h3>
<p>ޤɤ߹Ԥɽǡ<b>mcpp</b> token ɤिӤˡ token ȼɽޤToken ȤΤ˸ preprocessing-token (pp-token) ΤȤǤɤФǤϤʤ<b>mcpp</b> ޥŸʤɤŪɤ֤ pp-token ⡢ΤĤɡʷ֤ơɽޤ</p>
<p>1 byte pp-token ΤΤΤɽޤϥץΤĤˤΤǤ</p>
<ol>
<li>ץץǥ쥯ƥֹԤγϤ '#'<br>
<li>function-like
ޥΥѥꥹȳϤ '('<br>
<li>function-like
ޥΥѥڤ ','<br>
<li>function-like
ޥƤӽФΰꥹȳϤ '('<br>
</ol>
<p>Pp-token μϼ̤Ǥ
</p>
<blockquote>
<table>
<tr><th>(NAM) </th><td>identifier</td></tr>
<tr><th>(NUM) </th><td>preprocessing-number</td></tr>
<tr><th>(OPE) </th><td>operator or punctuator</td></tr>
<tr><th>(STR) </th><td>string literal</td></tr>
<tr><th>(WSTR)</th><td>wide string literal</td></tr>
<tr><th>(CHR) </th><td>character constant</td></tr>
<tr><th>(WCHR)</th><td>wide character constant</td></tr>
<tr><th>(SPE) </th><td>$, @ ü pp-token</td></tr>
<tr><th>(SEP) </th><td>token separator (white space)</td></tr>
</table>
</blockquote>
<p>Τ (SEP) ϲԥɰʳ̾ɽޤ
ԥΥȥ륳ɤ <^J>, <^M> ɽޤ</p>
<h3><a name="3.5.3" href="#toc.3.5.3">3.5.3. #pragma MCPP debug expand, #debug expand</a></h3>
<p>ޥƤӽФŸȥ졼ޤ</p>
<p>Standard ⡼ɤ
#pragma MCPP debug Ǥϼ̤Ǥ<br>
ޥƤӽФȡ
ޤΥޥɽޤˡɤ߹ޤ졢ִꥹΥѥ֤졢褦ɽޤޥͥȤƤС줬缡ŸƤޤ˥ޥСβƵŪˡʥѥȤִˡ˥ȥ졼ޤ</p>
<p>ɽ <b>mcpp</b> ȤΤĤδؿؤνΤӤˡδؿ̾ȤȤ˹ԤޤδؿϼΤ褦롼ǤStandard ⡼ɤΥȤȡˤ褯Ǥޤ</p>
<blockquote>
<table>
<tr><th>expand_macro</th><td>ޥŸ롼</td></tr>
<tr><th>replace </th><td>ޥ٥Ÿ</td></tr>
<tr><th>collect_args</th><td></td></tr>
<tr><th>prescan </th><td>ִꥹȤ #, ## 黻Ҥν</td></tr>
<tr><th>substitute </th><td>ѥִ</td></tr>
<tr><th>rescan </th><td>ִꥹȤ</td></tr>
</table>
</blockquote>
<p>Τexpand_macro ʳϸߤ˴ܺƵδطˤޤ</p>
<p>replace,
collect_args Ǥϡ<b>mcpp</b> Ū˥åѤǤŸΥǡɽޤΥǡǤϡ<b>mcpp</b> ŪʥɤΤ褦ʵɽޤ</p>
<blockquote>
<table>
<tr><th><n> </th><td>n ܤΥѥ</td></tr>
<tr><th><TSEP> </th><td>pp-token ڤ뤿 <b>mcpp</b> token separator</td></tr>
<tr><th><MAGIC> </th><td>Ʊ̾ޥκִػߤ륳</td></tr>
<tr><th><RT_END></th><td>ִꥹȤν</td></tr>
<tr><th><SRC> </th><td>Identifier ե뤫ޤ줿Ȥ</td></tr>
</table>
</blockquote>
<p>Τ <SRC> <i>STD</i> ⡼ɤǤȤ졢<i>POSTSTD</i> ⡼ɤǤ <i>COMPAT</i> ⡼ɤǤȤޤ</p>
<p>#pragma MCPP debug token ꤷۤ狼䤹Ǥ礦</p>
<p>#pragma MCPP debug macro_call ޤ -K ץꤷϡmacro notification Ȥ˽ޤƽϤޤreplace() ʲΥ롼ǤϤޤȤϽޤ줺फ magic characterŪʥɡˤޤ줿줿ꤷޤ
ϼΤ褦ɽޤ</p>
<blockquote>
<table>
<tr><th><MACm> </th><td>ĤΥޥƤӽФ˴ޤޤ m ܤΥޥθƤӽФ</td></tr>
<tr><th><MAC_END> </th><td>ľ MACm ǻϤޤޥƤӽФν</td></tr>
<tr><th><MACm:ARGn></th><td>m ܤΥޥθƤӽФ n ܤΰ</td></tr>
<tr><th><ARG_END> </th><td>ľ MACm:ARGn ǻϤޤν</td></tr>
</table>
</blockquote>
<p> -v ץꤷϡMAC_END, ARG_END ˤĤƤⳫϥޡƱֹ椬 symmetrical ɽޤ</p>
<p>pre-Standard ⡼ɤ #debug expand Ǥ Standard ⡼ɤȤ롼˰äƤޤάޤ</p>
<h3><a name="3.5.4" href="#toc.3.5.4">3.5.4. #pragma MCPP debug if, #debug if</a></h3>
<p>#if, #elif, #ifdef, #ifndef ιԤɽɾǤ뤫Ǥ뤫𤷤ޤåפ #if section Ǥϡ𤵤ޤ</p>
<h3><a name="3.5.5" href="#toc.3.5.5">3.5.5. #pragma MCPP debug expression, #debug expression</a></h3>
<p>#if, #elif Ԥμɾܺ٤˥ȥ졼ޤ</p>
<p> DECUS
cpp ȤΥǥХåѤ˥ꥸʥǰ褢ΤǡϤۤȤɼäƤޤŪʴؿ̾Ф꤫ѿ̾Ȥͤޤǥ饺ȽФƤޤ<b>mcpp</b> ΥɤʤǤʤȡѿǤޤ<br>
ʣʼͤɾѤΥåѤ߹ߤƤ褦ϡʤƤⲿȤǤǤ礦</p>
<h3><a name="3.5.6" href="#toc.3.5.6">3.5.6. #pragma MCPP debug getc, #debug getc</a></h3>
<p><b>mcpp</b> get_ch() ȤХɤ߹ߴؿƤӽФ뤿Ӥˡܺ٤ʥǡϤޤStandard ⡼ɤǤ pp-token ϡΣХܤΥ롼ϸƤӽФޤ</p>
<p>#debug getc Ǥ token ⤳Υ롼ƤӽФΤǡȤǤʤ̤ΥǡǤФޤ<p>
<p>ˤƤ⡢ʥǡϤޤȤɬפϤޤޤ</p>
<h3><a name="3.5.7" href="#toc.3.5.7">3.5.7. #pragma MCPP debug memory, #debug memory</a></h3>
<p>Υǥ쥯ƥ֤ȡλ <b>mcpp</b> Ū˻ȤäƤ malloc(), realloc(), free() ˤҡץξ𤷤ޤϻκä kmmalloc ¾βफ malloc() ȤäƤεǽǤ<a href="mcpp-porting.html#4.extra"> mcpp-porting.html#4.extra</a> ȡˡ¾ malloc() ξϥ顼ˤϤޤ𤷤ޤ<br>
Υǥ쥯ƥ֤ʤޤ <b>mcpp</b> λȡλ˺٥ҡץξ𤵤ޤ<b>mcpp</b> out of memory ǽλƱͤǤ</p>
<h3><a name="3.5.8" href="#toc.3.5.8">3.5.8. #pragma MCPP debug macro_call</a></h3>
<p>Macro notification mode Ϥޤ
Υ⡼ɤǤϡޥ뤿ӤˡޤޥŸ뤿ӤˡΥιԤȥ֤ȤޤƽϤޤ
ޥľϡưˤĤƤ⤽ΰ֤𤵤ޤ
ޥŸˤäƥȡϢ뤵줿ϡϢΥȡ˴ؤޥϼޤ<br>
ˡ#undef, #if (#elif, #ifdef, #ifndef), #endif ˤĤƤ⡢ñʾϤޤ<br>
Υ⡼ɤ -K ץǻꤹ뤳ȤǤޤ</p>
<p>Υ⡼ɤ C/C++ refactoring tool Τ˼줿ΤǤ
C/C++ ˤϥץץȤեΤ뤳Ȥ refactoring tool ˤȤäƺޤΥ⡼ɤȤХץץνϤ饽ƹ뤳ȤǤΤǡtool 䤹ʤޤ*1</p>
<p>#pragma MCPP debug expand ȻƤޤexpand ΤۤϥޥŸȥ졼뤿ΤΤǡܺ٤ʾϤΤΡѥ뤹뤳ȤϤǤޤ
Фơmacro_call ϥΤʰ֤뤿ΤΤǡȤΤǡϤΤޤƥץץƥѥ뤹뤳ȤǤΤħǤ</p>
<p>:</p>
<p>*1 λͤϼȤ Taras Glek ƤˤΤǤ롣
༫ȤϼΤȤ mozilla Υ refactoring ˼ȤǤ롣</p>
<p><a href="http://blog.mozilla.com/tglek/"> http://blog.mozilla.com/tglek/</a></p>
<h4><a name="3.5.8.1">3.5.8.1. #define ˴ؤ륳</a></h4>
<p>㤨СƬ˼Τ褦ʥޥȡ</p>
<pre>
#define NULL 0L
#define BAR(x, y) x ## y
#define BAZ(a, b) a + b
</pre>
<p>Τ褦ʥȤϤޤ</p>
<pre>
/*mNULL 1:9-1:16*/
/*mBAR 2:9-2:25*/
/*mBAZ 3:9-3:24*/
</pre>
<p>ΥեޥåȤ</p>
<samp>/*m[NAME] [start line]:[start column]-[end line]:[end column]*/</samp>
<p>̣ޤ
ԤȥϤȤ 1 Ϥޤޤ
-K ץꤷϻޥϤޤޥˤϰ־Ϥޤ</p>
<h4><a name="3.5.8.2">3.5.8.2. #undef ˴ؤ륳</a></h4>
<pre>
#undef BAZ
</pre>
<p>ȤԤǤϡΤ褦ʥȤϤޤ</p>
<pre>
/*undef 10*//*BAZ*/
</pre>
<p>/*undef [lnum]*//*[NAME]*/ ȤեޥåȤǡ[lnum] ϤιԤιֹ[NAME] ϤΥޥ̾ޤ</p>
<h4><a name="3.5.8.3">3.5.8.3. ޥŸ˴ؤ륳</a></h4>
<p>ޥƤӽФ뤿ӤˡǤγϤȽλޡϤޤ
ΥޡΥեޥåȤ HTML ˻ͥȲǽʤΤǡ<samp>/*<...*/</samp> ޥŸγϤ<samp>/*>*/</samp> νλޤ
ޥϤΥեޥåȤϥޥΥեޥåȤ <samp>/*m</samp> <samp>/*<</samp> ѤηȤޤ</p>
<samp>/*<[NAME] [start line]:[start column]-[end line]:[end column]*/</samp>
<p>ޥȤϡΰΰ֤ޡȡŸγϤȽλޡϤޤ
ΰ֤եޥåȤ <samp>/*!...*/</samp> ȤƤޤ
˥ޥϡƵŪˤΥޥξϤޤ
ΥޥˤäΤǤʤС־ϽϤޤ
ɤΥޥβܤΰǤ뤫ˡ id ηǼޤ</p>
<samp>[func-like-macro-name]:[nesting level]-[argument number]</samp>
<p>ˤä <samp>BAZ(BAZ(a,b), c)</samp> ȤäͥȤ줿Ʊ̾ΥޥȤΰߤ˶̤뤳ȤǤޤ
ֹ 0 Ϥޤޤ
ơ˼ηΰ־³ޤ</p>
<samp>[start line]:[start column]-[end line]:[end column]</samp>
<p>ޤŸγϤޡϼηǤ</p>
<samp>/*<[func-like-macro-name]:[nesting level]-[argument number]*/</samp>
<p>ŸνλޡϥޥŸνΥޡƱ <samp>/*>*/</mamp> Ǥ</p>
<p>ʤΥ</p>
<pre>
foo(NULL);
foo(BAR(some_, var));
foo = BAZ(NULL, 2);
bar = BAZ(BAZ(a,b), c);
</pre>
<p>Τ褦ʷ̤Ϥޤ</p>
<pre>
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/*>*//*>*/;
</pre>
<p> -v ץꤵƤϡޥŸνΥޡǤŸνλޡǤ⡢ϥޡˤΤƱޥ̾Ȱ id Ϥޤ
ʤΤ褦ˤʤޤ</p>
<pre>
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>*/;
</pre>
<p>Ǥ狼褦ˡޥŸλΥޡŸλΥޡ⡢줾줽ˤǸƱͥȥ٥γϥޡбƤޤ
äơ-v ץꤷʤƤ⡢ưŪбطȽǤ뤳ȤǤޤ</p>
<h4><a name="3.5.8.4">3.5.8.4. #if (#elif, #ifdef, #ifndef) ˴ؤ륳</a></h4>
<p>#if (#elif, #ifdef, #ifndef) Ԥ˴ؤƤϡιԤˤޥξϤޤ
㤨СΥ bar.h Ȥ</p>
<pre>
#define NULL 0L
#define BAR(x, y) x ## y
#define BAZ(a, b) a + b
</pre>
<p> foo.c Ȥȡ</p>
<pre>
#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
</pre>
<p>foo.c ϼΤ褦ʷ̤Ϥޤ</p>
<pre>
#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*/
</pre>
<p>ʤޤ /*if [lnum]*/ ȤեޥåȤǡǥ쥯ƥ̾³Ƹߤιֹ椬ɽޤ
ơιԤ˥ޥС줬Ĥ /*[NAME]*/ ȤեޥåȤɽޤ
Ǹˡ/*i T*/ ޤ /*i F*/ ǡιԤɾ true Ǥ뤫 false Ǥ뤫ʤ #if ǻϤޤ֥åѥ뤵֥ååפ֥åޤ
ϤʸȰäơޥŸ̤ɽޤ
<samp>#if 1</samp> Τ褦˥ޥΤʤԤˤĤƤϡޥɽ /*[NAME]*/ ʤǤ</p>
<p><samp>#elif, #ifdef, #ifndef</samp> ˤĤƤƱͤ /*elif [lnum]*/, /*ifdef [lnum]*/, /*ifndef [lnum]*/ ǻϤޤꡢޥƤ /*[NAME]*/ ³/*i T*/ ޤ /*i F*/ ǽޤ</p>
<p>åפ֥åΥǥ쥯ƥ֤ˤĤƤϲɽޤ</p>
<h4><a name="3.5.8.5">3.5.8.5. #else, #endif ˴ؤ륳</a></h4>
<p>#else ԤǤϾΤ褦ˡ/*else [lnum]:[C]*/ ȤեޥåȤǾɽޤ
[lnum] Ϲֹ桢[C] T ޤ F ǡ #else - #endif ֥åѥ뤵֥åȤ⥹åפ֥åޤ</p>
<p>#endif ԤǤϾΤ褦ˡ/*endif [lnum]*/ ȤեޥåȤǡߤιֹ椬ɽޤ
Ϥޤ #endif бŤƤʤǸ #if (#ifdef, #ifndef) бޤ</p>
<p></p>
<h4><a name="3.5.8.6">3.5.8.6. #line ν</a></h4>
<p>ʤmacro notification mode Ǥ #line ԤΥե̾νϤǥեȤξȰ㤤#include Ԥλ full-path-list ΤϤޤ<a href="#3.2">3.2</a> ȡˡ
Refactoring tool κưפˤ뤿Ǥ</p>
<br>
<h2><a name="3.6" href="#toc.3.6">3.6. #assert, #asm, #endasm</a></h2>
<p>#assert pre-Standard ⡼ɤǤȤޤGCC ǤǤϼޤStandard C #error б뵡ǽǤStandard C </p>
<pre>
#if ULONG_MAX / 2 < LONG_MAX
#error Bad unsigned long handling.
#endif
</pre>
<p>ȤȤ</p>
<pre>
#assert LONG_MAX <= ULONG_MAX / 2
</pre>
<p>Ƚޤ #if Ȥɾ
non-zeroˤǤв⤻0ˤǤ</p>
<pre>
Preprocessing assertion failed
</pre>
<p>Ȥդ³Ƥιԡʹ³ȥȽιԡˤɽޤ
ϥ顼ȤƥȤޤߤޤ</p>
<p>
#assert System V GCC #assert Ȥϡޤä̤ΤΤǤ</p>
<p>#asm, #endasm ΣĤΥǥ쥯ƥֹԤǤϤޤ줿֥åϥ֥饽Ȥưޤpre-Standard ⡼ɤǤȤޤ Microware C / 6809 Ѥ˽줿ΤʤΤǡ¾νϤˤܿˤϡsystem.c do_old(), do_asm(), put_asm() ˽ɬפޤ<br>
#asm ֥åˤĤƤϡtrigraphs Ѵ <backslash><newline> κϤޤȤν token åʸåϤƬ space ޤޥޥƱ̾äƤޥŸιԤΤޤϤޤ¾Υǥ쥯ƥֹԤ #asm ֥åǤϰ̣ޤ</p>
<p> #asm, #endasm Standard C ǤǧʤΤǤޤ#pragma sub-directive ʳγĥǥ쥯ƥ֤ʳǤФ꤫#pragma asm, #pragma endasm ̾ѤƤ褷ޤȸΤϡStandard C ǤϥϤ٤ƣä token sequence ΩäƤɬפޤʸ̩˸ preprocessing token sequenceˡ֥ץϣä token sequence ǤϤʤǤStandard C ǥ֥ꥳɤȤˤϡʸƥȤ token ˡޤơȤ߹ߴؿѥΤ˼ơ</p>
<pre>
asm(
" leax _iob+13,y\n"
" pshs x\n"
);
</pre>
<p>ȤäǸƤӽФΤǤ</p>
<p>ĹɤȤʤȤϤäƤʤΤǡ
ξϤʬ̤δؿˤơ饤֥ؿΤ褦ˡ̤Υեǥ֥ץऽΤΤơ֥ѥǽƻȤȤˤʤޤϵ¤Τ褦˻פ뤫⤷ޤportable ʣåץˤϥ֥ʬϴʬΥɬפޤ顢ष #asm Ȥ鷺̥եǽ褦ˤۤɤǤ礦</p>
<br>
<h2><a name="3.7" href="#toc.3.7">3.7. C99 οǽ_Pragma() 黻ҡѰޥ</a></h2>
<p> Standard ⡼ɤǤȤޤ<br>
-V199901L ץ
<tt>__STDC_VERSION__</tt> 199901L ʾˤȡC99 μεǽͭˤʤޤ<br>
C++ Ǥ -V199901L ץ <tt>__cplusplus</tt> 199901L ʾˤƱͤǤ1, 7 ʳλͤ C++ Standard ˤϤޤStandard ⡼ɤǤ C99 Ȥθߴ뤿ˡΥץѰդƤޤ<br>
Ѱޥ Standard ⡼ɤǤ C90 C++ ǤȤ褦ˤƤޤ*1</p>
<ol>
<li>// ޤǤȤȤư<br>
<li>ѰޥȤ롣
<br>
<li>Preprocessing-number e+, E+, e-, E- Ʊͤ p+, P+,
p-, P- Ȥ sequence ǧ롣ưΥӥåȥѥ 0x1.FFFFFEp+128 Ȥդˡʤɽ뤿ΤΤǤ롣<br>
<li>_Pragma() operator ͭˤʤ롣<br>
<li><i>EXPAND_PRAGMA</i> Ȥޥ <i>TRUE</i> ƥѥ뤵줿 <b>mcpp</b> Ǥϡ#pragma ԤΰϡSTDC, MCPP, GCC Τɤ줫ǻϤޤΤǤʤ¤ޥŸоݤȤʤʥǥեȤǤ <i>EXPAND_PRAGMA</i> == <i>FALSE</i> ǤꡢޥŸʤŸΤ Visual C ǤǤˡ<br>
<li>#if long long ΤϤǤ long long / unsigned long long ɾ롣<br>
<li>̻ҡʸʸƥ롦pp-number ˤ \unnnn, \Unnnnnnnn η UCN Ȥ escape sequence ̤ Unicode ʸ̣ͤ롣#if Ǥ UCN ͤϣɽȤɾ롣ʤ<i>POSTSTD</i> ⡼ɤǤ UCN ϻȤʤˡ<br>
</ol>
<p>ѰޥȤΤϡΤ褦ʤΤǤ</p>
<pre>
#define debug(...) fprintf(stderr, __VA_ARGS__)
</pre>
<p>Ȥޥȡ
</p>
<pre>
debug( "X = %d\n", x);
</pre>
<p>ȤޥƤӽФϼΤ褦Ÿޤ
</p>
<pre>
fprintf(stderr, "X = %d\n", x);
</pre>
<p>ʤѥꥹ <samp>...</samp> İʾΥѥ̣
ִꥹ <samp>__VA_ARGS__</samp> бޤơޥƤӽФˤ <samp>...</samp> бʣäƤ⡢ , ޤϢ뤷ΤĤΰΤ褦˰ޤ</p>
<p>_Pragma 黻Ҥ _Pragma( "foo bar") Ƚ #pragma foo bar ȽΤƱ̤ı黻ҤǤʸƥޤϥ磻ʸƥ룱ĤǤʤФʤޤ磻ʸǤƬ L ʸƥϤ " ʸƥ \", \\ 줾 ", \ ֤Τ #pragma ΰȤưޤ<br>
#pragma ϥԣԤνᤫ齪ޤǤ˽ʤФʤ餺ʾʤȤ C90 Ǥϡ˥ޥŸʤΤФơ_Pragma() 黻ҤϥΤɤ˽ƤΩԤ #pragma ΤƱ̤ޥִꥹ˽ȤǤޥŸη̤Ȥ줿 _Pragma() operator ͭǤνѤ뤳Ȥǡ portability ä pragma directive ȤǤϤˤ #pragma ΰ㤤ĤΥإåեǵۼ뤳ȤǤޤʥץȤƤ "Validation Suite" pragmas.h, pragmas.t ȤΤȡˡ*2</p>
<p>ʤC99 Ǥ #if ηϤνϤκȤʤäƤޤlong long / unsigned long long ɬܤȤƤΤǡ#if η long long / unsigned long long ޤϤʾȤȤˤʤޤC90, C++98 Ǥ #if long / unsigned long ɾ뤳ȤˤʤäƤޤ<b>mcpp</b> C90, C++98 Ǥ long long / unsigned long long ɾlong / unsigned long ϰϤĶͤФƤϥ˥Фޤ*1</p>
<p>:</p>
<p>*1 GCC, Visual C 2005, 2008 ȤθߴΤǤ롣¾νϤǤ⡢
C99 λͤ˼ΤΤǡ<tt>__STDC_VERSION__</tt> 199409L ȤޤޤλͤƤ椯Ȥͽۤ롣</p>
<p>*2 C99 Ǥ #pragma ΰ STDC ǻϤޤϥޥŸʤǤʤ implementation-defined Ǥ롣</p>
<br>
<h2><a name="3.8" href="#toc.3.8">3.8. ϤȤüʻ</a></h2>
<b>mcpp</b> compiler-specific-build ˤϤ줾νϤ˸ͭλͤĤƤޤΤ¹ԻץǤ #pragma ǤʤüʤΤޤ
<h3><a name="3.8.1" href="#toc.3.8.1">3.8.1. GCC, Visual C βѰޥ</a></h3>
<p>GCC V.2 Τ <a href="#3.9.1.6">3.9.1.6</a> ˤ褦ȼλͤβѰޥäƤޤ
Υޥ˥奢Ǥ GCC2 ͤβѰޥȸƤӤޤ
ޤ GCC V.3 Ǥ <a href="#3.9.6.3">3.9.6.3</a> Τ褦ʿͤޤ
Ǥ GCC3 ͤβѰޥȸƤӤޤ
GCC 2.95 Ǥ C99 ͤβѰޥޤglibc Linux ΥƥإåǤ C99 ͤΤΤϤ GCC3 ͤΤΤȤ줺ޤ GCC2 ͤȤƤޤ</p>
<p>GCC-specific-build <b>mcpp</b> V.2.6.3 <i>STD</i> ⡼ɤ˸¤ä GCC3 ͤβѰޥV.2.7 GCC2 ͤΤΤޤ
Linux ǻȤݤԼͳ뤿˼ΤǤ
˥Фޤ
GCC ͤ portability ʤǤʤʸˡŪ˱ΤǡǤϻȤ٤ǤϤޤ
Ȥ GCC2 ͤǤ</p>
<p>Visual C 2003 ޤǤϲѰޥϼƤޤǤ2005 Ǽޤ
C99 λͤ GCC3 ͤȻäΤǡѰǡƤϡľΥȡޤǤФޤ
GCC Ȱä '##' ȤϻȤޤ
λͤ Visual C ΥɥȤˤȡΤ褦ʷ̤ˤʤޤ
ΣܤǤϥޤϺʤȤƤޤ
Visual C 2005, 2008 ϼºݤˤϤΥޤƤޤޤ</p>
<pre>
#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 */
</pre>
<p><b>mcpp</b> V.2.7 Visual C-specific-build <i>STD</i> ⡼ɤˤλͤޤ
˥Фޤ
嵭ΣܤǤϥޤϺ̤˼Ƥޤ</p>
<h3><a name="3.8.2" href="#toc.3.8.2">3.8.2. GCC 'defined' ν</a></h3>
<p>ޥ 'defined' ȤȡФƤ륱ǤϡGCC ϤΥޥ #if Ԥˤϡ¾ξȰۤʤäŪʽޤ
ˤĤƤ <a href="#3.9.4.6">3.9.4.6</a> ǸƤƤΤǡȤƤ</p>
<p><b>mcpp</b> GCC-specific-build <i>STD</i> ⡼ɤǤ V.2.7 GCC Ʊ褦ˤޤ
Linux ΰΥƥإåʤɤǤμδְäޥȤƤΤн褹뤿Ǥ
˥Фޤ
ʬνץǤ #if 褦ˤƤ</p>
<h3><a name="3.8.3" href="#toc.3.8.3">3.8.3. Borland C asm ʸ¾üʹʸ</a></h3>
<p>Borland C ˤ asm Ȥɤäơ</p>
<pre>
asm {
mov x,4;
...;
}
</pre>
<p>Ȥäǥ֥ꥳɤҤ褦ˤʤäƤޤϣøʸˡϤ줿ˤ§ŪʤΤǤˤޤޥޥƱ̾ȡϥޥŸƤޤޤBorland C ΤΤǤ <b>mcpp</b> Ǥ⡢ƱǤ֥ץ̤ .asm եǽΤǤ礦
<b>mcpp</b> ϤˤĤƤ̤ʰϲ⤷ޤ</p>
<p>Visual C++ ˤ __asm ȤƱͤΥɤޤ<br>
GCC ˤ asm( " mov x,4\n") ȤޤäȤʷȤ߹ߴؿѰդƤޤ</p>
<h3><a name="3.8.4" href="#toc.3.8.4">3.8.4. #import ¾</a></h3>
<h4>3.8.4.1. Mac OS X / GCC #import</h4>
<p>GCC ˤ Objective-C #import Ȥǥ쥯ƥ֤ꡢC/C++ Ǥ⤳ #pragma once ۤ #include ȤƻȤޤ
Mac OS X C/C++ ˤϻˤȤΤ褦Ǥ</p>
<p><b>mcpp</b> V.2.7 ʹߤ Mac OS X ˸¤äơGCC ǤǤ⥳ѥΩǤǤ⡢Ƥޤ</p>
<h4>3.8.4.2. Visual C #import, #using</h4>
<p>Visual C ˤ #import #using Ȥüʥǥ쥯ƥ֤ޤ
ץץǥ쥯ƥ֤ηƤޤƤϥѥȥФؼǤ
#import GCC ΤΤȤϴطޤ</p>
<p><b>mcpp</b> Visual-C-specific-build ϤιԤΤޤϤޤ</p>
<br>
<h2><a name="3.9" href="#toc.3.9">3.9. GCC GCC Ȥθߴ</a></h2>
<p>GCC Ǥ <b>mcpp</b> ǤϡGCC / cpp (cc1) ȤθߴѾ夢ޤؤʤ٤˳ݤƤޤߴ̤¿ޤ<br>
ޤ¹ԻץˤĤƤϡ2 Ϥ˸褦ˤ㤤ޤ-A ץϼƤޤޤǥ쥯ƥ֤Ǥ #assert, #ident ϼƤޤ*1<br>
ʤȤˡΤȤǥѥǤʤȤϤʤ褦Ǥ</p>
<p>षºݤȤʤΤϡŤץץåüʻͤƤˤǤ¿ GCC -pedantic ꤹȥ˥Фޤ<b>mcpp</b> Standard ⡼ɤΤΤǤϥ顼å̤˼ƤΤǡۤ GCC -pedantic ǥեȤȤʤäƤޤGCC ϥǥեȤǤϤʰȿۤä̤ᡢƤˤ˸ޤʤ˹פ褦˽ΤϤƴñʤȤǡ虜虜ʰȿνɬϲ⤢ޤñ˰ܿ»ʤǡȥХβȤʤΤǡĤľƤޤ礦*2</p>
<p>:</p>
<p>*1 Ϥɬפʤ #pragma Ǽ٤ΤǤ롣
#include_next, #warning ƱͤǤ뤬GCC ΥƥǤϼºݤ˻ȤƤΤǡ<b>mcpp</b> Ǥ GCC Ǥ˸¤äƼ˥оݤˤʤ롣</p>
<p>*2 3.9 3.9.3 1998 ǯ˽줿ΤǤ뤬θϾѤäƤƤ롣
Ťͤ˰¸륽Ͼʤʤꡢä GCC ȼγĥǽκ˰¸ΤƤƤ롣
3.9.4 ʹߡȤ 3.9.8 ʹߤǼ夲ΤϼȤƤǤ롣
(2008/03)</p>
<h3><a name="3.9.1" href="#toc.3.9.1">3.9.1. FreeBSD 2 / kernel Υץץ</a></h3>
<p>ʲˡFreeBSD 2.2.2-R (1997/05) kernel Ƥޤǥ쥯ȥ̾Ϥ /sys (/usr/src/sys) ΤΤǤΤ 7, 8 ɬʰȿǤϤʤ<b>mcpp</b> Ǥ̤νޤ֤ʤäʤΤǥ˥Фޤ6 ϳĥǽǡC99 ǤƱǽѰդƤޤGCC / cpp Ȥϵˡۤʤޤ</p>
<h4>3.9.1.1. Ԥޤʸƥ</h4>
<p><samp>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</samp> ˤϤǥ֥饽ޤƤޤ</p>
<pre>
asm("
asm code0
#ifdef PC98
asm code1
#else
asm code2
#endif
...
");
</pre>
<p>ʸƥĤ " ޤǤˤʤäϹĤƤȲ᤹Τ GCC / cpp ΥǥեȤλͤǤȤäƤΤǤʤ˥ѥΤǤ asm() ΤԤޤʸƥȲᤵ餷ˡ</p>
<p>֥饽 .s եȤڤΥƤΤɤȻפޤɤƤ .c եߤСʤ֤ʤäȤʤƤ⡢Τ褦ˤФߤޤǤ Standard C ΥץץåǤꤢޤ</p>
<pre>
asm(
" asm code0\n"
#ifdef PC98
" asm code1\n"
#else
" asm code2\n"
#endif
" ...\n"
);
</pre>
<h4>3.9.1.2. #else junk, #endif junk</h4>
<p><samp>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</samp> ˤϤԤޤ</p>
<pre>
#endif MACRO
</pre>
<p>ϤƤޤ礦</p>
<pre>
#endif /* MACRO */
</pre>
<h4>3.9.1.3. #ifdef 0</h4>
<p><samp>i386/apm/apm.c</samp> ˤϤʤ</p>
<pre>
#ifdef 0
</pre>
<p>ȤʹԤޤ
</p>
<p>
</p>
<pre>
#if 0
</pre>
<p>δְ㤤ǤºݤˤϻȤƤʤ
ǥХå⤵ƤʤʤΤǤ礦</p>
<h4>3.9.1.4. ޥ</h4>
<p><samp>gnu/i386/isa/dgb.c</samp> ǤϼιԤΥإåե̷⤹ˤʤޤ</p>
<pre>
#define DEBUG
</pre>
<p>Standard C Ǥ violation of constraint ǡºݤˤϽϤˤäơ顼ˤǽͭȤΤȡGCC 2 / cpp Τ褦˥ǥեȤǤۤäƤȤͭȤΤȤޤμ¤ˤȤͭˤˤϡľ</p>
<pre>
#undef DEBUG
</pre>
<p>٤Ǥ</p>
<h4>3.9.1.5. #warning</h4>
<p><samp>i386/isa/if_ze.c, i386/isa/if_zp.c</samp> ˤ #warning
ޤKernel ͣεʰȿǥ쥯ƥ֤ǤStandard C ˹碌뤿ˤϡιԤȥȤ뤷ޤ</p>
<p><b>mcpp</b> GCC ǤǤ #warning ȤΤǡΤޤ̤ޤ</p>
<h4><a name="3.9.1.6">3.9.1.6. Ѱޥ</a></h4>
<p><samp>gnu/ext2fs/ext2_fs.h, i386/isa/mcd.c</samp> ˤϼΤ褦ʲѸİΥޥƤޤ</p>
<pre>
#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); \
}
</pre>
<p> GCC / cpp ȼγĥͤǡ¾νϤǤѤޤ ## a ΤȤñ a Ȥ⤢ޤ## ȡޥƤӽФ <samp>a...<samp> бʤäϡľΥޤޤ<br>
C99 ǤϲѸİޥɲäƤޤˡۤʤꡢϼΤ褦˽Ȥˤʤޤ</p>
<pre>
#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__); \
}
</pre>
<p>C99 Ǥ <samp>...</samp> бƤӽФΰϣİʾɬפʤΤФơGCC / cpp Ǥ <samp>a...</samp> бϣĤǤ⤫ޤʤȤΤäǤ<b>mcpp</b> ǤϤн褹뤿ᡢ<samp>...</samp> бĤʤϡwarning ϽФΤΥ顼ˤϤʤ褦ˤƤޤäơΤ褦ʽǤޤΤۤϰабǤǤΤǡñǤνǤϡľΥޤĤΤǡȤ printf( fmt, ) ȤŸ̤ˤʤäƤޤȤޤξϡޥ嵭 C99 ͤνˤ뤫ޤϥޥƤӽФǥȤʤ褦ˤ뤷ޤˤ NULL 0 Τ褦̵ʥȡȤäơ<samp>MCD_TRACE(fmt, NULL)</samp> ȽȤˤʤޤ*1</p>
<pre>
#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__);
}
</pre>
<p>:</p>
<p>*1 GCC 2.95.3 ʹߤǤ C99 ιʸβѰޥƤΤǡȤۤɤGCC βѰޥϰĤǤɤȤ뤬εˡɤʤ<samp>args...</samp> ȤѥǤ <samp>args</samp> <samp>...</samp> ȤϤäĤƤʤФʤʤ pp-token ¸ߤʤִꥹȤǥȡϢ黻ҤƱˡ̤Ӥ˻ȤäƤΤ⡢ʤC99 εˡǡĤβѰƤȤͤǤ<br>
ʤGCC 3 ǤϲѰޥˤĤơGCC 2 λͤ C99 λͤȤŪʽɲä줿ˤĤƤ <a href="#3.9.6.3">3.9.6.3</a> ȤΤȡ</p>
<h4>3.9.1.7. ޥƤӽФΥ</h4>
<p><samp>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</samp> ˤϤޥƤӽФޤ<samp>/usr/include/nfs/nfs.h</samp> ǤƱͤǤ</p>
<pre>
LIST_HEAD(, arg2)
TAILQ_HEAD(, arg2)
CIRCLEQ_HEAD(, arg2)
SLIST_HEAD(, arg2)
STAILQ_HAED(, arg2)
</pre>
<p>ʤΤǤ C99 ǤϸǧޤC90 Ǥ undefined ǤͥȤ줿ޥƤӽФǤޤްˤʤäΤͤȡꤵƤۤɤȸޤ˥ȤˤϤξɬʤޤĤΥޥǤϥȰηȤζ̤ĤʤȤ syntax Τޤ뤳Ȥ⡢˺ƤϤʤޤ</p>
<p>ۤɤǤ礦Ǥ Standard C ΤɤΥץץåǤꤢޤ</p>
<pre>
#define EMPTY
LIST_HEAD(EMPTY, arg2)
TAILQ_HEAD(EMPTY, arg2)
CIRCLEQ_HEAD(EMPTY, arg2)
SLIST_HEAD(EMPTY, arg2)
STAILQ_HAED(EMPTY, arg2)
</pre>
<p>ȤǡΥإåեˤϡΥޥʤ¾ΤɤΥإå #include ƤʤȤΤޤnfs ǥ쥯ȥΤΡˡΥޥ sys/queue.h ˤꡢ*.c ץब #include 뤳ȤԤƤΤǤ֤ʤäΥإåǤ</p>
<p>ʤ<samp>kern/kern_mib.c</samp> ˤϼΤ褦ʥޥƤӽФޤ</p>
<pre>
SYSCTL_NODE(, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
</pre>
<p>Υ <tt>EMPTY</tt> Ȥ櫓ˤϤޤΥޥ <samp>sys/sysctl.h</samp> ˤꡢΤ褦ˤʤäƤ뤫Ǥ</p>
<pre>
#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);
</pre>
<p>ʤΰϥޥŸʤΤǤʤˤ <tt>SYSCTL_OID</tt> ȤޥǤ⡢ϤϥޥŸʤˡϥΤޤޤˤƤޤ*1</p>
<p>:</p>
<p>*1 C99 ǤϥϹˡȤƤ롣ޤ <tt>SYSCTL_NODE</tt>(),
<tt>SYSCTL_OID</tt>() Τ褦ʥޥΤȤͤȡ<tt>EMPTY</tt> ȤޥȤˡǽǤϤʤΤǡΤޤޤˤƤΤ뤳ȤǤ롣<tt>EMPTY</tt> ȤäƤ⡢ޥƤӽФͥȤƤȡϤꥫȯƤޤȤ⤢롣 readability ͤȡ<tt>EMPTY</tt> ȤȤǤϻȤäۤɤ褦˻פ롣</p>
<h4>3.9.1.8. Function-like ޥִ̾ object-like ޥ</h4>
<p><samp>i386/include/endian.h</samp> ˤϤޥޤ<samp>/usr/include/machine/endian.h</samp> ǤƱͤǤƱĤˡ</p>
<pre>
#define __byte_swap_long(x) (replacement text)
#define NTOHL(x) (x) = ntohl((u_long)x)
#define ntohl __byte_swap_long
</pre>
<p> ntohl Ǥ object-like ޥǤʤ function-like ޥ̾Ÿ졢Τ³ƥȤߡ function-like ޥΤ褦ŸޤŸˡ K&R 1st. ΰۤλͤǡStandard C ǤϤʤˡȤʤäΤǤ䤬̤ΤȤƤ褦ˡλͤޥŸ̵ѤʣˤʽˤޤǺ⤿餷Ƥ븵Ǥꡢ֥ХΤ褦ʻ͡פʤΤǤ*1</p>
<p>ϼ֤ function-like ޥǤΤά object-like ޥȤƽƤΤǤfunction-like ޥ餷Τ褦˽ۤɤǤ礦Ǥв⤢ޤ</p>
<pre>
#define ntohl(x) __byte_swap_long(x)
</pre>
<p><samp>i386/isa/sound/os.h</samp> ˤƱΥޥޤ</p>
<pre>
#define INB inb
#define INW inb
</pre>
<p>ϤƤޤ礦
</p>
<pre>
#define INB(x) inb(x)
#define INW(x) inb(x)
</pre>
<p>:</p>
<p>*1 ISO 9899:1990 Corrigendum 1:1994 ǤϤ undefined
Ȥ줿ơC99 Ǥ Corrigendum Τι̤ΤΤ֤줿ʽϤ˴ؤƤϺ𤷤Ƥ롣ܺ٤ <a href="cpp-test.html#2.7.6"> cpp-test.html#2.7.6</a> ȡ</p>
<h4>3.9.1.9. .S եΡ֥ץץ</h4>
<p>Kernel ˤϲܤ .S ե롢
ʤ֥饽ޤȤˤ #include #ifdef äơ֥ץץפɬפʤΤǤFreeBSD 2.2.2-R ǤϤΥ cc -x assembler-with-cpp ץդƸƤӽФȤˡǽƤޤ cc /usr/libexec/cpp -lang-asm ץĤƸƤӽФ as ƤӽФޤ</p>
<p> .S եϤʳ§Ǥ줬տ̤ˡ֥ץץפ뤿ˤϡޥȤޤްפ̾פ֥饽˴ޤޤƤƤϤޤơ֥ץץפǤϡ֥ȡ״֤ white space ̵ͭϤΤޤ¸ʤФʤ餺Ƭ space ¸ʤФʤޤԤκǽΡ֥ȡפ֥ΥȤǤ # Ǥϥץץå¦üʽɬפǤȤץץåʤ¤졢Хκˤ;פʿФȤʤФʤʤΤǡ褷ɤȤȤϻפޤ*1</p>
<p>ʣΥޥбΤ˥ץץɬפΤǤС.S եǤϤʤ .c եȤơηǽΤɤǤ礦4.4BSD-Lite ǤϼºݤˤνˤʤäƤޤ</p>
<pre>
asm(
" asm code0\n"
#ifdef Machine_A
" asm code1\n"
#else
" asm code2\n"
#endif
" ...\n"
);
</pre>
<p>:</p>
<p>*1 FreeBSD 2.0-R ǤϤΥե̾ *.S ǤϤʤ *.s
ȤʤäƤơMakefile ǤϤνˤ cc ǤϤʤ cpp ƤӽФơ as ƤӽФ褦ˤʤäƤơcpp ƤӽФ /usr/bin/cpp ư shell-script ǡ/usr/libexec/cpp -traditional ƤӽФΤۤscript 뤳ȤǻȤץץåѤ뤳ȤǤΤǡǤä</p>
<h3><a name="3.9.2" href="#toc.3.9.2">3.9.2. FreeBSD 2 / libc Υץץ</a></h3>
<p>FreeBSD 2.2.2R <samp>/usr/src/lib/libc</samp> ⥳ѥ뤷ƤߤޤäϤޤǤȾ 4.4BSD-Lite 餽ΤޤƤ뤫Ǥ礦εϤǤ줤ʥäƤΤȤǡɮͤޤ</p>
<p>Ľꡢ<samp>gen/getgrent.c</samp> ˼Τ褦ʹԤĤޤ ; ;פǤ</p>
<pre>
#endif;
</pre>
<h3><a name="3.9.3" href="#toc.3.9.3">3.9.3. GCC 2 / cpp λͤ</a></h3>
<p>ơʾ˸褦ˡΥʤ˹פܿι⤤ʥǽȤˤϡݤǥåȤ⤢ޤˤ⤫餺ʤޤ˽ƤΤǤ礦</p>
<p>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 η˽ؤƤΤޤäݤ줿Τʤ褹ΤǤ礦</p>
<p>ϤˤϡGCC / cpp ۤä̤ƤޤȤΰƶƤȻפޤ-pedantic ưǥեȤǤСΥ虜虜ֿ뤳ȤϤʤäǤ礦ĤƤ -pedantic-errors ǥեȤˤΤǤϥѥǤʤ¿ơŪǤϤʤäΤ⤷ޤgcc man page ˤ -pedantic ץˤĤơ֤ȤͳϲʤΥץ¸ͳ pedants 뤳ȤǤפȤޤ(*1) Standard C ޤäƣǯ⤿ĤޤȤʤäƤϡ-pedantic-errors ȤޤǤϤʤƤ -pedantic ǥեȤˤ٤ƤȻפޤ</p>
<p>FreeBSD 2.0-R ǤϥȤΥͥȤޤ2.2.2-R ǤϰݤƤޤݤ줿ΤϡGCC / cpp ǧʤʤäǤ -pedantic ȤϴطޤץץåΥåΰϤϤۤ礭ΤǤ</p>
<p>:</p>
<p>*1 3.9.3 줿Τ 1998 ΤȤǤ롣θ塢gcc
man info ǤϡˤɽϺ줿ͤäѤä櫓ǤϤʤ</p>
<h3><a name="3.9.4" href="#toc.3.9.4">3.9.4. Linux / glibc 2.1 Υץץ</a></h3>
<p>glibc (GNU LIBC) 2.1.3 (2000/02) Υѥ뤷Ƥߤޤˤ FreeBSD libc ȤϰäƤʤ¿꤬ޤˤ GCC / cpp undocumented ʻͤѤƤΤꡢλͤͤߤǤʤλ֤䤷ƤޤäȤޤ</p>
<h4>3.9.4.1. Ԥޤʸƥ</h4>
<p><samp>sysdeps/i386/dl-machine.h, stdlib/longlong.h</samp> ˤ</p>
<pre>
#define MACRO asm("
instr 0
instr 1
instr 2
")
</pre>
<p>ȤäιԤޤʸƥ뤬Ĥ⤢ޤ
ˤϤʤĹʤΤ⤢ޤ</p>
<p>ޤmake ˤä
<samp>compile/csu/version-info.h</samp> ˤԤޤʸƥ뤬ޤ<br>
ϤʰȿΥǤGCC ǤϤԥɤäʸƥȤưޤ<br>
<b>mcpp</b> Ǥ -lang-asm (-x assembler-with-cpp, -a) ץꤹȡԤޤʸƥ</p>
<pre>
#define MACRO asm("\n instr 0\n instr 1\n instr 2\n")
</pre>
<p>ȤѴƽޤ3.9.1.1 Τ褦˥ǥ쥯ƥ֤ΤϤޤäƤΤϡǤбǤľʤˡ</p>
<h4>3.9.4.2. #include_next, #warning</h4>
<p><samp>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</samp> ˤ #include_next ޤ</p>
<p>ޤ<samp>sysvipc/sys/ipc.h</samp> ˤ #warning ޤ</p>
<p>ϵʤǤǧƤʤǥ쥯ƥ֤Ǥ
glibc 2 ΥƥǤϤȤ #include_next ԲķΤΤȤʤäƤޤäƤΤǡ<b>mcpp</b> Ǥ GCC ѤǤ #include_next #warning ϼƤޤ</p>
<p>#include_next ϵʰȿȤȤǤϤޤInclude directories ȤΥϴĶѿΥ桼¦ˤäѤ礬ΤǡˤäƷ̤äƤޤ</p>
<p>Glibc include ǥ쥯ȥΥեˤϡglibc install /usr/include ǥ쥯ȥ˥ԡΤ⤢ޤʤƥΥإåեȤƻȤΤʤΤǤإåե#include_next ȤƤ뤳ȤϡƥإåʤĤϤ֤ˤʤäƤƤ뤳ȤɽƤޤɬפʻˤƤ褦Ǥ</p>
<h4>3.9.4.3. Ѱޥ</h4>
<p><samp>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</samp></p>
<p>ʾΥեˤ GCC / cpp λͤβѸİޥȸƤӽФޤ*1</p>
<p>:</p>
<p>*1 GCC2 餢ͤǤ뤬Τۤ GCC3 Ǥ C99 GCC2 ȤŪʻͤɲä줿
ˤĤƤ <a href="#3.9.6.3">3.9.6.3</a> ȤΤȡ</p>
<h4>3.9.4.4. ޥƤӽФΥ</h4>
<p><samp>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</samp></p>
<p>ʾΥեˤϥޥƤӽФΥޤȤ <samp>math/bits/mathcalls.h</samp> ˤϥ 79 Ĥ⤢ޤΥإåե <samp>/usr/include/bits/mathcalls.h</samp> install ơ<samp>/usr/include/math.h</samp> #include ΤǤ<tt>EMPTY</tt> ȤޥȤäƤ⡢ޥƤӽФͥȤƤΤǡϤ̤ΥȯޤäȤ줤ʥޥνϤǤʤΤǤ礦</p>
<h4>3.9.4.5. Function-like ޥִ̾ object-like ޥ</h4>
<p><samp>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</samp></p>
<p>ʾΥեˤ function-like ޥִ̾ object-like ޥޤˤϡmath/test-*.c ˤΤΤ褦ˡfunction-like ޥ object-like ޥִơˤ줬 function-like ޥִ̾Τ⤢ޤɬΤǤ礦</p>
<h4><a name="3.9.4.6">3.9.4.6. 'defined' Ÿޥ</a></h4>
<p><samp>sysdeps/generic/_G_config.h, sysdeps/unix/sysv/linux/_G_config.h, malloc/malloc.c</samp> ˤϡ㤨мΤ褦 defined Ȥ pp-token Ÿޥޤ</p>
<pre>
#define HAVE_MREMAP defined(__linux__) && !defined(__arm__)
</pre>
<p>ϡ</p>
<pre>
#if HAVE_MREMAP
</pre>
<p>Ȥǥ쥯ƥ֤</p>
<pre>
#if defined(__linux__) && !defined(__arm__)
</pre>
<p>Ȥʤ뤳ȤԤƤΤǤ
</p>
<p>ޤ #if ǥޥŸη̤ defined Ȥ pp-token
ФƤΤϡʤǤ undefined ǤΤȤ̤ȤƤ⡢ʤΥޥѤǤ</p>
<p><tt>HAVE_MREMAP</tt> ȤޥϤä</p>
<pre>
defined(__linux__) && !defined(__arm__) (1)
</pre>
<p>ִ졢 identifier Ǥ defined, __linux__, __arm__ 줾ޥǤ뤫ɤĴ٤졢ޥǤŸޤäơdefined ϥޥȤƤϤϤʤΤǡʤ⤷ƤС켫ΤǤ undefinedˡ __linux__ 1 Ƥơ__arm__ ƤʤСΥޥϺǽŪ˼Τ褦Ÿޤ</p>
<pre>
defined(1) && !defined(__arm__)
</pre>
<p>defined(1) Ϥ #if syntax error Ǥ</p>
<p>Ȥ GCC
Ǥϡ#if ԤǤʤФʤΤǤ#if Ԥ˸¤ä (1) ǥޥŸƤޤ #if ȤɾޤUndefined ǤΤǤְ㤤ȤϸޤޥŸ #if ԤȤǤʤȤǰۤʤΤϡӤʤͤǤʤȤ⤽λͤˤ portability ޤ*1</p>
<p>ΥޥϼΤ褦˽СʤΤǤ</p>
<pre>
#if defined(__linux__) && !defined(__arm__)
#define HAVE_MREMAP 1
#endif
</pre>
<p>ʤäݤƤۤΤǤ
*2</p>
<p>:</p>
<p>*1 GCC 2 / cpp #if ԤǤŪ defined üʥޥȤưäƤ롣
ΤᡢΤ褦ʥȡޥŸΤ˺ΤǤ뤬η̤ޥŸˡ#if Ȥɾ뤳ȤˤʤΤǤ롣ʤޥŸ #if ɾȤʬΥ˺ƤΤǤ롣</p>
<blockquote>
<samp>defined(__linux__) && !defined(__arm__)</samp>
</blockquote>
<p> GCC / cpp Υץ¤ˤ⤫Ǥ롣GCC 2 / cpp Ǥ rescan() Ȥޥ롼¾Υᥤ롼ȤʤäƤơ줬ƥȤᤫ齪ޤɤߤʤƤ椯ơץץǥ쥯ƥ֤ν롼⤳椫ƤӽФΤǤ롣ǤޥǼΤϥޥץåŪʥץ¤Ǥ뤬ι¤ޥŸ¾νȤκطʤˤʤäƤȹͤ롣</p>
<p>*2 glibc 2.4 ǤϤΥޥľƤ롣
Ȥ¾ΥޥƱΤΤˤĤФƤƤ롣</p>
<h4>3.9.4.7. .S եΡ֥ץץ</h4>
<p>*.S
Ȥ̾Υեϥץץפ륢֥ΥǤˤ #include, #define, #if Υץץǥ쥯ƥ֤ФƤޤˡMake ˤä <samp>compile/csu/crti.S</samp> Ȥեˤϡ</p>
<pre>
#APP
</pre>
<p>Ȥ</p>
<pre>
#NO_APP
</pre>
<p>ȤԤޤǸޤ
ιԤ̵ʥץץǥ쥯ƥ֤ȹʸ塢̤ĤޤGNU ǤϤιԤϤΤޤޥץץ˻Ĥäơ֥ΥȤȤư褦Ǥ</p>
<p>ޤ## 黻Ҥˤ pp-token Ϣ뤬 invalid pp-token Ƥޤ⤢ޤGCC / cpp ϤۤäƤΤޤϤޤ</p>
<p><b>mcpp</b> Ǥ GCC / cpp ȤθߴΤˤʤ-lang-asm (-x assembler-with-cpp, -a) ץդȡ illegal ʥǥ쥯ƥ֤ ## ˤä줿 invalid pp-token 顼ˤ˥ФΤΤΤޤϤ褦ˤޤ</p>
<p>衢֥ѤΥޥץåǽ٤ΤȻפޤGNU ˤ gasp Ȥ֥ѥޥץå褦ǤʤۤȤɻȤƤʤ褦Ǥ</p>
<h4><a name="3.9.4.8">3.9.4.8. rpcgen -dM ץλͤ</a></h4>
<p>GCC -dM ȤץǵưȥޥϤޤmake check ǻȤ <samp>stdlib/isomac.c</samp> ϤѤƤޤisomac.c ϡޥեηȤ GCC νϷꤷƤơȤԤ⥨顼ˤʤäƤޤȤǤ</p>
<p>glibc make Ǥ rpcgen ȤץबȤ뤳ȤޤΥץϡץץåιֹνϷȤƤϤ GCC </p>
<pre>
#123 "filename"
</pre>
<p>ȤꤷƤơ</p>
<pre>
#line 123
</pre>
<p></p>
<pre>
#line 123 "filename"
</pre>
<p>⥨顼ˤʤäƤޤȤǤ
</p>
<p><b>mcpp</b> Ǥ GCC ǤǤ GCC ηǥեȤˤޤ
rpcgen üʷˤơɸŪʷбƤʤȤΤϡʻͤǤ</p>
<h4>3.9.4.9. -include, -isystem, -I- ץ</h4>
<p>glibc 2.1 makefile Ǥϡ-include ץФлȤƤޤˤ -isystem ץ -I- ץȤޤ-include ϥƬ #include ФΤǡ-isystem, -I- ϥƥإå礷ɬδʤΤǤ<br>
<b>mcpp</b> Ǥ GCC Ѥμ˸¤äơΣĤΥץޤޤɬפΤʤץƤ餤ΤǤ*1</p>
<p>:</p>
<p>*1 GCC / cpp ˤϤΤۤ -iprefix, -iwithprefix, -iwithprefixbefore, -idirafter Ȥä include directory Ȥνꤹ륪ץĤ⤢롣ޤlong-file-name MS-DOS 8+3 Υե̾ȤбɽλѤꤹ -remap ץ⤢롣 CygWIN ƥ specs եǻȤ뤳Ȥ뤬include directory ϴĶѿǻꤷƤФळȤǤꡢ8+3 Υե̾ؤбޤ CygWIN ɬפȤפʤ</p>
<h4>3.9.4.10. Undocumented ʻޥ</h4>
<p> glibc ǤϤʤGCC Ǥ</p>
<pre>
__VERSION__, __SIZE_TYPE__, __PTRDIFF_TYPE__, __WCHAR_TYPE__
</pre>
<p>ʾ̾ϥɥȤˤϸޤGCC / cpp ǤϻޥȤʤäƤޤ<tt>__VERSION__</tt> ͤ 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 ǤϾİäƤޤʤʤ㤦ɬפΤ狼ʤˡ<br>
ȤɤƥɥȤˤʤΤǤ礦</p>
<h4>3.9.4.11. Undocumented ʴĶѿ</h4>
<p>äȤʤΤ
<samp>SUNPRO_DEPENDENCIES</samp> Ȥ undocumented ʴĶѿǤ<samp>sysdeps/unix/sysv/linux/Makefile</samp> ˤ</p>
<pre>
SUNPRO_DEPENDENCIES='$(@:.h=.d)-t $@' \
$(CC) -E -x c $(sysinclude) $< -D_LIBC -dM | \
... \
etc.
</pre>
<p>Ȥ script ޤ <samp>SUNPRO_DEPENDENCIES</samp> ȤĶѿǥե̾ꤷcpp Υޥȥեΰ¸طԤλꤵ줿ե˽ϤȤΤʤΤǤ</p>
<p>ưˤϡGCC / cpp Υ (egcs-1.1.2/gcc/cccp.c) ɤषޤǤ<br>
Τۤ<samp>DEPENDENCIES_OUTPUT</samp> ȤĶѿ⤢ꡢƱͤΰ̣äƤޤ<samp>SUNPRO_DEPENDENCIES</samp> Τۤ system headers ΰ¸طԤϤΤФơ<samp>DEPENDENCIES_OUTPUT</samp> ϤǤϤʤȤ㤤ޤ</p>
<p><b>mcpp</b> Ǥ GCC бǤ˸¤äơΣĤδĶѿбޤ͡פΤ褦ʤΤѻߤƤۤΤǤ</p>
<h4>3.9.4.12. ¾</h4>
<p>Linux (i386) / GCC ǤϤΤۤspecs եλˤäơcpp θƤӽФ -Asystem(unix) -Acpu(i386) -Amachine(i386) ȤץղäޤѤ륽ϾʤȤ glibc 2.1.3 Linux / x86 ǤˤϤʤ褦Ǥ<br>
Glibc 饤ȡ뤵륷ƥإåĤϤ餱ʣʤΤˤʤäƤƤ뤳Ȥϡ礭ǤäȤΰ㤤ˤäƽ̤äƤ붲줬ޤ</p>
<p>¾ǡFreeBSD 2.2.2 / kernel Ǹ줿 #else junk, #endif junk ޥ glibc 2.1.3 ǤϸޤǤGlibc 2.1 Υ FreeBSD 2 / kernel ΥƤ̤⤤餫ޤ</p>
<p>ΤȤƤϡglibc 2.1 ˤ GCC üʻͤ˰¸Ƥ륽ʤ餺ꡢ¾νϤؤΰܿϺˤʤäƤޤʿܤΥեǤϤǤ뤬ˡץβƥʥΤˤ⡢ GCC local ʻͤؤΰ¸ϹޤޤGCC V.3 ǤϤŪͤѻߤ˰¸륽ݤ뤳ȤԤȻפޤ</p>
<h3><a name="3.9.5" href="#toc.3.9.5">3.9.5. GCC 2 <b>mcpp</b> Ȥˤ</a></h3>
<p><b>mcpp</b> glibc 2.1 Υѥ˻ȤˤϡޤΥνɬפǤ*1<br>
ĤϲѸİΥޥȸƤӽФǤ嵭 3.9.4.3 ˤ 14 ĤΥեˤĤơ3.9.1.6 ˤ褦ʷǽޤΥեĤƤۤɤǤ礦<br>
⤦Ĥϡ3.9.4.6 ˤ룳ĤΥեΡִꥹȤ "defined" ФƤޥνǤޤ<samp>/usr/include/_G_config.h</samp> <samp>sysdeps/unix/sysv/linux/_G_config.h</samp> install ƤǤƱΥեǤ⽤ƤۤɤǤ礦</p>
<p><b>mcpp</b> εưˤϡMakefile specs եղä륪ץΤۤˡԤޤʸƥ䥢֥ѤΥȤޤ *.S եΤ -lang-asm (-x assembler-with-cpp) ɬפǤΥץ¾ΥեΥץץˤդƤơ̾Ϥޤޤ</p>
<p>GCC / cpp Ȥä <b>mcpp</b> ȤäꡢǥեȤղä륪ץѹꤹ뤿ˤϡΤ褦ˤΤɤǤ礦</p>
<p>Super-user ˤʤäơcpp ¸ߤǥ쥯ȥʤǤ <samp>/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66</samp> Ȥˤ˹Ԥޤ GCC / cpp cpp Ȥ̾¸ߤ<b>mcpp</b> mcpp Ȥ̾ install ƤȤޤޤΤ褦Ƥ mcpp.sh Ȥ̾Υեޤ*2</p>
<pre>
#!/bin/sh
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/mcpp -Q -lang-asm "$@"
</pre>
<p>-Q ץϤʤƤ⤫ޤޤ̤οǥåϿˤդۤɤǤ礦<br>
ˡΤ褦ʥޥɤǤߤޤ</p>
<pre>
chmod a+x mcpp.sh
mv cpp cpp_gnuc
ln -sf mcpp.sh cpp
</pre>
<p>Ƥȡgcc
cpp ƤӽФˡ˥Ƥ mcpp.sh ¹Ԥ졢<b>mcpp</b> ˾嵭Υץgcc ղä륪ץˡղäƸƤӽФޤ</p>
<p>ǥեȤΥץѹϡmcpp.sh ѹʤꡢmcpp ľܸƤӽФʤꤷޤơGCC / cpp Ȥ</p>
<pre>
ln -sf cpp_gnuc cpp
</pre>
<p>Ȥޤ</p>
<p>:</p>
<p>*1 <b>mcpp</b> V.2.7 GCC-specific-build ˤλͤ줿ΤǡʤƤץץϤǤ褦ˤʤä</p>
<p>*2 <b>mcpp</b> configure ƥȡ뤷ϼưŪŬڤ꤬롣
Ȥ -Q -lang-asm ץɲäǤࡣ</p>
<h4><a name="3.9.5.1" href="#toc.3.9.5.1">3.9.5.1. <b>mcpp</b> Υ˥ˤ</a></h4>
<p><b>mcpp</b> ȤΤ⤦Ĥϡ̤Υ˥Ϥ뤳ȤǤ-Q ץǥ쥯ȤƤ⡢glibc Τ褦絬Ϥʥ mcpp.err ɴ MB ʾˤʤΤǡ٤Ƥܤ̤櫓ˤϤޤ<br>
ƤȡƱ˥֤ФƤ뤳Ȥ狼ޤƱ *.h ե뤬¿Υ #include 뤿ˡƱ˥֤֤ФΤǤƸˤϡΤ褦ˤޤ<br>
ޤ顼åޤ</p>
<pre>
grep 'fatal:' `find . -name mcpp.err`
grep 'error:' `find . -name mcpp.err`
</pre>
<p>ˡ˥ޤ
</p>
<pre>
grep 'warning:' `find . -name mcpp.err` | sort -k3 -u > mcpp-warnings-sorted
</pre>
<p>˥νн٤Ƹ뤿ˤϡΤ褦ˤޤ
</p>
<pre>
grep 'warning:' `find . -name mcpp.err` | sort -k3 | uniq > mcpp-warnings-all
</pre>
<p>μΥ˥ˤϡȤмΤ褦ˤޤ
</p>
<pre>
grep 'warning: Replacement' `find . -name mcpp.err` | sort -k3 | uniq | less
</pre>
<p>ƸĤǡ mcpp.err less ǸƤǧɬפʤ饽ޤ<br>
ɬפʤ顢θĽ #pragma MCPP debug expand, #pragma MCPP end_debug ǶǺ٥ץץơνϤޤλˤϡץץνϤȿǥåȤƱե˽Ф褦ˡΤ褦ˤޤmake ϡ嵭 shell-script ˡ</p>
<pre>
mcpp <-opts> in-file.c > in-file.i 2>&1
</pre>
<h3><a name="3.9.6" href="#toc.3.9.6">3.9.6. GCC 3.2 Υץץ</a></h3>
<p>Linux FreeBSD ǡGCC 2.95.* GCC 3.2R (2002/08) Υѥ뤷Ƥߤޤơ줿 gcc Ȥä <b>mcpp</b> ѥ뤷˥ץץˤȤä GCC 3.2 GCC 3.2 Υꥳѥ뤷Ƥߤޤ</p>
<p>GCC make ϤĤʳФ bootstrap Ƥ椯褦ˤʤäƤޤʤǽʳ줿 gcc, cc1, etc. ȤäƼʬȤꥳѥ뤷äƺ줿ΤȤäƤޤʬȤꥳѥ뤷Ȥäвɤޤgcc bootstrap Ǥ xgcc Ȥ̾¸ߤƤޤ</p>
<p>ޤGCC 2 Ǥ cc1, cc1plus ΩƤ cpp GCC 3 Ǥ cc1, cc1plus ˵ۼƤޤޤΩץץåǤ cpp0 ¸ߤƤꡢgcc g++ -no-integrated-cpp ȤץդȤ˥ץץ뤳ȤǤ褦ˤʤäƤޤäơ<b>mcpp</b> ˥ץץ뤿ˤϡgcc (xgcc), g++ θƤӽФ shell-script ֤ơ<b>mcpp</b> => cc1 ޤ <b>mcpp</b> => cc1plus ȤǼ¹Ԥ褦ˤʤФʤޤ*1</p>
<p>GCC ΥƥǤϡƥإå䤽Υ꤬ʣˤʤäƤƤޤޤGCC 3 Ǥ GCC Ū˻Ȥ C++ shared library λͤ GCC 2 ȤѤä褦ǤΤᤫѥ뤹Ǥ⤦ޤ椫ʤȤޤޤѥȥƥȤˤ¿¾ΥեȥɬפǡΥСŤȡޤ椫ʤȤޤΤȤǤϥϡɥǤޤѥǤʤȤ⤢ޤ</p>
<p>FreeBSD 4.4R Ǥ GCC 3.2 ϥѥǤޤǤFreeBSD 4.7R upgrade packages 4.7 ѤΤΤؤơ褦䤯ѥ뤹뤳ȤǤޤ*2<br>
ΤȤǤϣΥѥƱ VineLinux 2.5 äƤޤ (K6/200MHz) Ǥ GCC 2.95.3 ȤäƤΥѥϤǤΤΡ줿 GCC 3.2 / cc1 segmentation fault ֤ƤޤʬȤΥꥳѥ뤬ǤޤǤθ塢K6 AthlonXP ˼ؤƥꥳѥ뤷Ȥ٤ segmentation fault ȯޤǤϥϡɥäΤ⤷ޤ<br>
ޤ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 ˼ؤƤϤޤ椯褦ˤʤޤϡɥäΤ⤷ޤ</p>
<p>ޤVineLinux GCC 3.2 Ȥ <b>mcpp</b> Ȥäƥꥳѥ뤷ϡ줿 gcc make -k check ̤ޤg++, libstdc++-v3 testsuite Σ̤ޤǤ*3, *4, *5<br>
ɤˤƤ⡢줿 gcc, g++, cc1, cc1plus ǤϤʤإåե뤫饤֥꤫̯Τ褦Ǥ<br>
<b>mcpp</b> GCC Ȥϴ˸ߴǤϤޤʤ⤤ߴäƤΤǡؤƻȤäƤۤϤʤȻפޤ</p>
<p>GCC 3.2 Υѥ˻ȤäƥϼΤΤǤ</p>
<blockquote>
<table>
<tr><th>OS </th><td>make </td><td>library </td><td>CPU</td></tr>
<tr><th>VineLinux 2.5</th><td>GNU make</td><td>glibc 2.2.4</td><td>Celeron/1060MHz</td></tr>
<tr><th>VineLinux 2.5</th><td>GNU make</td><td>glibc 2.2.4</td><td>K6/200MHz</td></tr>
<tr><th>VineLinux 2.5</th><td>GNU make</td><td>glibc 2.2.4</td><td>AthlonXP/2.0GHz</td></tr>
<tr><th>FreeBSD 4.7R </th><td>UCB make</td><td>libc.so.4 </td><td>K6/200MHz</td></tr>
<tr><th>FreeBSD 4.7R </th><td>UCB make</td><td>libc.so.4 </td><td>AthlonXP/2.0GHz</td></tr>
</table>
</blockquote>
<p>ѥ뤷Τ
C C++ Ǥ</p>
<p>:</p>
<p>*1 bootstrap γʳȤˤʤФʤʤΤǤ롣
Makefile ϼˤϤޤ礭ʣʤΤǡ̤ĥդƤơstage ѤäȤ ^C Ǥơscript ֤ȤԺٹˡȤä</p>
<p>*2 ⡢¿ packages δ֤ΰ¸طΤǡСޤޤȺ롣ΤȤǤϤΤˡ kterm ưʤȤ֤˴٤äȤ⤢롣</p>
<p>*3 make -k check <b>mcpp</b> ϻȤäƤϤʤǥå GCC Ȥϰۤʤ뤫Ǥ롣</p>
<p>*4 make -k check ϴĶѿ LANG, LC_ALL C ȤơѸĶˤʤȤʤ</p>
<p>*5 Testsuite ̤ʤľܤθϤ٤ơ<samp>i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.5.0.0</samp> Ȥ饤֥ pthread_getspecific, pthread_setspecific pthread_* ȤؿǤʤȤΤǤ롣줿Υ饤֥ƤСmake -k check ̤롣FreeBSD ǤϤϵʤ̯Τ褦Ǥ롣</p>
<h4>3.9.6.1. Ԥޤʸƥ</h4>
<p>ΤޤˤŤ GCC 3.2 ΥˤϤޤλͤ GCC 3.2 Ǥ褦䤯 obsolete Ȥޤˤ줬ȡ̤˽Ϥޤ˥Фޤ</p>
<h4>3.9.6.2. #include_next, #warning</h4>
<p>Make <samp>build/gcc/include</samp> limits.h, syslimits.h ˤ #include_next ꡢGCC 3.2 install ȡ<samp>lib/gcc-lib/i686-pc-linux-gnu/3.2/include</samp> limits.h, syslimits.h ˥ԡޤ</p>
<p>#warning ϸޤǤ</p>
<h4><a name="3.9.6.3">3.9.6.3. Ѱޥ</a></h4>
<p>ѰޥϤĤޤ
Ⱦ testsuite ΤΤǡƥѤ˽줿ץˤޤơGCC 2 εˡϤޤݡȤƤϤΤΡ<samp>__VA_ARGS__</samp> Ȥä C99 ΤΤ¿ʤäƤޤ</p>
<p>ޤGCC 3 Ǥ GCC 2 λͤ C99 λͤȤŪʽɲäƤޤηǤ*1</p>
<pre>
#define eprintf( fmt, ...) fprintf( stderr, fmt, ##__VA_ARGS__)
</pre>
<p> GCC 2 ͤμνбޤ</p>
<pre>
#define eprintf( fmt, args...) fprintf( stderr, fmt, ##args)
</pre>
<p>ϡ<samp>...</samp> бʤäϡľΥޤȤͤǤȤСΤ褦Ÿޤ</p>
<pre>
eprintf( "success!\n") ==> fprintf( stderr, "success!\n")
</pre>
<p>ʻͤΤ褦ǤޥִꥹΥޤϥѥڤΤȤϸ¤ʤȡȡϢ黻ҤǤ ## ̤ƯƤ뤳ȡ§㳰äʣˤΤǤ뤳ȡ꤬ޤ*2, *3, *4</p>
<p>:</p>
<p>*1 Υޥ˥奢ǤϡGCC 2 βѰޥ GCC2 ͡GCC 3 ɲä줿Τ GCC3 ͤȸƤ֤Ȥˤ롣</p>
<p>*2 GCC 2.* Ǥ GCC2 ͤβѰޥ <samp>args...</samp> Ǥ <samp>args</samp> <samp>...</samp> ȤϤäĤƤʤФʤʤäGCC 3 Ǥϴ֤ space äƤƤɤʤä</p>
<p>*3 -ansi ץꤵ줿-std=c*, -std=iso* ץǤƱ͡ˡѰ¸ߤʤƤ⥳ޤϺʤ
'##' ۤäƾä롣</p>
<p>*4 <b>mcpp</b> Ǥ V.2.6.3 GCC-specific-build <i>STD</i> ⡼ɤ˸¤äơGCC3 ͤβѰޥ줿
V.2.7 GCC2 ͤΤΤˤб</p>
<h4>3.9.6.4. ޥƤӽФΥ</h4>
<p>ޥƤӽФΥϡ#include 륷ƥإåΤΡ<samp>/usr/include/bits/mathcalls.h, /usr/include/bits/sigset.h</samp>ˤ̤ȤȡGCC 3.2 ΥΤǤϡ<samp>gcc/libgcc2.h</samp> ˤޤ*1</p>
<p>:</p>
<p>*1 ΣĤΥإåե glibc install
뤳ȤǥƥإåäƤ椯ΤǤ롣FreeBSD Ǥ glibc ȤäƤʤΤǡΥƥإå¸ߤʤ</p>
<h4>3.9.6.5. Function-like ޥִ̾ object-like ޥ</h4>
<p><samp>gcc/fixinc/gnu-regex.c, libiberty/regex.c</samp> ˤϡfunction-like ޥִ̾ object-like ޥޤޤ#include <samp>/usr/lib/bison.simple</samp> ƱͤǤϤ٤ alloca ˴ؤΤǤȤС<samp>libiberty/regex.c</samp> ˤϤޥޤ</p>
<pre>
#define REGEX_ALLOCATE alloca
#define alloca( size) __builtin_alloca( size)
</pre>
<p>ϡʤΤǤʤʤȤάΤǤ礦</p>
<pre>
#define REGEX_ALLOCATE( size) alloca( size)
</pre>
<p> regex.c Ǥ alloca ϾˤäƤϼΤ褦褦ˤʤäƤꡢ뤬ӤƤޤ</p>
<pre>
#define alloca __builtin_alloc
</pre>
<p>ޤregex.c ˤ #include "regex.c" ȤԤꡢʬȤ롼ɤ褦ˤʤäƤޤʣʥǤ</p>
<h4>3.9.6.6. 'defined' Ÿޥ</h4>
<p> GCC 3.2 Υˤϸޤ</p>
<p>ɥȤˤȡ
μΥޥν GCC 2 / cpp ƱǤΤΡportability ʤפȤ˥ФȤˤʤäƤޤƥȤƤߤȡ3.9.4.6 Ǥϥ˥Фޤ</p>
<h4>3.9.6.7. .S եΡ֥ץץ</h4>
<p>GCC 3 / cpp ΥɥȤˤϡΤ褦˽Ƥޤ</p>
<blockquote>Wherever possible, you should use a preprocessor geared to the
language you are writing in. Modern versions of the GNU assembler have
macro facilities.</blockquote>
<p>GCC 3.2 ȤΥˤϡ*.S ե뤬 <samp>gcc/config</samp> ǥ쥯ȥ˿ܤޤ</p>
<h4>3.9.6.8. rpcgen -dM ץλͤ</h4>
<p>GCC 3.2 make Ǥ rpcgen -dM ץȤޤǤrpcgen -dM ץλͤäѤäƤϤʤ褦Ǥ</p>
<h4>3.9.6.9. -include, -isystem, -I- ץ</h4>
<p>ΥץϤФлȤƤꡢ-isystem ץ system include directory Ʊ˿Ļꤵ礵ޤƥإåΤΤ륽եȥΥѥǤϡʤȤʤΤǤ礦Ķѿǰ礷ƻꤷۤ狼䤹ȻפΤǤ</p>
<p>ǡGCC 3 / cpp ΥɥȤǤϡ-iwithprefix, -iwithprefixbefore ץˤĤƤϡֻȤʤۤɤ (discouraged)פȽƤޤGCC ˤ include directory ꤹ륪ץ䤿ˤޤäƤΤǤ礦*1</p>
<p>:</p>
<p>*1 GCC 3.2 Makefile -iprefix ץդƤ롣
Ȥ -iwithprefix, -iwithprefixbefore ϻȤʤΤǤ롣-iprefix ץϡθˤΣĤΥץΤɤ餫äƽựĤΤǤ뤬</p>
<h4>3.9.6.10. Undocumented ʻޥ</h4>
<p>GCC 2 Ǥ <tt>__VERSION__</tt>, <tt>__SIZE_TYPE__</tt>, <tt>__PTRDIFF_TYPE__</tt>, <tt>__WCHAR_TYPE__</tt> λޥˤĤƤϡɥȤ˵ܤʤ-dM ץǤΤ뤳ȤǤޤǤGCC 3 ǤϥɥȤ˰̣ܤ졢Ūͤ -dM Τ뤳ȤǤ褦ˤʤޤ</p>
<h4>3.9.6.11. Undocumented ʴĶѿ</h4>
<p>GCC 2 ǤϥɥȤ˵ܤΤʤä <tt>SUNPRO_DEPENDENCIES</tt> ȤĶѿˤĤƤϡGCC 3 ǤϥɥȤ˵ܤ褦ˤʤޤʤʤʤΤɬפʤΤϤ狼ʤˡ</p>
<h4>3.9.6.12. ¾</h4>
<p>GCC 3 ǤϼΤ褦 #pragma Ƥޤ</p>
<pre>
#pragma GCC poison
#pragma GCC dependency
#pragma GCC system_header
</pre>
<p>GCC 3.2 ΥǤ⡢Τ poison system_header ȤƤޤ<b>mcpp</b> ǤϤϥݡȤƤޤͤϾʤޤɬޤ괶ʤǤ*1</p>
<p>GCC 3 Ǥ #assert assertion directives ϡֿ侩ʤ (deprecated)פȤޤʤgcc ϥǥեȤ -A ץȯԤ뤬ˡ</p>
<p>ޤGCC 2 Ǥ -traditional ץƱ cpp ǼƤꡢΤ˸Ťͤ C90 λͤߤʻͤȤʤäƤޤGCC 3.2 Ǥϥץץå̾ cpp0 tradcpp0 Ȥʬޤ-traditional ץ gcc ФƤͭǡcpp0 ˤϤޤgcc -traditional ϥץץ tradcpp0 ƤӽФޤtradcpp0 C90 ο traditional ʥץץå˶ᤤΤȤʤäƤޤơtradcpp0 ΤۤϺ塢ʥХνʳϥƥʥʤȤƤޤ</p>
<p>GCC 2 / cpp δ̯ʻͤϤֽƤ褦˸ޤ</p>
<p>:</p>
<p>*1 <b>mcpp</b> V.2.7 GCC-specific-build #pragma GCC system_header ݡȤ</p>
<h3><a name="3.9.7" href="#toc.3.9.7">3.9.7. GCC 3, 4 <b>mcpp</b> Ȥˤ</a></h3>
<p>ʾ˸Ƥ褦ˡGCC 3.2 ΥϾʤȤץץϡglibc 2.1.3 ʤɤ٤Ȥʤ꤭줤ʤΤˤʤäƤޤTraditional ʽϤۤܰݤ졢̣ΤʤץϻȤʤʤäƤƤޤ<br>
ޤGCC 3.2 / cpp0 ΤΤ⡢traditional ʻͤ obsolete ʤΤȤưtoken-based ʸ§ΤˤʤɡGCC 2 / cpp ٤ȳʤͥ줿ΤȤʤäƤޤɥȤ undocumented ʬ˸ޤޤṲ̋¿ޤȤƤɤ˸äƤȻפޤ</p>
<p>GNU ΥƥǤϥƥإåʣǡɤʤäƤΤưפİǤʤ褦ˤʤäƤޤ줬 GNU ΥƥΥȥ֥κװȤʤäƤΤǤϤʤǤ礦</p>
<p>⤦ĻǰʤΤϡץץѥΤ˵ۼƤޤäȤǤΤᡢ<b>mcpp</b> Ȥˤ gcc g++ -no-integrated-cpp ȤץդƸƤӽФɬפޤʣ makefile ¿ makefile 礭ʥե뷲ѥ뤹䡢Υץफ gcc ưŪ˸ƤӽФϡgcc, g++ θƤӽФ shell-script ֤ơΥץưŪղä褦ˤʤФʤޤ</p>
<p>Ūˤϡgcc, g++ ֤Ƥǥ쥯ȥʻ Linux Ǥ <samp>/usr/local/gcc-3.2/bin</samp>ˤ˼Τ褦 script 줾 gcc.sh, g++.sh Ȥ֤̾ޤ</p>
<pre>
#!/bin/sh
/usr/local/gcc-3.2/bin/gcc_proper -no-integrated-cpp "$@"
</pre>
<pre>
#!/bin/sh
/usr/local/gcc-3.2/bin/g++_proper -no-integrated-cpp "$@"
</pre>
<p>ơΥǥ쥯ȥǼΤ褦ˤޤ</p>
<pre>
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++
</pre>
<p>ޤcpp ֤Ƥǥ쥯ȥʻ Linux Ǥ <samp>/usr/local/gcc-3.2/lib/gcc-lib/i686-pc-linux-gnu/3.2</samp>ˤǡGCC 2 ξƱͤˡcpp0 θƤӽФ <b>mcpp</b> ¹Ԥ褦ˤƤޤ<a href="#3.9.5"> 3.9.5</a> ȡˡ*1<br>
Ƥȡgcc g++ ޤ <b>mcpp</b> ƤӽФ졢
θ cc1, cc1plus -fpreprocessed ȤץץѤߤǤ뤳ȤץդƸƤӽФ褦ˤʤޤ</p>
<p>ʤƥɸȰۤʤС GCC ȡ뤷ղŪ include directory ꤬ɬפʤȤޤ<b>mcpp</b> ǤϤ <b>mcpp</b> ΥѥȤ߹Τǡ̾ϴĶѿꤹɬפϤޤ</p>
<p>Ǥ cc1, cc1plus ΥץץʬǤ cpplib Υ <b>mcpp</b> ΤΤ֤ȤǤcpplib cc1, cc1plus ȤŪ interface cpplib Ȥ桼ץȤγŪ interface Ƥ륽ե뤬碌 46KB ⤢ꡢȤƤ֤ԲǽǤɤƤʣ interface ˤɬפΤǤ礦ǰʤȤǤ</p>
<p>:</p>
<p>*1 configure <b>mcpp</b> ȡ뤷ϡ
餬ưŪꤵ롣</p>
<h4>3.9.7.1. GCC 3.3, 3.4-4.1 <b>mcpp</b> Ȥˤ</h4>
<p>ɤ˸äƤ GCC V.3 Ǥ
V.3.3 ̯žƤޤޤV.3.3 V.3.2 ٤ȡΤ褦礭ѤäƤޤ</p>
<ol>
<li>ñΤ cpp0 Ϥʤʤägcc -no-integrated-cpp ϤޤȤ뤬ƤӽФΤ cc1 (cc1plus) Ǥ롣ʤץץǤ⥳ѥǤ cc1 ƤӽФ롣ơץץե cc1 ˥ץץѤǤʤץФϤʲȤˡ<br>
<li>60 Ĥ 70 Ĥ̤ΥޥƤ롣ˤäƥƥإå GCC Ȥδطʣˤʤä<br>
<li>tradcpp ʤʤꡢGCC V.3.2 Ǥ obsolete Ȥ deprecated Ȥ줿Ťͤΰ褷<br>
</ol>
<p>ΤȤơĤεʥѥˤ٤ƤۼȤʤäƤꡢýϤιΤȤƤ⡢ץνϤγȯȤƤ⡢礤˵ΤȤǤ</p>
<p><b>mcpp</b> ΰܿǤϡgcc ɤʥץϤƤ뤫狼ʤȤΤȤǤְäץ⤹٤ƥå̵뤹ΤǤϴޤȤꤢФдְäϤƤ륪ץ̵뤹褦ˤޤʳΥץϤȥ顼ˤʤϤǤ<br>
ѹǤ⡢<b>mcpp</b> νΥץˤϻȤʤʤäΤޤ-E ץѻߤ-m ץ -e ˡ-c -@compat ѹޤ<br>
ޤGCC V.3.2 Ǥ cpp0 θƤӽФ <b>mcpp</b> ֤ФȤ٤ cc1 (cc1plus) θƤӽФ <b>mcpp</b> cc1 (cc1plus) Ȥ˿ʬ뤳ȤɬפˤʤޤΤ shell-script src/set_mcpp.sh Ѱդޤ̤λޥϣģбƤ櫓ˤϤʤΤǡGCC -dM ץνϤ礷Ѥ褦ˤޤ*1, *2, *3</p>
<p>GCC V.3.4 ǤϤˡmulti-byte character Ϥ٤ UTF-8 ѴƤ褦ѤޤɥȤˤȡŪˤϼΤ褦ˤʤäƤޤ*4</p>
<ol>
<li>ץץκǽΥեǡmulti-byte character UTF-8 Ѵ롣<br>
<li>Ѵˤ libiconv δؿȤäơiconv бƤ encoding Ϥ٤ƻȤ롣<br>
<li>ե encoding ꤹˤ -finput-charset=<encoding> ץȤʼºݤˤϡꤷʤ UTF-8 ˤѴʤˡ<br>
<li>ѥ encoding ϥǥեȤǤ UTF-8 Ǥ뤬-fexec-charset=<encoding> ץ¾ encoding ꤹ뤳ȤǤ롣*5<br>
</ol>
<p>ֹݲפȸ Unicode б뤳ȤȹͤĬȤ˼ºݤ multi-byte character Ȥʤο͡δ֤ˤޤĬ GCC ˤڤǤޤä褦Ǥ</p>
<p>⡢ͤޤʬ˼Ƥޤºݤ˻ȤäƤߤȡΤ褦ˤʤޤ</p>
<ol>
<li>EUC-JP, GB2312, KSC-5601, Big5 finput-charset ץꤹ UTF-8 Ѵ졢ꤷʤФΤޤ̤롣<br>
<li>fexec-charset ץ V.3.4, 4.0 ǤϸʤV.4.1 ǤϸEUC-JP, GB2312, KSC-5601, Big5 ˤĤƤư롣<br>
<li>ISO2022-JP V.3.4, 4.0 ǤϥץץǤʤäV.4.1 ǤϤǤ롣fexec-charset ץ ISO2022-JP ᤹ȤǸư롣<br>
<li>ɤΥСǤ Shift-JIS ϥץץǺ𤷤Ƥޤ<br>
</ol>
<p><b>mcpp</b> -e <encoding> ץ encoding ꤷޤGCC-specific-build ǤϡBIG5, shift-JIS, ISO2022-JP Ǥ <backslash> ȰפͤΥХȤľ <backslash> ƥѥη٤䤤ޤUTF-8 ˤѴ encoding ΤޤϤޤ-finput-charset ץ -e ץƱΤȤưޤϼΤ褦ͳǤ*6, *7</p>
<ol>
<li>SJIS, ISO2022-JP UTF-8 ѴƤޤ cc1 encoding ᤻ʤGCC V.4.1 ǤǤ롣ɤΥС GCC Ǥ⡢Ѵ <backslash> äƤȤΤޤ̤ꡢ̤η̤ˤʤ롣ʤsingle byte character sequence Ǥ뤫Τ褦˰롣<br>
<li>GCC 4.0 ޤǤΥСǤϤɤ encoding UTF-8 鸵 encoding ᤻ʤ<br>
<li>GCC ζᤤλѹԤ<br>
</ol>
<p>:<p>
<p>*1 -dM ץνϤ¾ΥץˤäƾäƤΤǤ롣
⡢λޥȾ undocumented ʤΤǤ롣
ΤᡢƤϤʤʤİǤʤ</p>
<p>*2 MinGW Ǥ symbolic link Ȥʤln -s ȤޥɤϤ뤬
ñ˥ԡΤΤǤ롣ޤMinGW GCC ϤȤ cc1 Ȥ̾ΥեǤäƤ⤽줬 shell-script Ǥȡưݤ롣Τᡢ<b>mcpp</b> GCC-specific-build ǤϡMinGW ˸¤ä cc1.exe Ȥ̾μ¹ԥץʤ cc1plus.exe ˤ⥳ԡˡơ椫 mcpp.exe ޤ GCC cc1.exe ʤ cc1plus.exe ư褦ˤƤ롣</p>
<p>*3 CygWIN / GCC Ǥ -mno-cygwin Ȥץꡢꤹ system include directory ѤꡢGCC λޥѤ롣Τᡢ<b>mcpp</b> CygWIN GCC-specific-build Ǥ V.2.6.1 ϣåȤλޥѰդ褦ˤ</p>
<p>*4 ΤȤ FreeBSD 6.3 ǤϤʤ GCC ΤѴϤޤäưʤlibiconv ϥƤΤǤ뤬
FreeBSD 5.3, 6.2 Ǥ⤽Ǥä</p>
<p>*5 ѴϥץץեǤϤʤѥեǹԤ褦Ǥ롣
-E ץνϤ UTF-8 ΤޤޤǤ롣</p>
<p>*6 <b>mcpp</b> νϤ cc1 Ϥˤ -finput-charset Ϥ -fexec-charset ץդƤϤʤ</p>
<p>*7 <b>mcpp</b> V.2.5 Ǥ GCC V.3.4 ξ <backslash> 䤦ȤƤGCC ưʤΤǤ褦ƤΤǤ롣V.4.1 ˤʤäƤޤȤư֤ˤʤäƤʤΤǡ<b>mcpp</b> V.2.6 Ǥ V.2.4 ޤǤλͤᤷʤGCC V.3.4 ʹߤˤĤƤ V.3.3 ޤǤƱ褦˰</p>
<h3><a name="3.9.8" href="#toc.3.9.8">3.9.8. Linux / glibc 2.4 Υץץ</a></h3>
<p>glibc 2.4 (2006/03) Υѥ뤷ơץץåƤߤޤ
Ϥ GCC 4.1.1 ǡץץå <b>mcpp</b> 2.6.3 ֤ΤǤ
ޥ x86 ϤʤΤǡ¾ CPU ѤΥɤϥåƤޤ</p>
<p>˻䤬å glibc 2.1.3 (2000/02) 飶ǯФäСʤΤǡ礭ѤäȤޤճѤäƤʤȤ¿ޤ
ΤȤƤϡΥСˤĤƻ䤬夲줺ˡष뷹ˤޤ</p>
<h4>3.9.8.1. Ԥޤʸƥ</h4>
<p>Ԥޤʸƥϸʤʤޤ</p>
<h4>3.9.8.2. #include_next, #warning</h4>
<p>Υեˤ #include_next ޤ
ǯȾΥС٤Ƥޤ</p>
<p><samp>
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
</samp></p>
<p>Υե make check ǻȤƥѤΤΤǤˤ #include_next ޤ</p>
<p><samp>sysdeps/i386/i686/tst-stack-align.h</samp></p>
<p>#warning <samp>sysvipc/sys/ipc.h</samp> ˤޤ˥ѥ뤵Ȥϥåפ֥åˤΤǡҤä뤳ȤϤޤ</p>
<h4>3.9.8.3. Ѱޥ</h4>
<p>ΥեˤϲѰޥޤϤ٤ GCC2 θŤͤΥޥǤ
C99 λͤΤΤϤGCC3 ͤΤΤ⸫ޤ</p>
<p><samp>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</samp></p>
<p>ϥƥѤΥ롼Ǥˤ GCC2 ͤβѰޥޤ</p>
<p><samp>localedata/tst-ctype.c,
posix/bug-glob2.c,
posix/tst-gnuglob.c,
stdio-common/bug13.c</samp></p>
<p>ºݤˤΥޥƤӽФȤˤϡѰĤʤʥʤ§ŪʸƤӽФ¿ʤäƤޤ
μ§ŪʥޥƤӽФ 142 ܤΥե˸ޤ
ΤִꥹȤDzѰľ ", ##" Ȥ sequence äƤ ',' 륱ϡ120 ܤΥ˸ޤ<p>
<p>Ѱޥ C99 λͤȤäۤ portable ɤΤǤGCC2 뤤 GCC3 ͤβѰޥ C99 ͤΤΤ˽ľΤϡɬñǤϤޤ
GCC2 뤤 GCC3 ͤǤϼºݤΥޥƤӽФDzѰʤ硢ľΥޤΤǡޥθƤӽФˤäƤ C99 ͤȤϣУбʤǤ
ޥ C99 ͤ˽硢ޤʤǤ褦ˤ뤿ˤϡޥƤӽФΤۤľɬפޤ</p>
<p>glibc 2.1.3 ǤϤޤΥޥοۤ¿ϤʤäΤǡ桼ܤdzΤʤ饨ǥǽ뤳ȤǤޤglibc 2.4 ǤϿ⤽ΥޥθƤӽФĽ꤬ᡢ桼뤳ȤԲǽˤʤޤ</p>
<p>Τᡢ<b>mcpp</b> Ǥ V.2.6.3 GCC-specific-build ˸¤äơGCC3 ͤβѰޥޤ
V.2.7 GCC2 ͤΤΤˤбޤ
GCC2 ͤΤΤ token-based ʸ§ݤΥƤΤǡȤޥ٤ǤϤޤ
GCC2 ͤ GCC3 ͤȣУбƤΤǡޥ GCC3 ͤ˽ľȤưפˤǤޥƤӽФľʤƤ⤹ߤޤ
Ǥ GCC2 ͤǽƤޥϤۤ餫狼䤹ʤޤ*1</p>
<p>GCC2 ͤβѰޥ GCC3 ͤ˽ľˤϡ㤨мΤ褦ʤΤ</p>
<pre>
#define libc_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
</pre>
<p>Τ褦ˤޤ</p>
<pre>
#define libc_hidden_proto(name, ...) hidden_proto (name, ## __VA_ARGS__)
</pre>
<p>ʤѥ <samp>attrs...</samp> <samp>...</samp> ˤִꥹ <samp>attrs</samp> <samp>__VA_ARGS__</samp> ˤޤ</p>
<p>:</p>
<p>*1 GCC2 ͤ GCC3 ͤβѰޥˤĤƤϡ<a href="#3.9.1.6">3.9.1.6</a>, <a href="#3.9.6.3">3.9.6.3</a> ȤΤȡ</p>
<h4>3.9.8.4. ޥƤӽФΥ</h4>
<p>ΤޥƤӽФϤ¿488 ܤΥե˸ޤ
ΥС٤Ƥޤ
C99 ǥǧ줿ȤƶƤΤǤ礦</p>
<p>Ȥ <samp>math/bits/mathcalls.h</samp> ˤ 79 ĤΥޥƤӽФޤ
ȤۤƱͤǤ</p>
<h4>3.9.8.5. Function-like ޥִ̾ object-like ޥ</h4>
<p>Υեˤ function-like ޥִ̾ object-like ޥޤ</p>
<p><samp>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</samp></p>
<p><samp>elf/link.h</samp> ˤϼΤ褦 function-like ޥִ̾ function-like ޥޤ</p>
<pre>
#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 */
</pre>
<p>嵭Τ褦ʥޥȡ</p>
<pre>
&& ELFW(ST_TYPE) (sym->st_info) != STT_TLS /* elf/do-lookup.h:81 */
</pre>
<p>ΥޥƤӽФǤ <samp><tt>ELFW</tt>(ST_TYPE)</samp> Τ褦ŸƤޤ</p>
<pre>
ELFW(ST_TYPE)
_ElfW(ELF, __ELF_NATIVE_CLASS, ST_TYPE)
_ElfW_1(ELF, 32, _ST_TYPE)
ELF32_ST_TYPE
</pre>
<p>ơ<tt>ELF32_ST_TYPE</tt> <samp>(sym->st_info)</samp> <samp>((sym->st_info) & 0xf)</samp> Ÿޤ
ʤ<samp><tt>_ElfW_1</tt>(ELF, 32, _ST_TYPE)</samp> Ȥ function-like macro θƤӽФ <tt>ELF32_ST_TYPE</tt> Ȥ̤ function-like macro ̾ŸΤǤ</p>
<p>ϣĤΥޥΤ褦˽ơ</p>
<pre>
#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)
</pre>
<p>Τ褦˸ƤӽФۤ狼䤹ʤޤ
ϤĹ˸뤫⤷ޤؿƤӽФǥȤƹͤСΤۤǤ礦</p>
<pre>
&& ELFW(ST_TYPE, sym->st_info) != STT_TLS
</pre>
<h4><a name="3.9.8.6">3.9.8.6. 'defined' Ÿޥ</a></h4>
<p>Υեˤϡִꥹ 'defined' ȤȡνФƤޥޤ*1</p>
<p><samp>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</samp></p>
<p>ΥեǤϤΥޥ #if ԤǻȤƤޤ
ޤ嵭Υե뼫ȤǤȤƤ礬ޤ</p>
<p><samp>elf/dl-conflict.c,
elf/dl-runtime.c,
elf/dynamic-link.h</samp></p>
<p>glibc 2.1.3 <samp>malloc/malloc.c</samp> ˤ <tt>HAVE_MREMAP</tt> ȤϤִꥹȤ 'defined' ФƤޥޤglibc 2.4 ǤϤ portable ʷľƤޤ
¾ΥˤμΥޥƤޤޤ</p>
<p>#if Ԥִꥹ 'defined' ФƤޥƤӽФη̤ϵʤǤ undefined ǤꡢŪ˽Τ GCC ξͤǤ
¾νϤǤǤ portable ʥˤ뤿ˤϡΥޥ뤳ȤɬפǤ
ˤϥޥƤӽФʤФʤޤ*2</p>
<p>ν¿ξϡ<a href="#3.9.4.6">3.9.4.6</a> ˤˡǤǤޤ
ˤϤǤбǤʤΤ⤢ޤ
<samp>'defined MACRO'</samp> ɾߥˤäưۤʤǤ
㤨С<samp>sysdeps/i386/dl-machine.h</samp> ˤϼΤ褦ʥޥꡢΥޥ¾Υե #if ǻȤƤޤ</p>
<pre>
#define ELF_MACHINE_NO_RELA defined RTLD_BOOTSTRAP
</pre>
<p>ΤǤϡޤޤ</p>
<pre>
#if defined RTLD_BOOTSTRAP
#define ELF_MACHINE_NO_RELA 1
#endif
</pre>
<p><samp>RTLD_BOOTSTRAP</samp> Ȥޥ <samp>elf/rtld.c</samp> ޤ줬 <samp>dl-machine.h</samp> include ȸ include 礬ꡢˤä <samp>'defined RTLD_BOOTSTRAP'</samp> η̤äƤΤǤ
portable ˽ľˤϡ<tt>ELF_MACHINE_NO_RELA</tt> ȤޥȤȤơΤ褦 #if Ԥ</p>
<pre>
#if ELF_MACHINE_NO_RELA
</pre>
<p>Τ褦ˤޤ
<tt>ELF_MACHINE_NO_RELA</tt> #if ԤǤȤƤʤ̵ѤʥޥʤΤǤ</p>
<pre>
#if defined RTLD_BOOTSTRAP
</pre>
<p>glibc ǤϼºݤˤνˤʤäƤȤ¿ΤǤ줬 <tt>ELF_MACHINE_NO_RELA</tt> Ȥ undefined ʽȺߤƤޤ</p>
<p>:</p>
<p>*1 Linux Ǥ /usr/include/_G_config.h glibc sysdeps/gnu/_G_config.h ȡ뤵줿ΤʤΤǡˤ⼡Τ褦Ʊޥ롣</p>
<pre>
#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)
</pre>
<p>ϤƤ٤Ǥ롣</p>
<pre>
#if defined (_STATBUF_ST_BLKSIZE)
#define _G_HAVE_ST_BLKSIZE 1
#endif
</pre>
<p>*2 <b>mcpp</b> V.2.7 GCC-specific-build <i>STD</i> ⡼ɤ˸¤äơ#if ԤΥޥ˽ФƤ 'defined' ȡ GCC Ʊͤ˽褦ˤ
bug-to-bug нƤˤ٤ǤϤʤ</p>
<h4>3.9.8.7. .S եΡ֥ץץ</h4>
<p>*.S ե CPU ȤѰդƤΤǤ¿1000 ܤޤ⤢ޤx86 CPU ǻȤΤϤΤΰˡ</p>
<p>*.S եϥ֥饽 C #if, #include directive 䥳ȤޥߤΤǤ֥饽 C token sequence ηƤʤΤǡ C ץץåǽ뤳Ȥˤ̵ޤ
ץץå C ǻȤʤ %, $ ʸ⤽Τޤ̤space ̵ͭ⸶§ȤƤΤޤްݻʤФʤޤ
C Ǥϥ顼ˤʤȤ顼ˤˤΤޤ̤褦ˡʸˡå˴¤ʤФʤޤ
ơΰ #if ޥϽΥ顼å⤷ʤФʤʤΤǤ
äʤȤǤ
λͤˤϤ٤ŪʺϲʤGCC local ʡ¿ undocumented ʡ˻ͤȤäƤˤޤ</p>
<p>㤨 <samp>nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S</samp> ˤϼΤ褦ʬޤ</p>
<pre>
.byte 8 # Return address register
# column.
#ifdef SHARED
.uleb128 7 # Augmentation value length.
.byte 0x9b # Personality: DW_EH_PE_pcrel
# + DW_EH_PE_sdata4
</pre>
<p><samp>'#ifdef SHARED'</samp> C directive ǤƹԤθȾ # ǻϤޤʬϥȤΤĤΤ褦Ǥ
<samp>'# column.'</samp> Τ褦˹Ԥκǽ non-white-space-character # ξϡ̵ directive ȹʸ塢̤Ĥޤ
<samp>'# + DW_EH_PE_sdata4'</samp> ˻äƤ C ǤϹʸ顼ˤʤΤǤ<br>
¾ΥեˤϼΤ褦⤢ޤ
'\'' Ȥʸ C Ǥ character constant ξü˻ȤΤʤΤǡ줬ñȤǸ tokenization Υ顼ˤʤޤ</p>
<pre>
movl 12(%esp), %eax # that `fixup' takes its parameters in regs.
</pre>
<p>ˡ嵭 pthread_cond_wait.S ˤϼΤ褦ʬޤϥޥθƤӽФǤ</p>
<pre>
versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
GLIBC_2_3_2)
</pre>
<p>ΥޥϼΤ褦ˤʤäƤޤ</p>
<pre>
# 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 */
</pre>
<p>ˤäơΥޥϤŸ̤ˤʤ뤳ȤԤƤޤ</p>
<pre>
.symver __pthread_cond_wait, pthread_cond_wait@@GLIBC_2.3.2
</pre>
<p> <tt>_default_symbol_version</tt> Ǥ
'@' Ȥʸ C token (pp-token) ˤϤޤ
ơ ## 黻ҤϢ뤷 <samp>pthread_cond_wait@@GLIBC_2.3.2</samp> Ȥ token ⤢ޤ
Ϣˤ illegal token ޤ
Υޥ C ## 黻ҤȤäƤޤʸˡ C ȤϳݤΥ줿ΤǤ</p>
<p>֥饽ˤĤƥץץΤ褦ʤȤΤǤСϤꥢ֥ѤΥޥץåȤ٤Ǥ礦
C ץץåȤΤǤС*.S ǤϤʤ *.c Ȥơ֥ѤΥɤʸƥ asm() ʤ __asm__() ʤδؿϤ٤Ǥ礦
<samp>libc-symbols.h</samp> ˤϼΤ褦̥СΥޥѰդƤơ*.c ǤФ餬Ȥޤ
ϵʽ C ץץåʤǤޤ</p>
<pre>
# define _default_symbol_version(real, name, version) \
__asm__ (".symver " #real "," #name "@@" #version)
</pre>
<p>glibc ˤ asm() __asm()__ Ȥä *.c, *.h ե¿ޤޤȾ§Ū *.S եȤʤäƤޤ</p>
<p>ɤƤ⥢֥饽 C ץץåǽΤǤСƥȵȤƤ # ǤϤʤ /* */ // Ȥ٤Ǥ
ºݡglibc Ǥ /* */ // ȤäƤ륽¿ΤǤ# ȤäƤ륽⤤Ĥޤ</p>
<p>Ȥϸglibc 2.4 Ǥ *.S ե뤬ޤˤ¿ 2.1.3 Τ C ʸˡ̵뤷¿ʤäƤΤǡ<b>mcpp</b> Ǥ V.2.6.3 lang-asm ⡼ɤǤʸˡå˴¤§Ǥ褦ˤޤ</p>
<h4>3.9.8.8. versions.awk, rpcgen -dM ץλͤ</h4>
<p><a href="#3.9.4.8">3.9.4.8</a> ˽ <samp>stdlib/isomac.c</samp> ѤäƤޤ</p>
<p>rpcgen ѤäƤޤ</p>
<p> glibc 2.4 ˤ <samp>scripts/versions.awk</samp> Ȥե뤬ޤϥץץåνϤιƬ space οˤĤơGCC ǤѤʤǤޤ
<b>mcpp</b> ¾ΥץץåȤˤϡΥեΤ褦˽ʤФʤޤ</p>
<pre>
$ 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)
</pre>
<h4>3.9.8.9. -include, -isystem, -I- ץ</h4>
<p><samp>-isystem, -I-</samp> ץϻȤƤޤ</p>
<p><samp>-include</samp> ץ϶üˤ˻ȤƤޤ
<samp>include/libc-symbols.h</samp> Ȥإåե뤬 <samp>-include</samp> ץˤä 7000 include ΤǤ
Υץϡϥ <samp>#include</samp> ǽ٤Ԥ makefile ˲ФƻȤΤΤǤ
ԴˤΤǡ褷ɤȤǤϤޤ</p>
<h4>3.9.8.10. Undocumented ʻޥ</h4>
<p> glibc ǤϤʤGCC Ǥ
GCC 2 ǤϤĤνפʻޥ undocumented Ǥξ֤ GCC 3 Dzäޤ
¾ GCC 3.3 ϻޥüΤȼäơundocumented ʤΤƤޤޤ</p>
<h4>3.9.8.11. ¾</h4>
<p><samp>debug/tst-chk1.c</samp> ˤϴ̯ʬꡢΤ褦˽ʤ GCC ʳΥץץåǤϰտ̤˽ޤ</p>
<pre>
$ 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);
</pre>
<p>θϲůʤ˸ޤ¤ϤǤ printf() ޥȤƤΤǤ
Τᡢ<samp>#ifdef</samp> Υǥ쥯ƥֹԤ餷Τ̾ϥޥΰȤư̤ˤʤޤ
ޥƤӽФǤʤХǥ쥯ƥֹԤȤʤΤ˸줿η̤ϡʤǤ undefined Ǥ
ǥ쥯ƥ֤νȥޥŸƱ translation phase ǹԤΤǡǥ쥯ƥ֤˽ΤϡGCC ξͤǤ
⤽⡢<samp>#ifdef __USE_FORTIFY_LEVEL</samp> νˤޥνɬפʤΤǡιԤ˽Ƥ printf() ޥŸȤΤϡŪʽǤ
C ץץȤΤϡƬ sequentially ˽Ƥ椯٤ΤʤΤǤ</p>
<p>glibc configure Ȥˤ⡢GCC ü help message Ȥʬޤ
Help <samp>"-z relro"</samp> ȤץФƤ뤫ɤΤǤ
ץץå <b>mcpp</b> ȤäƤȡϴԤ̤ˤϤʤޤ
Ǥ glibc ΥѥȥƥȤ˹Ԥޤ</p>
<p>ʤGCC 3.2 ޤǤ gcc ư̵Ѥ -A ץȥǥեȤղäޤGCC 3.3 Ϥʤʤޤ</p>
<h4>3.9.8.12. ޤ GCC ¸</h4>
<p>glibc 2.4 ǯ glibc 2.1.3 ٤ȡ䤬ĤƼ夲 portability ϤۤȤɲƤ餺դ portability 礤ƤƤ뤳Ȥ狼ޤ</p>
<p>줿ΤϡԤޤʸƥ뤬ʤʤäȡ<samp>-isystem, -I-</samp> ץȤʤʤäȡGCC ¦ <samp>-A</samp> ץȤʤʤäȤ餤Ǥ</p>
<p>#include_nextGCC2 ͤβѰޥǤѰ 0 ĤΥޥƤӽФִꥹȤ 'defined' Τޥ*.S ե롢<samp>-include</samp> ץޤޥƤӽФΥޤ
Portable ʥ˽ľȤñˤϤǤʤStandard C ȣУбʤΤ⡢äʤȤǤ</p>
<p>Ϥ٤ GCC local ʻͤؤΰ¸ˤΤǤ
GCC undocumented ư˰¸Ƥʬ¿ޤ
絬ϤʥեȥǤʬȯȡ¿Υե뤬߹礦ᡢˤʤꡢǯǤƱѾƤ椯Ȥˤʤ꤬Ǥ
ơ⤽˹碌ƽ뤳Ȥˤʤޤ
Ѱޥ GCC2 ͤΤΤǡC99 λͤΤΤϤ GCC3 ͤΤΤȤƤʤȤϡδطüŪɽƤޤ
ޤäΥ unportable ʬľƤ⡢¾Υ˸Ť˸¿ʤʤޤ</p>
<p>դ GCC Τۤͤѹ礭ʱƶ⤿餹ΤǡñˤϤǤʤʤäƤޤޤ
ɤλפڤäɬפȻפޤ</p>
<h3><a name="3.9.9" href="#toc.3.9.9">3.9.9. Linux stddef.h, limits.h, #include_next </a></h3>
<p>Linux Ǥ GCC ƥॳѥǤ˥饤֥꤬ glibc Ǥ뤿ᡢƥإåˤ GCC ꤷƤʤʬȤɤˤޤ
줬 compiler-independent-build <b>mcpp</b> Τ褦¾νϤȤξ㳲ˤʤޤ
Ǥ <samp>stddef.h</samp> ΤĤɸإåե뤬 GCC version-specific include directory ˤä <samp>/usr/include</samp> ¸ߤʤȤΤϤʷ٤Ǥꡢ<b>mcpp</b> ˤȤäƤкɬפǤ
ΥǤϤƤޤ</p>
<p>Linux Ǥ GCC ΥСȤ㤨 <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include</samp> Ȥä include directory ƥɲäޤˤ stddef.h, limits.h ϴ̯ʤΤǤ
CygWIN ǤƱǤ
Mac OS X ˤ⾯꤬ޤ</p>
<h4>3.9.9.1. /usr/include ɸإåʤ</h4>
<p>ޤC ɸإåեΤ <samp>float.h, iso646.h, stdarg.h, stdbool.h, stddef.h</samp> ΣĤ Linux ǤϤ GCC Υǥ쥯ȥˤꡢ<samp>/usr/include</samp> ˤ <samp>/usr/local/include</samp> ˤ¸ߤޤLinux ΥƥإåϽϤ GCC Ǥ GCC ͭ include directory ȤGCC Ǥʤ <samp>/usr/include</samp> Ȥ褦˰Ƥ褦Ǥstddef.h ʤΤǤϺޤ</p>
<p>ȤäơGCC ʳνϤ GCC ͭ include directory Ȥ褦ˤȡ٤ϤΥǥ쥯ȥˤ limits.h GCC ͭγĥͤǤ #include_next ˤ֤ĤޤȤ #include_next Ƥ⡢٤ limits.h ν꤬ޤȤ GCC V.3.3 ʹߤǤ limits.h ٤¾塢ϤǻȤ˽ʤȤ褦ˤʤäᡢ¾νϤǤ limits.h ȤʤȤ̤ˤʤäƤޤޤ</p>
<p>ޤGCC Ȥ⡢ limits.h #include_next ǤԲIJưޤ</p>
<p>Ȥ䤳ΤǤʤǯΤ֤ƤʤΤǡˤޤȤƤޤ</p>
<p>ʤ compiler-independent-build <b>mcpp</b> ˤʤΤǤ
GCC-specific-build Ǥȯޤ</p>
<h4>3.9.9.2. #include_next δ̯ʽ</h4>
<p>GCC Ǥ include directory ̾ϼΤ褦ˤʤޤ</p>
<pre>
/usr/local/include
/usr/lib/gcc-lib/SYSTEM/VERSION/include
/usr/include
</pre>
<p>Υǥ쥯ȥ꤬夫鲼إޤ
Σܤ GCC ͭ include directory Ǥ SYSTEM 㤨 i386-vine-linux, i386-redhat-linuxVERSION 3.3.2, 3.4.3 ȤʤޤGCC ̤ΥС <samp>/usr/local</samp> ɲåȡ뤷Ϥ <samp>/usr/lib/gcc-lib</samp> <samp>/usr/local/lib/gcc</samp> ȤʤޤC++ Ǥ <samp>/usr/local/include</samp> ˤˤĤΥǥ쥯ȥ꤬äޤGCC V.3.*, 4.* ǤϼΤΤǤ</p>
<pre>
/usr/include/c++/VERSION
/usr/include/c++/VERSION/SYSTEM
/usr/include/c++/VERSION/backward
</pre>
<p>Υǥ쥯ȥ̾ GCC ͭΤΤ˸ޤC++ ɸǥ쥯ȥϤۤ¸ߤʤΤǡ¾νϤ <samp>/usr/include/c++/VERSION</samp> ȤޤGCC V.2.95 Ǥ C++ include directory ϼΤΤǤ</p>
<pre>
/usr/include/g++-3
</pre>
<p> -I ץĶѿǻꤵ줿ǥ쥯ȥ꤬ΥꥹȤɲäޤ</p>
<p>ʲǤ狼䤹뤿 GCC V.3.3 ʹߤǤ C limits.h ä¤ޤǤ <tt>LONG_MAX</tt> ˤȤޤlimits.h <samp>/usr/include</samp> GCC ѥǥ쥯ȥΣĽˤޤ</p>
<pre>
#include <limits.h>
</pre>
<p>ιԤ GCC <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> include ޤȡΥեƬ</p>
<pre>
#ifndef _GCC_LIMITS_H_
#define _GCC_LIMITS_H_
#ifndef _LIBC_LIMITS_H_
#include "syslimits.h"
#endif
</pre>
<p>ȤʤäƤΤǡ<samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h</samp> include ޤΥեϼΤ褦ûΤǤ</p>
<pre>
#define _GCC_NEXT_LIMITS_H
#include_next <limits.h>
#undef _GCC_NEXT_LIMITS_H
</pre>
<p>ơ limits.h Ƥ include ޤ#include_next ʤΤ <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include</samp> åפ <samp>/usr/include</samp> ϤǤGCC cpp.info ˤϼΤ褦˽Ƥޤ</p>
<blockquote>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.</blockquote>
<p>Ȥ GCC Ϥʤ <samp>/usr/include/limits.h</samp> ǤϤʤ <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> ⤦ include Ƥޤޤ<br>
٤ <tt>_GCC_LIMITS_H_</tt> Ƥ֤ʤΤ</p>
<pre>
#ifndef _GCC_LIMITS_H_
</pre>
<p>ʲΥ֥åϥåפ졢Υ֥åɾޤ</p>
<pre>
#else
#ifdef _GCC_NEXT_LIMITS_H
#include_next <limits.h>
#endif
#endif
</pre>
<p>ޤƤ
<samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h</samp> ˤäΤȤޤäƱ #include_next <limits.h> ȤԤǤޤ <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> ʤʬȤ include ΤȻפȡ٤ GCC <samp>/usr/include/limits.h</samp> include ΤǤGCC #include_next ưϰˤ狼ޤ</p>
<p><samp>/usr/include/limits.h</samp> Ǥ <features.h> include ޤޤιԤǻϤޤ֥åޤ</p>
<pre>
#if !defined __GNUC__ || __GNUC__ < 2
</pre>
<p>Υ֥åǤ <bits/wordsize.h> include ǡwordsize 32 ӥåȤǤ뤫 64 ӥåȤǤ뤫˱ƵʤᤵƤƼ褦ˤʤäƤޤȤ 32 ӥåȤǤ <tt>LONG_MAX</tt> ϼΤ褦ޤ</p>
<pre>
#define LONG_MAX 2147483647L
</pre>
<p>GCC ǤϤΥ֥ååפޤơΥե뤬ꡢinclude <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> ޤΥե⤳ǣܤ include ꡢ<samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h</samp> ꡢΥե⤳ǽä <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/limits.h</samp> κǽ include ޤΥեϾ嵭ʬΤȤ˳Ƽޤ<tt>LONG_MAX</tt> ˤĤƤϼΤ褦ˤʤäƤޤ</p>
<pre>
#undef LONG_MAX
#define LONG_MAX __LONG_MAX__
</pre>
<p>ǤΥե⽪ޤ</p>
<pre>
#include <limits.h>
</pre>
<p>νϤǤ٤ƽǤ
ɡ<tt>LONG_MAX</tt> <tt>__LONG_MAX__</tt> ƥޥʤΤǤ<tt>__LONG_MAX__</tt> ȤϤäʤΤǤ礦¤ GCC V.3.3 ʹߤǤ <tt>__LONG_MAX__</tt> 䤽¾¿ΥޥƤΤǤ32 ӥåȥƥǤ <tt>__LONG_MAX__</tt> 2147483647L ȻƤޤ<tt>LONG_MAX</tt> ʳεʤᤵƤƼޥˤĤƤ⡢줿ޥƤΤǡƱۤǤʤ顢Τ䤳إåե #include_next νϤäΤʤΤǤ礦</p>
<p>#include_next ư GCC V.2.95.3, V.3.2, V.3.4, V.4.0, V.4.1 Ǥ V.3.3 ƱǤʤ</p>
<pre>
#include_next <limits.h>
</pre>
<p> <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h</samp> <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> include 졢ˤƱ</p>
<pre>
#include_next <limits.h>
</pre>
<p> <samp>/usr/include/limits.h</samp> include ޤ</p>
<pre>
#include <limits.h>
</pre>
<p>Ǥ
<samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> include 뤳ȤˤʤޤΥե include Ƥ̤ѤޤǤꡢͤưäƤꡢưӤƤޤΥեμΥ֥åϥʬǤ</p>
<pre>
#else
#ifdef _GCC_NEXT_LIMITS_H
#include_next <limits.h>
#endif
</pre>
<h4>3.9.9.3. GCC ǤʤɸإåȤʤ</h4>
<p>Ǥϼ GCC ʳνϤ Linux ΥƥإåȤȤɤʤǤ礦 GCC ͭ include directory Ȥʤȡstddef.h Ĥޤʤ GCC include directory ȤȤɤʤǤ礦 stddef.h ϸĤޤ٤ limits.h ʤޤ</p>
<pre>
#include <limits.h>
</pre>
<p>ιԤǥץץå <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> include ޤ <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/syslimits.h</samp> include ޤơ</p>
<pre>
#include_next <limits.h>
</pre>
<p>ǥ顼ˤʤޤ</p>
<p>Ǥϡץץå #include_next
ɤʤǤ礦 #include_next ̤˼ƤС <samp>/usr/include/limits.h</samp> include ޤơ嵭</p>
<pre>
#if !defined __GNUC__ || __GNUC__ < 2
</pre>
<p>ʲΥ֥å졢<tt>LONG_MAX</tt> Τ褦졢¾ΥޥŬڤޤ</p>
<pre>
#define LONG_MAX 2147483647L
</pre>
<p>ơinclude <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/syslimits.h</samp> ꡢΥե뤬ä <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/limits.h</samp> ޤȡ</p>
<pre>
#undef LONG_MAX
#define LONG_MAX __LONG_MAX__
</pre>
<p>Ǥä줿ޥϤ٤Ƥ˻ˤ <samp>__LONG_MAX__</samp> Ȥ̤̾ˤʤäƤޤΤǤ</p>
<p>GCC V.3.2 ޤǤʤ顢Ǥޤ</p>
<pre>
#define __LONG_MAX__ 2147483647L
</pre>
<p>ȤԤäΤǡ
˻ˤƤ⤦١ľޤϥʽǤ̤ΤǻȤȤǤޤV.3.3 ʹߤΥإåեǤϤ٤Ƥϫ˽ޤ</p>
<h4>3.9.9.4. ̤к</h4>
<p>ʾޤȤȡϼˤޤ*1, *2, *3, *4</p>
<ol>
<li>Linux Υƥإå
GCC Ѥˤʤˤ <samp>/usr/include</samp> <samp>float.h, iso646.h, stdarg.h, stdbool.h, stddef.h</samp> ɬפǤ뤬줬ʤ<br>
<li>C++ ɸ include directory GCC ΥС¸ˤʤˤϡ<samp>/usr/include/c++/VERSION</samp> ǤϤʤ <samp>/usr/include/c++</samp> ȤäƤ餤ΤǤ롣<samp>/usr/include/c++/VERSION/*</samp> GCC ͭΤΤ˸¤٤Ǥ롣
FreeBSD, Linux, Mac OS X ǤϤ٤ C++ standard library GCC libstdc++ ʤΤǡн褷ˤȤǤ뤬<br>
<li>GCC #include_next ưϻͤȰۤʤäƤꡢİʤ<br>
<li>GCC <limits.h> ޥ¾弫ǻΤǤϡ䤳إåեν̣ʤ<samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/limits.h</samp> Ǥ٤Ƥ #undef ΤǤϤʤǤ롣ʤȤ Linux CygWIN Ǥ limits.h ĤʬɬפϤʤϤǤ롣Υǥ쥯ȥΥإåե GCC ȡ뤹˼ưΤʤΤǡ٤ξĹϤʤǤˤƤ⥷ƥࡦإåȤƥȡ뤹ˤϱ롣<br>
</ol>
<p>κˤΤϥƥإåιβʣǤơ#include_next Ȥĥǥ쥯ƥ֤ؤƤޤΥǥ쥯ƥ֤ӤϤ¤ƤꡢGCC glibc ΥѥȥȡǻȤƤΤΡȡ뤵줿ƥإåǤ limits.h ˤǤ limits.h ν𤷤ƤΤǤϡ¸ͳޤ</p>
<p>ơLinux CygWIN <b>mcpp</b> compiler-independent ǤǤϰʾн褹뤿ᡢȤꤢϼΤ褦ꤹɬפޤCompiler-independent ǤǤϺ뤿ᡢ#include_next ϼޤGCC ͭ include directory Ȥ߹ߤޤ</p>
<ol>
<li><samp>/usr/include/stddef.h</samp> <samp>/usr/lib/gcc-lib/SYSTEM/VERSION/include/stddef.h</samp> ؤΥȤƺƤʣ GCC ΥСȡ뤵Ƥ⤽Τɤ줫˥ƤСLinux, CygWIN compiler-independent ǻȤʬˤʤȻפ롣 GCC ˤ⡢GCC Ǥ <b>mcpp</b> ˤⰭƶͿʤstdarg.h ƱͤǤ롣ޥ GCC Ȥ߹ߴؿŸ뤬ñ˥ץץʤ餽Ǥ⤹ࡣ<br>
<li>iso646.h, stdbool.h ϤñʤΤǤꡢϤ䥷ƥ˰¸ΤǤϤʤΤǡGCC Τɤ줫ΥСΤΤ <samp>/usr/include</samp> ˥ԡ뤫ưФࡣlimits.h GCC ʳνϤǤ <samp>/usr/include</samp> ΤΤǽʬǤ롣<br>
<li>float.h <tt>DBL_MAX_EXP</tt> <samp>__DBL_MAX_EXP__</samp> ȤäƤʤΤǡ¾ΥץץåˤΩʤɬפʤ GCC ʤɤͤ˽*5<br>
<li>GCC ͭ C include directory ϴĶѿǤꤷʤ<br>
<li>Ķѿ CPLUS_INCLUDE <samp>/usr/include/c++/VERSION:/usr/include/c++/VERSION/SYSTEM:/usr/include/c++/VERSION/backward</samp> C++ include directory Ȥꤹ롣<br>
</ol>
<p>GCC Ǥ <b>mcpp</b> Ǥ GCC ͭ include directory Ȥ߹ߡ#include_next ̤˼ߴΤλޥΤǡ̤ɬפޤ</p>
<p>:</p>
<p>*1 3.9.9 εܤ Linux / GCC 2.95.3, 3.2, 3.3.2, 3.4.3, 4.0.2, 4.1.1 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 Ǥ <samp>/usr/include/g++-3</samp> Ǥä3.4.4 Ǥ <samp>/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++</samp> ʲȤʤäƤ롣</p>
<p>*2 FreeBSD 6.2, 6.3 / GCC 3.4.6 Ǥ <samp>/usr/include</samp> C Τ٤ƤɸإåꡢGCC ͭ include directory C Ǥ¸ߤʤ
#include_next ⥷ƥإåˤ̵
C++ include directory <samp>/usr/include/c++/3.4, /usr/include/c++/3.4/backward</samp> GCC ΥС¸ȤʤäƤ롣<br>
FreeBSD Ǥ̥С GCC ȡ뤹 GCC-version-specific include directory 롣
ˤǤإåե¿ϥʤΤǤ롣
<samp>/usr/include</samp> Υإåե뤬뤳ȤϤʤ</p>
<p>*3 Mac OS X Leopard / Apple-GCC 4.0.1 Ǥ GCC version-specific include directory Linux ƱͤǤ롣
#include_next <samp>limits.h</samp> ǻȤƤ롣
<samp>limits.h</samp> ι Linux ƱͤǤ뤬 <samp>syslimits.h</samp> #include_next ϺƤ롣
ޤ<samp>float.h, iso646.h, stdarg.h, stdbool.h, stddef.h</samp> Ϥ٤ <samp>/usr/include</samp> ˤΤǡ<b>mcpp</b> ¦ǤкϤޤɬפʤ
<samp>float.h, stdarg.h</samp> GCC Ѥ Metrowerks (for powerpc) ѤʤΤǡ<b>mcpp</b> ǻȤʤ <samp>stdarg.h</samp> GCC version-specific ʥǥ쥯ȥΥإå include 褦˥ǥ쥯ƥ֤<samp>float.h</samp> ǤϥޥƤʤФʤʤ
<samp>float.h</samp> x86 powerpc ȤǤĤͤۤʤ뤳Ȥա</p>
<p>*4 MinGW / GCC 3.4.* Ǥ include directories Ȥ̤ͥ¾ΥƥȰۤʤ뤬GCC #include_next ưƱǤꡢޤɸ include directory Ǥ <samp>/mingw/include</samp> ˤĤɸإåʤ version-specific-directory ˤ CygWIN ƱǤ롣</p>
<p>*5 GCC ȤƽСΤ褦ˤʤ롣</p>
<pre>
/* 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___ */
</pre>
<br>
<h3><a name="3.9.10" href="#toc.3.9.10">3.9.10. Mac OS X / Apple-GCC ȥƥإå</a></h3>
<p><b>mcpp</b> V.2.7 Mac OS X / GCC ⥵ݡȤ褦ˤʤޤΥƥʲˤޤȤƤޤ
ɮԤϤޤΥƥǤϤۤȤ <b>mcpp</b> firefox 餤ѥ뤷ƤʤΤǡΤʤʬ¿ޤ
Ȥ Objective C / Objective C++ ˤĤƤϤޤäΤޤ</p>
<p> OS GCC ۤȤͣΥѥȤʤäƤ뤿ᡢΥƥإåˤ GCC-local ʻͤؤΰ¸˸ޤ
饤֥꤬ glibc ǤϤʤ٤ Linux ۤɤǤϤޤ
FreeBSD ¿褦Ǥ
⤦ǤϤȻפޤ</p>
<p>ΥƥΤ⤦Ĥħ Apple ˤäƤʤä줿 GCC ƥॳѥȤʤäƤ뤳ȤǤ
Mac OS X Υƥإå Apple ΥǤϡ̤ GCC-local ʻͤष Apple-GCC-local ʻͤؤΰ¸ΤۤΩޤ
Ǥ⡢Intel-Mac PowerPC-Mac ĤΥޥǥݡȤ뤿γĥͤħŪǤ</p>
<p>ʤǼ夲Τ Mac OS X Leopard / Apple-GCC 4.0.1 Ǥ</p>
<h4>3.9.10.1. #include_next, #warning</h4>
<p>GCC-local ʻͤǤ #include_next ¿Ϥޤ<samp>/usr/include/</samp> <samp>float.h, stdarg.h, varargs.h</samp> <samp>/Developer/SDKs/MacOSX10.*.sdk/usr/include/</samp> Ʊ̾ΥեǻȤƤޤ
Ϥ⥳ѥ餬 GCC Ǥ뤫 Metrowerks Ǥ뤫ˤä include إåեʬ뤿ΤΤǤ
GCC <samp>stdarg.h</samp> Ʊ̾Υإåե뤬 #include_next 褦ˤʤäƤޤ<br>
ޤLinux ƱͤˡGCC version-specific include directory Ǥ <samp>limits.h</samp> #include_next ޤ<samp>syslimits.h</samp> ΤΤϺơƤޤ</p>
<p>Υǥ쥯ƥ֤Ϲܤ˻ȤƤޤ<samp>float.h, stdarg.h</samp> GCC Metrowerks ꤷƤʤΤǤ
FreeBSD ƱȤޤ portable ˽ȤϤǤϤǤ*1<br>
ޤ<samp>/usr/include</samp> Υإåե GCC Ѥ #include_next ΤϥʥǤ
GCC ǤϤΥǥ쥯ȥΤۤ version-specific include directory ̤ͥ㤤Ǥ
äơ #include_next Ϸ褷Ƽ¹Ԥ뤳ȤϤޤ</p>
<p>#warning <samp>/usr/include/</samp> <samp>objc/, wx-2.8/wx/</samp> Υǥ쥯ȥ䤽б <samp>/Developer/SDKs/MacOSX*.sdk/usr/include/</samp> Υǥ쥯ȥ˻ޤ
¿ obsolete ʤ deprecated ʻȤե˴ؤ륦˥Τ褦Ǥ<br>
<samp>/usr/include/c++/VERSION/backward/</samp> Ӥб <samp>/Developer/SDKs/MacOSX*.sdk/</samp> <samp>backward_warning.h</samp> ϤϤ deprecated ʥإåȤʤȤ #warning ¹Ԥ뤿ΥեǤΥǥ쥯ȥΥإåեϤ٤ƤΥե include 褦ˤʤäƤޤ
Linux FreeBSD ƱǤ</p>
<p>:</p>
<p>*1 <b>mcpp</b> compiler-independent-build ǤΥإåȤˡˤĤƤϡ3.9.9.4 Ӥ 3 ȡ</p>
<h4>3.9.10.2. 'defined' Ÿޥ</h4>
<p><samp>/usr/include/sys/cdefs.h</samp> Ӥб <samp>/Developer/SDKs/MacOSX*.sdk/</samp> Ʊ̾ΥإåեˤϡΤ褦ʥޥޤ</p>
<pre>
#define __DARWIN_NO_LONG_LONG (defined(__STRICT_ANSI__) \
&& (__STDC_VERSION__-0 < 199901L) \
&& !defined(__GNUG__))
</pre>
<p>ơΥޥ <samp>stdlib.h</samp> ǼΤ褦˻ȤƤޤ</p>
<pre>
#if __DARWIN_NO_LONG_LONG
</pre>
<p>ΥޥϼΤ褦٤Ǥ*1</p>
<pre>
#if defined(__STRICT_ANSI__) \
&& (__STDC_VERSION__-0 < 199901L) \
&& !defined(__GNUG__)
#define __DARWIN_NO_LONG_LONG 1
#endif
</pre>
<p>:</p>
<p>*1 ͳ <a href="#3.9.4.6">3.9.4.6</a>, <a href="#3.9.8.6">3.9.8.6</a> ȡ</p>
<h4>3.9.10.3. #endif ԤΥȡ</h4>
<p><samp>/System/Library/Frameworks/Kerberos.framework/Headers</samp> <samp>gssapi.h, krb5.h, profile.h</samp> ˤϼΤ褦ʴ #endif Ԥޤ</p>
<pre>
#endif \* __KERBEROS5__ */
</pre>
<p> <samp>\* __KERBEROS5__ */</samp> ȤΤϥȤΤ褦Ǥʤ虜虜ʽȯΤ˶줷ߤޤ
¾Υƥ GCC ǤϤˤϥ˥ФޤApple-GCC ǤϤȤ <samp>-pedantic</samp> ΥץդƤ⥦˥ϽФޤ
Apple-GCC ǤϼνˤĤƤ⥦˥Фޤ
C90 δФޤˤҤäƤޤ</p>
<pre>
#endif __KERBEROS5__
</pre>
<h4>3.9.10.4. ޥν</h4>
<p>Τ褦üʥޥλȤϡglibc Υ Linux ΥƥإåʤɤǤФиΤǤ firefox 3.0b3pre Υѥ뤷¤Ǥϡ include Mac OS X Υƥإåˤϸޤ</p>
<ul>
<li>GCC ͤβѰޥ<br>
C99 λͤβѰޥϥƥإåǤϵ˻ȤƤޤGCC ͤΤΤϸޤ
<li>ޥƤӽФΥ
<li>Function-like ޥִ̾ object-like ޥ
</ul>
<h4>3.9.10.5. Apple-GCC ȼ</h4>
<p>Apple-GCC ˤϰ̤ GCC ȰۤʤȼλͤĤޤ</p>
<ul>
<li><p>Intel-Mac PowerPC-Mac ΥХʥĤΥޥ뤿Τ</p>
<p>Mac OS X ˤ x86 Ѥ ppc ѤΥѥ餬ȡ뤵ޤϥͥƥ֥ѥ顢¾ϥѥˡ
<samp>-arch</samp> ȤȼΥץꡢ<samp>-arch i386 -arch ppc</samp> Ȥդʣ CPU ꤹȡgcc βƤӽФơ줾 CPU ѤΥХʥ꤬졢ˤĤ˥Хɥ뤷 universal binary ȤΤޤ
ޤ<samp>-mmacosx-version-min=</samp> Ȥץ⤢ꡢ <samp>-isysroot</samp> <samp>--sysroot</samp> ץȹ碌ƻȤȤǡХʥθߴϰϤ Mac OS X Τ٤εСˤޤǹ뤳ȤǤ褦ˤʤäƤޤ
γĥͤ Mac OS X ѤΥХʥꡦѥåʤɤǤ</p>
<p>ץץ˴ؤƤϡCPU ˤäưλޥ㤦ȤդɬפǤ</p>
<li><p>"framework" ǥ쥯ȥ</p>
<p>Mac OS ˤ NeXTstep framework ǥ쥯ȥȤΤޤ
framework ϥإåե롦饤֥ꡦɥȡ¾ζͭĤˤޤȤΤǤ
ˤإåե include ˤϼΤ褦ʥǥ쥯ƥ֤Ȥޤ</p>
<pre>
#include <Kerberos/Kerberos.h>
</pre>
<p>ϼΥǥ쥯ƥ֤ƱƤޤ</p>
<pre>
#include <sys/stat.h>
</pre>
<p>Υǥ쥯ƥ֤ include ΤϤɤ줫 include directoryʤξ <samp>/usr/include</samp>ˤ <samp>sys/stat.h</samp> ȤեǤ<samp><Kerberos/Kerberos.h></samp> ΤۤϤǤϤޤ
<samp>Kerberos</samp> ϥǥ쥯ȥ̾Ǥ⤢ޤ
<samp>/System/Library/Frameworks</samp> Ȥ framework directory <samp>Kerberos.framework/Headers/Kerberos.h</samp> ȤեʤΤǤ
ơ<samp>Kerberos.framework/Headers</samp> <samp>Kerberos.framework/Versions/Current/Headers</samp> ؤ symbolic-link ȤʤäƤޤ
ϺǤñǡframework header Τ꤫ϤäȤäʣʤΤ¿ޤ</p>
<p>ä줬ʣʥƥͤΤǤ礦
ץץå path-list 줳ȤΩƤʤ饷ƥإåʤФʤʤΤǡʤ٤ޤ
إåˤäƤϤ餵¿¾Υإå include Τ⤢ޤ</p>
<li><p>"header map" ե</p>
<p>Mac OS X IDE Ǥ Xcode.app Ǥ "header map file" ȤΤȤޤ
include إåե餫ơ path-list *.hmap Ȥ̾Υե˵ϿƤץץǤϤ include directory Τ褦˻ȤȤΤǤ
header map file Τ Xcode.app ΥġǤ include directory Τ褦ɤΤ Apple-GCC γĥͤǤ</p>
<p>framework directory ΥإåեΥ٤礭Τǡڸ뤿˹ͤ줿ΤǤ礦
header map file ȼͤΥХʥեǤꡢƩ礤Ƥޤ
ष framework directory ΤۤñˤƤ餤ΤǤ</p>
<li><p>#endif ԤΥȡ</p>
<p>Ǹ褦ˡ#endif Ԥ˲Ȥɤʥץꤵ褦ȡApple-GCC ϥ˥Фޤ
δФǤ</p>
<li><p> ASCII ʸ</p>
<p> GCC ǤϤޤframework header Ǥϥ ISO-8859-* (?) copyright mark (0xA9) ASCII ʸФлȤƤޤ
ϥȤϸmultibyte character ȤĶǤǤǤ
ʸ encoding ˴ؤռϻäƤ餤ΤǤ
μʸ Linux /usr/include Ǥ˸ޤMac OS framework header ˤä¿褦Ǥ</p>
</ul>
<h3><a name="3.9.11" href="#toc.3.9.11">3.9.11. firefox 3.0b3pre Υץץ</a></h3>
<p>firefox developing version Ǥ 3.0b3pre (2008/01) ʤ 3.0-beta3-prerelease ΥLinux/x86 + GCC 4.1.2 Max OS X + GCC 4.0.1 ǥץץå <b>mcpp</b> V.2.7 ֤ƥѥ뤷Ƥߤޤ
<b>mcpp</b> -K ץΥƥȤͤơ٤ -Kv ץդƼ¹ԤνϤ cc1 (cc1plus) ϤƤޤ
η̡ѥ뤬˽λfirefox ΥХʥ꤬ΤΤ뤳ȤǤޤ*1</p>
<p>firefox ΥΥץץ portability ΤȤƤϤʤ⤤ΤǤ
glibc Υˤ褯褦 GCC-local ʻͤؤΰ¸Ϥޤ긫ޤ
Linux Mac OS X GCCWindows Visual C ʥåȤȤƤΤȤϤޤ</p>
<p>Ȥϸץץ portability GCC Visual C ̤Ф櫓Ǥ⤢ޤ
ʲ˶Ū˸ƤƤߤޤ
ʤGCC ˤĤƤϽʣ뤿ᡢǤޤ
<a href="#3.9.4">3.9.4</a>, <a href="#3.9.8">3.9.8</a> ȤƤ
firefox 椹뤿 glibc Фа礤˽ФƤޤglibc ˤĤƤΥȤ⤳Υˤޤ*2</p>
<p>:</p>
<p>*1 mozilla.org CVS ݥȥ꤫ checkout ΤǤ롣
ѥ뤷Ĥư <b>mcpp</b> -K ץƥȤ뤿Ǥä
Υץ Taras Glek ƤˤΤǤ뤬 mozilla project C/C++ refactoring ˼ȤǤΤǡ<b>mcpp</b> κԤ firefox ΥΥץΥƥȤ˻ȤäΤǤ롣
-K (-Kv) ץˤĤƤ <a href="#2.4">2.4</a> ȡ</p>
<p>*2 firefox Υǥɥ饤ϼΤȤˤ롣
ƤϤʤŤΤǤ롣<br>
<a href="http://www.mozilla.org/hacking/portable-cpp.html">portable-cpp</a></p>
<h4>3.9.11.1. GCC-local ʻͤϤۤȤɻȤʤ</h4>
<p>glibc ΥǻȤƤ뼡Τ褦 GCC-local ʻͤϡfirefox Υˤϸޤ
Linux ǥѥ뤹ϡƥإå GCC2 ͤβѰޥʤɤФƤޤ̤Ǥ</p>
<ul>
<li>GCC ͤβѰޥ<br>
ɤ C99 ͤβѰޥޤȤƤޤ
</ul>
<p>ΤΤ glibc ǤǶΥСǤϻȤʤʤäƤΤǤfirefox ǤȤƤޤ</p>
<ul>
<li>Ԥޤʸƥ
<li>#warning
<li>-isystem, -I- ץ
</ul>
<h4>3.9.11.2. #include_next</h4>
<p><samp>#include_next</samp> ϣĤΥǥ쥯ȥ˸¤äƤޤ
configure ˤä <samp>config/system_wrappers</samp> Ȥǥ쥯ȥǤ
ΤϤ٤Ʊ 900 ܤΥإåեǤ
㤨 <samp>stdio.h</samp> ϼΤ褦ˤʤäƤޤ</p>
<pre>
#pragma GCC system_header
#pragma GCC visibility push(default)
#include_next <stdio.h>
#pragma GCC visibility pop
</pre>
<p> GCC 4.* <samp>#pragma GCC visibility *</samp> εǽѤ뤿ΤΤǤ
ǡ<samp>config/gcc_hidden.h</samp> Ȥե뤬ޤ
ϼΤ褦ʤΤǡ줬¿ translation unit -include ץˤäƬɤ߹ޤޤ</p>
<pre>
#pragma GCC visibility push(hidden)
</pre>
<p>system_wrappers ǥ쥯ȥϺͥ include ǥ쥯ȥǤʤФʤʤΤǡ˺ǽ -I ץǻꤷʤФʤʤȤΤդ٤Ǥ #include_next λȤϴǤꡢäϤʤȻפޤ</p>
<p><samp>nsprpub</samp> ǥ쥯ȥǤ -include gcc_hidden.h -fvisibility=hidden ץꤵ礬ФФޤξ system_wrappers ΥإåեϻȤޤ
Υǥ쥯ȥϤޤƤʤ褦Ǥ</p>
<h4>3.9.11.3. C99 ꤻ C99 λͤȤ</h4>
<p>ΩĤΤ C99 ꤻ C99 λͤȤΤǤ
GCC Ǥϥե̾ *.c ȥǥեȤǤ gnu89 ȤͤȤޤ C90 ˤĤ C99 ͤ GCC ȼλͤäŪʤΤǤ
firefox ΥˤϡѤƼΤ褦 C99 λͤۤΤ˻ȤäƤΤޤ</p>
<ul>
<li><p>ޥƤӽФΥ</p>
<p>Linux Υƥإå̤ȤСfirefox ȤΥǤΥϤ鷺ǤޤΣܤΥեˤޤ
ºݤ˻ȤƤΤ <tt>NS_ENSURE_TRUE</tt> ȤĤΥޥǤ</p>
<p><samp>layout/style/nsHTMLStyleSheet.cpp, layout/generic/nsObjectFrame.cpp, intl/uconv/src/nsGREResProperties.cpp</samp></p>
<p>ޤ<samp>gfx/cairo/cairo/src</samp> μΥեˤ⤢ޤ
ºݤˤ <tt>slim_hidden_ulp2</tt> ȤĤΥޥǤ</p>
<p><samp>cairoint.h, cairo-font-face.c, cairo-font-options.c, cairo-ft-font.c, cairo-ft-private.h, cairo-image-surface.c, cairo-matrix.c, cairo-matrix.c, cairo-pattern.c, cairo-scaled-font.c, cairo-surface.c, cairo-xlib-surface.c, cairo.c</samp></p>
<p>Υ Linux ǤϻȤޤMac OS X ǤϻȤޤ
ˤƤ⡢äʶ路ΤǤϤޤ</p>
<li><p>C90 εĶ translation limits</p>
<p>identifier Ĺ#include Υͥȡޥοʤɤ C90 κݾڸ٤Ķ礬ФФޤ<br>
31 ХȤĶĹ identifier ϤȤ <samp>gfx/cairo/cairo/src/</samp> ¿ޤ
#include ΥͥȤ 8 ٥Ķꡢޥ 1024 ĤĶ⤢ޤLinux Mac OS X ǤϥƥإåǤθݤФеΤǤʤǤ礦</p>
<li><p>C ΥǤˤ⤫餺 <samp>//</samp> ȤȤäƤ</p>
<p>Ȥɤޤ
Ͼ嵭 <a href="http://www.mozilla.org/hacking/portable-cpp.html">ɥ饤</a> ػߤƤΤǤޤϤۤȤϤʤǤ礦</p>
</ul>
<p>λͤ Visual C 2005, 2008 ǤȤޤ
GCC Ǥ -std=c99 ȤץΤǡȤȤǤ
Visual C ˤϵʤΥСꤹ륪ץϤʤΤǡۤΤ˻Ȥޤ
äơۤΤ C99 λͤȤȤˤĤƤϡפʽϤθǤ firefox Υդ뤳ȤϤǤޤ*1</p>
<p>ȤǡۤΤ C99 ͤȤäƤʤ顢ѰޥϤʤȤƤޤ
Visual C Ǥ 2005 ǻȤ褦ˤʤäΤǤ2003 ޤǤϻȤʤäΤǡƤΤǤ礦</p>
<p>:</p>
<p>*1 C++ Ǥ GCC "gnu++98" ȤͤǥեȤǤ롣
C++98 + GCC extensions ȤƤ뤬ºݤˤ C99 λͤߤƤ롣
Visual C C Ǥ C90C++ Ǥ C++98 ˽ȤƤ뤬ºݤˤϤɤ C99 ͤȼλͤߤƤꡢVisual C 2005, 2008 ǤϤȤˤǤ롣
ʤGCC Visual C ʤȼͤߤƤΤǤ롣
Ȥ櫓 Visual C ϵʤΥСǤʤΤȤǤ롣</p>
<h4>3.9.11.4. Function-like ޥִ̾ object-like ޥ</h4>
<p>Function-like ޥִ̾ object-like ޥ¾Υץˤ褯ΤǤ
firefox Υˤ⤢ޤ¿ϤޤΤȤ˸ޤ</p>
<samp>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
</samp>
<p>ޤfirefox make 뤳Ȥ¿ΥإåեؤΥȯĶѤΥǥ쥯ȥ˺졢 firefox γȯĶȡ뤹 /usr/include/firefox-VERSION/ äƤޤˤϾ嵭ΥեؤΥܥåĤޤ
configure ˤä <samp>mozilla-config.h</samp> ˤ⤳μΥޥޤ</p>
<p>ϤϤ function-like ޥȤƽۤ狼䤹ʤޤ
ºݡfirefox Υˤ⤽ν¿ޤ
ͤˤäƽۤʤΤǤ礦ˤĤƤϥǥɥ饤ۤɤǤ</p>
<h4>3.9.11.5. 'defined' Ÿޥ</h4>
<p>glibc ǻ˸ִꥹ 'defined' ȤȡνФƤޥfirefox ˤ⣱Ĥޤ</p>
<p><samp>modules/oji/src/nsJVMConfigManagerUnix.cpp</samp>
ȤեǤϼΤ褦ʥޥơ
<pre>
#define NS_COMPILER_GNUC3 defined(__GXX_ABI_VERSION) && \
(__GXX_ABI_VERSION >= 102) /* G++ V3 ABI */
</pre>
ʬȤǼΤ褦˻ȤäƤޤ</p>
<pre>
#if (NS_COMPILER_GNUC3)
</pre>
<p>Υޥѻߤơ#if ԤϼΤ褦˲٤Ǥ</p>
<pre>
#if defined(__GXX_ABI_VERSION) && (__GXX_ABI_VERSION >= 102) /* G++ V3 ABI */
</pre>
<p>Υե뤬 GCC Ǥѥ뤵ʤΤȤϸϤθͤѤΤɤȤǤϤޤ*1</p>
<p>:</p>
<p>*1 <b>mcpp</b> V.2.7 GCC-specific-build Ǥ #if ԤΥޥ˽ФƤ 'defined' GCC Ʊͤ˽褦ˤ
˥ФΤǡۤɤ</p>
<h4>3.9.11.6. #endif Τ token sequences</h4>
<p><samp>jpeg</samp> ǥ쥯ȥμΥեˤϡ #endif Ԥ˥Ȥȥޡʤ˽ƤԤޤ
ǶΥץǡȤȯΤǤ</p>
<pre>
jmorecfg.h, jconfig.h, jdapimin.c, jdcolor.c, jdmaster.c
</pre>
<p>ν 1990 ǯ椴ޤǤ UNIX ϤΥեȥ˸ޤޤǤϤܾۤüƤΤǤ
glibc ǤȤƤޤ
GCC ⤳ˤϥ˥Фޤ
ΥϤʤȤˤϤޤʤΤ褦Ǥ
Apple-GCC ϥ˥Фޤ Mac OS ǥǥåȤ줿ΤʤΤǤ礦</p>
<h4>3.9.11.7. ץץפ륢֥饽</h4>
<p>֥饽 *.s (*.asm) Ȥ̾ˤʤäƤơˤϥޥȤƤΤ⤢ޤץץåƤӽФ뤳Ȥϸ§ȤƤޤ</p>
<p>Mac OS X / ppc ǤϣĤ㳰ꡢ<samp>xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_rhapsody.s</samp> ǥץץåƤӽФޤ
ΥեˤϤäԤ #if ֥åĤ뤫ǤȤʤäƤɬפʤȻפ֥åǤ</p>
<h4>3.9.11.8. -include ץ</h4>
<p>firefox ΥѥǤ configure mozilla-config.h Ȥإåե뤬ޤȾΥΥѥǤΥإå -include ץǻꤷƤޤ
config/gcc_hidden.h ˤĤƤƱͤǤ
ʤƬ #include ʤΤǤ礦</p>
<h4>3.9.11.9. ޥκ</h4>
<p>ޥۤäƺ뤳Ȥˤޤ</p>
<ul>
<li><p>firefox make Ǥ¿ξ -DZLIB_INTERNAL Ȥץղä gcc (c++) ƤӽФޤ
ʤ<tt>ZLIB_INTERNAL</tt> 1 ޤ
ȤΥޥ <samp>modules/zlib/src/</samp> βܤΥ</p>
<pre>
#define ZLIB_INTERNAL
</pre>
<p> 0 ĤΥȡƤΤǤ
ơΤ褦˻ȤƤޤ</p>
<pre>
# ifdef ZLIB_INTERNAL
</pre>
<p>ξϼ³ϤޤޥäƤΤϴޤ
֤ Makefile ΥץΤۤ;פʤΤǤ礦</p>
<li><p><samp>xpcom/build/nsXPCOMPrivate.h</samp> Ǥ <tt>MAXPATHLEN</tt> Ȥޥ <samp>/usr/include/sys/param.h</samp> ȰۤʤȤ꤬ޤ
ϴϢإåեˤä <samp>/usr/include/sys/param.h</samp> include ꤷʤäꤷƤʤǤ
إåեɬפǤ</p>
<li><p>Mac OS X Ǥ <samp>netwerk/dns/src/nsIDNKitInterface.h</samp> <samp>/usr/include/assert.h</samp> 줿 <tt>assert</tt> ޥޤ
<samp>#undef assert</samp> ˽٤Ǥ</p>
<li><p>Mac OS X Ǥ <samp>modules/libreg/src/VerReg.c</samp> <tt>VR_FILE_SEP</tt> Ȥޥδ̯ޤ</p>
<pre>
#if defined(XP_MAC) || defined(XP_MACOSX)
#define VR_FILE_SEP ':'
#endif
#ifdef XP_UNIX
#define VR_FILE_SEP '/'
#endif
</pre>
<p>Mac OS X Ǥ configure <tt>XP_MACOSX</tt> <tt>XP_UNIX</tt> 뤫Ǥ
տŪΤ褦˸ޤʶ路Τǡ<tt>XP_UNIX</tt> ͥ褹뤳Ȥ狼褦˼Τ褦˽ۤɤǤ礦</p>
<pre>
#ifdef XP_UNIX
#define VR_FILE_SEP '/'
#elif defined(XP_MAC) || defined(XP_MACOSX)
#define VR_FILE_SEP ':'
#endif
</pre>
</ul>
<h4>3.9.11.10. Ĺʥ</h4>
<p>ΥեˤϿɴʾˤĹʥȤޤ</p>
<p><samp>extensions/universalchardet/src/base/Big5Freq.tab, extensions/universalchardet/src/base/EUCKRFreq.tab,intl/unicharutil/src/ignorables_abjadpoints.x-ccmap, layout/generic/punct_marks.ccmap</samp></p>
<p>Ȥ <samp>intl/uconv/ucv*/</samp> Ȥǥ쥯ȥˤĹʥȤĥե뤬¿ޤ
ˤϣĤΥȤ 8000 ԤĶΤޤǤޤ
Ϥ٤ *.uf, *.ut Ȥ̾ˤʤäƤޤ
unicode ȥγƼ encoding Ȥδ֤ mapping table Τ褦ǡġˤäƼưΤǤ
C/C++ ΥˤϸޤC++ Υ include ޤ
ȤϤΥɥȤ¾ΥġΤɽΤ褦Ǥ</p>
<p>ĹʥɥȤɽȤȤƥ˴ޤΤϡʤΤǤ礦
ĥ˴ޤȤƤ⡢Ȥ̤ΥեʬΥ٤Ǥ礦</p>
<p>ʾΥեϤ Linux ǤϻȤޤMac OS X ǤϻȤޤ
¾ Mac OS X Ǥ framework ǥ쥯ȥΥƥإåФлȤޤˤϥȤȾƤ̯ʥե뤬ޤ</p>
<h4>3.9.11.11. ԥɤκ</a></h4>
<p>firefox Υβԥɤ [LF] Ǥ[CR][LF] ιԤäƤե뤬ܤޤ
Ϥû֥åǡ˥ѥåˡʬ [CR][LF] ˤʤäƤޤäΤΤ褦Ǥ
Windows ԽϡԥѴġǥå٤Ǥ礦</p>
<br>
<h2><a name="3.10" href="#toc.3.10">3.10. Visual C++ Υƥإå</a></h2>
<p>Visual C++ 2003, 2005, 2008 ǤĤΥץץΥץץ <b>mcpp</b> ȤäƤߤޤΥƥΥƥإåˤϡץץθߴȤʤ褦ʤΤϤʤ褦ǤΤ褦ʤΤϤޤ¾νϤǤ⤷ФиΤǡäȤʤΤǤϤޤ</p>
<ol>
<li>C99 λͤϤۤȤɼƤʤä顢C // Ȥ¿ѤƤ<br>
<li>Function-like ޥ̾Ÿ object-like ޥ롣<br>
<li>Visual C++ 2003 Ǥ limits.h ˴ְäޥĤä
Visual C++ 2005 Ǥľ줿<a href="cpp-test.html#5.1.3.1"> cpp-test.html#5.1.3.1</a> 2 ȡˡ
<br>
</ol>
<p>Linux Υƥإå glibc ˤ GCC local ʻͤФлȤƤޤVisual C++ Υƥإåˤ Visual C++ local ʽϤޤ긫ޤ</p>
<h3><a name="3.10.1" href="#toc.3.10.1">3.10.1. Ȥޥ</a></h3>
<p>Visual C++ ˤϣĤȤǤʤޥޤVisual C++ 2003 <samp>Vc7/PlatformSDK/Include/wtypes.h</samp> ˤϼΤ褦ʥޥޤ*1</p>
<pre>
#define _VARIANT_BOOL /##/
</pre>
<p>ơ<samp>Vc7/PlatformSDK/Include/</samp> <samp>oaidl.h, propidl.h</samp> ǼΤ褦˻ȤƤޤ</p>
<pre>
_VARIANT_BOOL bool;
</pre>
<p>ϤäǤ礦<br>
<tt>_VARIANT_BOOL</tt> // Ÿơ
η̡ιԤȥȤ뤳ȤԤƤΤΤ褦Ǥơºݤ Visual C cl.exe ǤϤʤäƤޤޤ</p>
<p>// ϥȡ (preprocessing-token) ǤϤޤޤޥŸϡȡʬ쥳ȤĤΥڡѴ줿ȤΥեǽΤǤäơޥˤäƥȤ뤳ȤϷ褷ƤǤʤΤǤΥޥ // Ÿ줿Ȥǡ// ͭ preprocessing-token ǤϤʤΤǷ̤ undefined ȤʤϤΤΤǤ</p>
<p><b>mcpp</b> ǤΥإåեȤˤϡΥޥȥȤꤢ <tt>_VARIANT_BOOL</tt> ΤȤΤ褦˽ʤФʤޤ</p>
<pre>
#if !__STDC__ && (_MSC_VER <= 1000)
_VARIANT_BOOL bool;
#endif
</pre>
<p>Visual C 5.0 ʹߤΥСȤʤΤǤСιԤϼΤ褦˥ȥȤƤޤޤ</p>
<pre>
// _VARIANT_BOOL bool;
</pre>
<p>ΥޥǤʾʤΤϡȤȤƽƤޤ Visual C / cl.exe ΥץץμǤˤϡΥץץåμΤ褦ʿ꤬Ϫ褷Ƥޤ</p>
<ol>
<li>ʤȤ⤳Ǥ Token-base ǤϤʤʸ١ΥץץƤ롣<br>
<li>ޥŸ̤ȤȤưƤꡢtranslation phases 𤷤Ƥ롣<br>
</ol>
<p>餯cl.exe Υץץå˸Ťɤ餫ȸʸ١ΥץץåΥˤƤΤǤ礦ʬŪ˼äʤСåפ֤ƤƤ뤳Ȥ¬ޤ</p>
<p>˸Ťץ¤äƤȿ¬ץץå¿ޤ3.9 Ǹ GCC 2 / cpp ⤽ΣĤǤץץåǤϡʬŪ˼äвäۤɥץ¤㥴㤷ƤΤǡɤƤ⤢ȤʼƬǤȤʤޤŤΤƤơᤫľʤ¤ꡢäꤷץץåˤϤʤʤȻפޤ</p>
<p>GCC 3 / cpp ǤϥľơGCC 2 Ȥ̤ΥץץåȤʤޤ<b>mcpp</b> ⡢DECUS cpp ȤŤץץåΥȯʤ顢ȯƤޤʤŪ˽ľ줿ΤǤ</p>
<p>:</p>
<p>*1 Visual C++ 2005 express edition ˤ Platform SDK ϴޤޤƤʤ
"Platform SDK for Windows 2003" ɤƻȤȤǤ롣 <samp>PlatformSDK/Include</samp> ǥ쥯ȥ <samp>wtypes.h, oaidl.h, propidl.h</samp> Ǥ⡢ΥޥƱǤ롣<br>
Visual C++ 2008 express edition <samp>Microsoft SDKs/Windows/v6.0A/Include</samp> ǥ쥯ȥƱ̾ΥإåեǤƱͤǤ롣</p>
<h3><a name="3.10.2" href="#toc.3.10.2">3.10.2. Identifier '$'</a></h3>
<p>⤦ĤϡVisual C++ 2008 ΥƥإåǤϥޥ̾ '$' ȤȤǤ
Visual C++ 2005 ޤǤˤʤϤޤǤ㳰ŪʤΤˤȤɤޤäƤޤ
2008 ǤϤ˽ФƤƤޤ</p>
<p>ǤΩĤΤ <samp>Microsoft Visual Studio 9.0/VC/include/sal.h</samp> ȤإåǤ
Visual C++ SAL (standard source code annotation language) ʤΤ˵Ҥ뤿ΥޥƤΤǤ
Ǥ '$' ޤ̤̾˻ȤƤޤ
Υإå¿ɸإåե뤫 <samp>Microsoft Visual Studio 9.0/VC/include/crtdefs.h</samp> Ȥإå𤷤 #include ޤ
äơ¿ΥΥѥǤϤΥޥΤʤ˻Ȥ뤳Ȥˤʤޤ</p>
<p>-Za ץդ clʥѥˤưȡSAL ̵ˤʤꡢsal.h '$' ޤ̾Ϥ٤ƾä褦ˤϤʤäƤޤʤ̾ɬפʤΤ˶줷ߤޤ
GCC Ǥ identifier '$' ȤΤǥեȤˤʤäƤޤºݤˤϻȤƤϤۤȤɸݤʤʤäƤޤ</p>
<p><samp>Microsoft SDKs/Windows/v6.0A/Include</samp> ǥ쥯ȥˤ⤳μ̾ĥإåե뤬ޤ
<samp>specstrings*.h</samp> ȤإåǤ
Υإå WinDef.h 𤷤 Windows.h include ޤ -Za ץꤷƤ '$' ä褦ˤϽƤ餺ñ˥顼ˤʤǤ
äơWindows.h include 륽 -Za ץǥѥ뤹뤳ȤϤǤޤ</p>
<br>
<h1><a name="4" href="#toc.4">4. λ</a></h1>
<p>øΥץץͤ줳˽櫓ˤϤ椭ޤcpp-test.html Standard C ΥץץˤĤƾܤƤΤǡɤǤ<b>mcpp</b> γƼ⡼ɤưͤˤĤƤϡ<a href="#2.1"> 2.1</a> ƤǤ Standard C ǽȤƤΤޤơץץμդΤĤλͤҤ٤ޤˤޤʽͤˤĤƤϡ5 ǥå˽Ƥޤ</p>
<br>
<h2><a name="4.1" href="#toc.4.1">4.1. λ status </a></h2>
<p><b>mcpp</b> λ˿ƥץ֤ͤ internal.H ȤإåƤޤ顼ʤä 0 ֤顼ä errno != 0 ʤ errno errno == 0 ʤ 1 ֤ޤ</p>
<br>
<h2><a name="4.2" href="#toc.4.2">4.2. Include directory Υѥ</a></h2>
<p>#include directive include եϼνǥޤ</p>
<ol>
<li>#include ǥ쥯ƥ֤ΰ "file-name" ޤ <file-name> ηǤʤ硢줬ޥǤФŸ롣η̤ "file-name", <file-name> Τɤ餫ηǤʤФʤʤǤʤϥ顼Ȥʤ롣<br>
<br>
<li>"file-name" ηǤ <file-name> ηǤ file-name եѥꥹȤǤСΤޤޥץ롣ץǤʤХ顼Ȥ롣<br>
<br>
<li>եѥꥹȤǤʤ "file-name" ηǤСΥǥ쥯ȥʤХѥˤȲᤷƥ롣-I1 ץǤ 3.1-I2 Ǥ 3.2-I3 ǤϤʤνǡˤȤʤ롣ǥեȤǤϡUNIX Ϥν, GCC, Visual C ѤǤ 3.2¾Ǥϸ§Ȥ 3.1 Ǥ롣Borland C ǤǤϡBC 4 ޤǤ 3.1BC 5 3.1+3.2Ǥ롣
Compiler-independent ǤǤ 3.2 Ǥ롣<br>
<br>
3.1. ȥǥ쥯ȥʤ <b>mcpp</b> ưΡˡ#include ͥȤƤƤ⡢˥ȥǥ쥯ȥȤ롣<br>
3.2. եʥ롼ɸˤΤǥ쥯ȥꡣ#include ͥȤƤ硢إåե뤬̥ǥ쥯ȥˤȡΤӤ˴बƤ椯<br><br>
GCC ǤǤϤ -iqoute ץǻꤵ줿ǥ쥯ȥ꤬롣
Visual C ǤǤϥեοơʥ롼ɸ˥եΥǥ쥯ȥ缡Τܤäơ롣
ȯǤʤС<file-name> ηƱͤΥ롣<br>
<br>
<li>եѥꥹȤǤʤ <file-name> ηǤСΥǥ쥯ȥ롣Υǥ쥯ȥꤽΤΤХѥǻꤵƤϡȥǥ쥯ȥ꤫ХѥȲ᤹롣ˤ٤ƥƤեץǤʤХ顼Ȥ롣<br>
<br>
4.1. <b>mcpp</b> ư -I <directory> ץǻꤵ줿ǥ쥯ȥꡣʣлꤵ줿ˡʺ˥롣<br>
4.2. GCC ǤǤ -isystem ץǻꤵ줿ǥ쥯ȥꡣʣлꤵ줿ˡʺ˥롣<br>
4.3. Ķѿǻꤵ줿ǥ쥯ȥꡣδĶѿ̾ϡnoconfig.H (configed.H) <i>ENV_C_INCLUDE_DIR</i> Ƥ롣C++ Ǥ <i>ENV_CPLUS_INCLUDE_DIR</i> ƤФδĶѿ˻Ȥ롣GCC ǤǤ C_INCLUDE_PATHC++ Ǥ CPLUS_INCLUDE_PATH ˡ¾Ǥ <samp>INCLUDE</samp>C++ Ǥ <samp>CPLUS_INCLUDE</samp> ˤǥեȤδĶѿ̾ȤƤ롣ĶѿʣΥǥ쥯ȥ꤬ separator ǶڤäƻꤵƤСǽΤΤ˥separator Windows Ǥ ;¾Ǥ :ˡ<br>
4.4. noconfig.H (configed.H) Υޥ <i>CPLUS_INCLUDE_DIR?</i> 줿 implementation-specific ʥǥ쥯ȥꡣ<br>
4.5. system.c set_sys_dirs() ǻꤵ줿 site-specific ʥǥ쥯ȥ(UNIX ϤǤ <samp>/usr/local/include</samp>)<br>
4.6. noconfig.H (configed.H) Υޥ <i>C_INCLUDE_DIR?</i> 줿 implementation-specific ʥǥ쥯ȥꡣ<br>
4.7. system-specific ʥǥ쥯ȥUNIX ϤǤ <samp>/usr/include</samp>ˡ<br>
</ol>
<p>-I- (GCC Ǥ -nostdincVisual C Ǥ -X) ץꤹȡ嵭 4.4 ʹߤΥϹԤޤ</p>
<p>ѥδȥǥ쥯ȥȤΤϡANSI C Rationale ǤϰѰΡְտ (intent)פǤȤƤޤǥ쥯ȥ꤬ưȤʤͤΤʤΤǡȻפޤUNIX ϤνǤϡʤȤ #include "header" ηǤ include ΥեΤǥ쥯ȥȤ뽬褦Ǥ<b>mcpp</b> compiler-independent ǤǤ˽äƥեΥǥ쥯ȥȤޤ</p>
<br>
<h2><a name="4.3" href="#toc.4.3">4.3. Header name ιˡ</a></h2>
<p>Header-name Ȥ pp-token ιˡȡºݤ include file Υե̾Фˡϡ̤Ǥ</p>
<ol>
<li>ʸƥηǽƤСΤޤ header-name Ȥ롣˥ޥǽƤơŸ̤ʸƥˤʤä⡢ƱͤǤ롣ʸƥη header-name Ǥϡñˤξü " ȤäΤե̾Ȥ롣<br>
<li> <filename> ηǽƤСΤޤ header-name Ȥ롣˥ޥǽƤơŸ̤ <filename> ηˤʤä⡢ƱͤǤ롣ޥ space ʣ spaces Ĥ space ˰̤¸롣ñξü <, > ȤäΤե̾Ȥ롣<br>
<li>ɤξǤ⡢Windows Ǥ path-delimiter Ȥ \ / Ȥ뤬\ / Ѵ롣<br>
</ol>
<br>
<h2><a name="4.4" href="#toc.4.4">4.4. #if ɾ</a></h2>
<p>#if ɾϥۥȽϡ<b>mcpp</b> ѥ뤷ϡˤȥåȽϡ<b>mcpp</b> ȤϡˤĺˤäƷޤޤηۤʤϡۤη #if ηˤʤޤCompiler-independent Ǥ <b>mcpp</b> ǤϥåȽϤ¸ߤʤΤǡۥȽϤˤäƷޤޤ</p>
<p>pre-Standard ⡼ɤǤ #if (signed) long ɾޤ</p>
<p>long long ʤϤ Standard ⡼ɤǤϡlong unsigned long ǹԤޤ</p>
<p>long long ĽϤ Standard ⡼ɤǤϡ#if long long / unsigned long long ɾޤC90, C++98 Ǥ long / unsigned long ɾΤǤ<b>mcpp</b> Ǥ C90, C++98 Ǥ long long / unsigned long long ɾlong / unsigned long ϰϤĶϥ˥Фޤ*1</p>
<p>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 ԤǤϻȤ뤬ϤʸǻȤäƤϤʤˡ</p>
<p>ޤ-+ ץ C++ Υץץϡ#if true, false Ȥ pp-token ͤϤ줾 1L, 0L ɾޤ</p>
<p>Standard ⡼ɤǤζŪɾΤʲޤlong long ʤϤξϡʲ 4.4, 4.5 εܤϤ٤ơlong long / unsigned long long 줾 long / unsigned long ɤؤƤPre-Standard ⡼ɤǤϤ٤ long ɤؤƤ</p>
<ol>
<li>ġȡʸޤˤϡͥȡ U դƤ unsigned long long ɾpre-Standard ⡼ɤǤ U ǧΤʤˡ<br>
<li>ǤʤСlong long ϰϤˤޤ long long ɾ롣<br>
<li>Ǥʤ unsigned long long ϰϤ unsigned long long ɾ롣<br>
<li>ۤͤ out of range Υ顼Ȥ롣<br>
<li>黻黻Τɤ餫ʤǤʤǡ
ǤʤĤǹԤ<br>
</ol>
<p>ɤˤƤȡϾͤȤޤ<br>
pre-Standard ⡼ɤǤȡɾ long ϰϤǹԤۤͤ out of range Ȥޤα黻⤹٤ long ǹԤޤ</p>
<p>ޤۥȤ unsigned long long ΤۤåȤϰϤϡĶͤ out of range Ȥʤޤ<br>
ƱΤα黻̤ϰϳȤʤäϡlong long Ǥ out of range Υ顼Ȥʤꡢunsigned long long Ǥϥ˥Фޤ黻ַ̤ˤĤƤƱͤǤ</p>
<p>αӥåȥեȤޤ껻ˤϰܿʤΤǡ˥ФޤʤĤκ黻ˤäĤͤʤͤѴ줿⡢˥Фޤºݤα黻ϡۥȽϤΥѥΤλͤ˽ޤ</p>
<p>C90, C++98 ǤϥץץǤ #if ɾϤ٤ long / unsigned long ǡC99 ǤϤνϤκǡ˹ԤȤˤʤäƤޤ<b>mcpp</b> Ǥ C90, C++98 Ǥ long long / unsigned long long ɾlong / unsigned long ϰϤĶϥ˥ФޤɤˤƤ⡢ѥΤǤ if (expression) ɾλ礶äѤʤΤǤĥطˤϡѥΤȤϰ㤦̤ˤʤ뤳ȤˤƤޤ</p>
<p>ޤStandard C ΥץץǤ keyword ȤΤ¸ߤʤΤǡsizeof 䥭㥹ȤϻȤޤѿưϻȤޤStandard ⡼ɤǤ #if defined 黻ҤȤ#elif ǥ쥯ƥ֤ȤޤȤϥѥΤǤ if (expression) ƱͤˡƱ黻Ҥ̤ͥȥ롼ԥ§ʤ絬§ˤ˽äɾԤޤ黻Ҥ¿ǤϡξդƱˤ뤿λѴԤ졢 unsigned long long ξ¾ long long ǤäƤ unsigned long long Ѵޤ</p>
<p>:</p>
<p>*1 <b>mcpp</b> V.2.5 ޤǤ C90, C++98 ǤŪˤ long long
/ unsigned long long ɾʤ顢long / unsigned long ϰϤĶϥ顼ȤƤV.2.6 GCC Visual C ȤθߴΤ˥顼˥˳ʲ</p>
<br>
<h2><a name="4.5" href="#toc.4.5">4.5. #if Ǥʸɾ</a></h2>
<p>#if ȡȤƤϼ̻ҡʥޥޥˡοͥȡʸޤΤʸɾλϤۤȤ implementation-defined Ǥꡢportability Ϥޤꤢޤ#if 'const' compiler-proper Ǥ if ('const') Ȥδ֤Ǥ̤㤦礬ޤStandard C Ǥ⡢줬ƱǤ뤳ȤݾڤƤʤˡ</p>
<p><i>POSTSTD</i> ⡼ɤǤϤΤۤȤɰ̣Τʤ #if ʸɾϹԤޤʥ顼Ȥʤˡ</p>
<p>ʸɾ¾ȡƱͤˡlong long, unsigned long long ϰϤǾͤɾޤpre-Standard ⡼ɤǤ long ϰϤǤ</p>
<p>Single character Ǥʤ multi-byte character wide character ϡencoding UTF-8 ξϣХȡʳǤϤ٤ƣХȤηɾޤUTF-8 ϥѤʤΤǡХȤηɾޤEUC-JP ΣХ encoding ˤбƤޤʣХʸϣХȡܣХȤΣʸȤǧ롣η̡ͤɾ뤳ȤˤʤˡХȤ encoding Ǥʤ顢wchar_t ХȤηǤϤ⤢ޤ<b>mcpp</b> wchar_t ˤϴΤޤʲǤϣХȤ multi-byte character encoding ξˤĤޤ</p>
<p>'' Ȥ褦 multi-byte character constant ((Хܤ << 8) + Хܤ) ɾޤ8 <limits.h> <tt>CHAR_BIT</tt> ͡ˡ</p>
<p>'ab', '\x12\x3', '\x123\x45' Ȥ褦 multi-character character constant Ǥϡ'a', 'b', '\x12', '\x3', '\x123', '\x45' 줾죱ХȤȤ [0, 0xFF] ϰϤɾη̤̥ХȤ缡 8 ĺեȤʤƤ椭ޤ0xFF <limits.h> <tt>UCHAR_MAX</tt> ͡ˡĤ escape sequence ͤ 0xFF Ķϡout of range Υ顼ȤʤޤäơʸåȤ ASCII ǤСΣĤΥȡͤϤ줾 0x6162, 0x1203, 顼Ȥʤޤ</p>
<p>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 Ȥʤޤ</p>
<p>Multi-character character constant, multi-character wide character constant ͤ unsigned long long ϰϤĶ out of range 顼Ȥʤޤ</p>
<p><tt>__STDC_VERSION__</tt> ޤ <tt>__cplusplus</tt> ͤ 199901L ʾξϡ\uxxxx, \Uxxxxxxxx η UCN (universal-character-name) escape sequence ȤɾޤʤɾƤⲿΰ̣ʤɾ뤷ʤΤǤˡ</p>
<p>åȽϤΥѥΤ char wchar_t 椢ξϡ#if ǤʸɾȥѥΤǤ if (expression) ˤʸɾȤϡ̤äƤ뤳Ȥޤϰϥ顼ȤʤϰϤ㤦ǽޤޤmulti-character character constant, multi-byte character constant ɾϡץץåǤʤѥΤǤϤˤäƤޤޤǤ<tt>CHAR_BIT</tt> ǤäƤ⡢'ab' 'a' * 256 + 'b' ɾ뤫Ȥ 'a' + 'b' * 256 ɾ뤫⡢Standard C ǤϷƤޤ</p>
<p>̤ˡ#if ǤʸϤʤ¤ϻȤ٤ǤϤޤʤʤȤΤϡˤϻפդޤ</p>
<br>
<h2><a name="4.6" href="#toc.4.6">4.6. #if sizeof (type)</a></h2>
<p>Standard C Ǥϥץץϼ¹ԻĶ䥳ѥΤλͤΩʸ̤ΥץץȤƵ꤬Τˤ졢η̡#if ԤǤ sizeof ȥ㥹ȤϻȤʤȤˤʤޤpre-Standard ⡼ɤǤ #if Ԥ sizeof (type) Ȥ褦ˤʤäƤޤ DECUS cpp Ѿơ long long, long double νɲäμäΤǤʤ˥㥹ȤΤѻʤΤǡäƤʤ뵤ʤˡ</p>
<p>eval.c <i>S_CHAR</i> S_* ȤޥǤϳƷΥƤޤϤǻȤϡ⤷ۥȤȥåȤȤǤηΰۤʤʤ顢ͤȤƥåȽϤΤηΥͤľܽɬפޤ</p>
<p><b>mcpp</b> #if sizeof ˤϼȴޤchar, short, int, long, long long Ƭդ signed, unsigned ñ̵뤷ޤޤsizeof (void *) ϥݡȤޤȾüǤεǽΤ system.H Υե饰䤷ѻˤʤΤǤɤ㥹Ȥ⥵ݡȤʤΤ sizeof Ϻ褦ȤפޤäǤˤäΤʤΤǡ㴳μäǻĤƤޤ</p>
<br>
<h2><a name="4.7" href="#toc.4.7">4.7. White-space sequence ΰ</a></h2>
<p><b>mcpp</b> translation phase 3 tokenization ˺ݤơtoken separator ȤƤʣ white spaces sequence ϡԥɰʳϸ§Ȥ one space ˰̤ޤ
<i>STD</i> ⡼ɤ -k ޤ -K ץꤵ줿Ȥϡ̤ˤΤޤϤޤ
ޤ white space sequence Ϻޤ
<p>Ƭ white spaces <i>POSTSTD</i> ⡼ɤǤϺ¾Υ⡼ɤǤ̰ǡΤޤϤޤ
ԤϿʹ֤ϤɤΤĤ˹碌Ƥޤ*1</p>
<p>ϥץץʳäǤθ phase 4 äơޥŸȥץץǥ쥯ƥֹԤνԤޤޥŸθǤϤʣ spaces Ǥ뤳Ȥޤspace Ĥȡѥη̤ϲѤޤ</p>
<p>Standard C Ǥ translation phase 3 Ǥ one space ˰̤뤫ɤ implementation-defined ȤƤޤ̾ϥ桼ϤޤäˤɬפϤޤPortability ˤʤΤϡpreprocessing directive Ԥ <vertical-tab> ޤ <form-feed> Ǥξ Standard C Ǥ undefined Ǥ<b>mcpp</b> ǤϤ space Ѵޤ</p>
<p>:</p>
<p>*1 V.2.6.3 ޤǤϸ§Ȥ one space ˰̤ƤV.2.6.4 ѹ</p>
<br>
<h2><a name="4.8" href="#toc.4.8">4.8. <b>mcpp</b> ¹ԥץΥǥեȤλ</a></h2>
<p>noconfig ǥ쥯ȥˤƽѤκʬե makefile ȤäƥǥեȤǥѥ뤷 <b>mcpp</b> ¹ԥץλͤ˽ƤޤConfigure ץȤƥѥ뤷 configure η̤ˤäưäƤޤOS ȽϤΥСƱǤСʤȤ⥤롼ɥǥ쥯ȥʳƱ̤ˤʤϤǤ</p>
<p>Compiler-independent Ǥ <b>mcpp</b> λͤˤϽϤˤϤۤȤɤޤlong long ĽϤȻʤϤȤǤ #if ɾ˰㤤ޤޤOS ˤ㤬ޤ</p>
<p><b>mcpp</b> ˤ compiler-independent-build compiler-specific-build ȤꡢΤɤǤ⤤Ĥư⡼ɤޤˤĤƤ <a href=#2.1>2.1</a> ƤǤ <i>STD</i> ⡼ɤ濴ޤ</p>
<p>κʬե makefile ϼνѤΤΤǤ</p>
<blockquote>
<table>
<tr><th>FreeBSD 6.3 </th><td>GCC V.3.4</td></tr>
<tr><th>Vine Linux 4.2/x86 </th><td>GCC V.2.95, V.3.2, V.3.3, V.3.4, V.4.1</td></tr>
<tr><th>Debian GNU/Linux 4.0/x86 </th><td>GCC V.4.1</td></tr>
<tr><th>Fedora 8/x86 </th><td>GCC V.4.1</td></tr>
<tr><th>Mac OS X Leopard/x86 </th><td>GCC V.4.0</td></tr>
<tr><th>CygWIN </th><td>1.3.10 (GCC V.2.95), 1.5.18 (GCC 3.4)</td></tr>
<tr><th>MinGW & MSYS </th><td>GCC 3.4</td></tr>
<tr><th>WIN32 </th><td>LCC-Win32 2003-08, 2006-03</td></tr>
<tr><th>WIN32 </th><td>Visual C++ 2003, 2005, 2008</td></tr>
<tr><th>WIN32 </th><td>Borland C++ V.4.0, V.5.5</td></tr>
</table>
</blockquote>
<p>ΤۤλäƤʤνϤˤĤƤ⡢桼 contribute 줿ʬե뤬ϿƤޤ</p>
<blockquote>
<table>
<tr><th>WIN32 </th><td>Visual C++ V.6.0, 2002</td></tr>
<tr><th>WIN32 </th><td>Borland C++ V.5.9 (C++Builder 2007)</td></tr>
</table>
</blockquote>
<p>⤽νϼȤǥѥ뤵ޤ
</p>
<p>noconfig.H, system.H ޥΤ
ΤΤϤɤνѤ⤹٤ƱˤƤޤ</p>
<p><i>DIGRAPHS_INIT</i> == <i>FALSE</i> ǥѥ뤵ƤΤǡdigraph -2 (-digraphs) ץͭȤʤޤ<br>
<i>TRIGRAPHS_INIT</i> == <i>FALSE</i> ȤƤΤǡtrigraph -3 (-trigraphs) ץͭȤʤޤ<br>
<i>OK_UCN</i> <i>TRUE</i> ˤƤΤǡC99, C++ UCN (universal character name) Ȥޤ<br>
<i>OK_MBIDENT</i> <i>FALSE</i> ȤƤΤǡ̻ multi-byte-character ϻȤޤ<br>
<i>STDC</i> 1 ȤƤΤǡ<tt>__STDC__</tt> νͤ 1 Ȥʤޤ</p>
<p>Ƽ translation limits ϼΤ褦ˤƤޤ</p>
<blockquote>
<table>
<tr><th><i>NMACPARS</i>ʥޥΰκ </th><td>255</td></tr>
<tr><th><i>NEXP</i> #if κͥȥ٥ </th><td>256</td></tr>
<tr><th><i>BLK_NEST</i>#if section κͥȥ٥ </th><td>256</td></tr>
<tr><th><i>RESCAN_LIMIT</i>ʥޥκͥȥ٥</th><td>64</td></tr>
<tr><th><i>IDMAX</i> identifier ͭĹ </th><td>1024</td></tr>
<tr><th><i>INCLUDE_NEST</i>#include κͥȥ٥ </th><td>256</td></tr>
<tr><th><i>NBUFF</i>ʥκĹ*1 </th><td>65536</td></tr>
<tr><th><i>NWORK</i>ʽϤκĹ </th><td>65536</td></tr>
<tr><th><i>NMACWORK</i>ʥޥŸХåեΥ</th><td>262144</td></tr>
</table>
</blockquote>
<p>GCC ǡVisual C ǤǤϽϤκĹ NWORK ǤϤʤ NMACWORK Ǥ</p>
<p>Υޥ OS ˤäưۤʤäˤƤޤbuild type ˤϴطޤ</p>
<p><i>MBCHAR</i> ʥǥեȤ multi-byte character encoding</p>
<blockquote>
<table>
<tr><th>FreeBSD, Linux, Mac OS X </th><td>EUC_JP</td></tr>
<tr><th>Win32, CygWIN, MinGW </th><td>SJIS</td></tr>
</table>
</blockquote>
<p>ΥޥϽϤˤäưۤʤäˤƤޤ
</p>
<p><i>STDC_VERSION</i> <tt>__STDC_VERSION__</tt> ν͡</p>
<blockquote>
<table>
<tr><th>Compiler-independent, GCC 2</th><td>199409L</td></tr>
<tr><th>¾ </th><td>0L</td></tr>
</table>
</blockquote>
<p><i>HAVE_DIGRAPHS</i> digraphs ΤޤϤ뤫</p>
<blockquote>
<table>
<tr><th>Compiler-independent, GCC, Visual C</th><td><i>TRUE</i></td></tr>
<tr><th>¾ </th><td><i>FALSE</i></td></tr>
</table>
</blockquote>
<p><i>EXPAND_PRAGMA</i> C99 #pragma ԤΰޥŸ뤫</p>
<blockquote>
<table>
<tr><th>Visual C</th><td><i>TRUE</i></td></tr>
<tr><th>¾ </th><td><i>FALSE</i></td></tr>
</table>
</blockquote>
<p>GCC 2.7-2.95 Ǥ <tt>__STDC_VERSION__</tt> 199409L ȤʤäƤޤ3.*, 4.* Ǥ <tt>__STDC_VERSION__</tt> ϥǥեȤǤϻ줺¹Իץ˱褦ˤʤޤ<b>mcpp</b> GCC ѤϤбΤǤ</p>
<p><i>STDC_VERSION</i> 0L ΤΤǤϡ<tt>__STDC_VERSION__</tt> ϥǥեȤǤ 0L pre-define ޤ-V199409L ץ <tt>__STDC__</tt> 1 <tt>__STDC_VERSION__</tt> 199409Lޥ '_' ǻϤޤΤȤ̩ C95 ⡼ɤȤʤޤޤ-V199901L ץ C99 ⡼ɤȤʤޤ</p>
<p>C99 ⡼ɤǤ <tt>__STDC_HOSTED__</tt> 1 pre-define ޤ<tt>__STDC_ISO_10646__</tt>, <tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX__</tt> <b>mcpp</b> Ȥ pre-define ޤϤΥƥإåǤޤºݤˤϡglibc 2 / x86 ΥƥǤϥƥإåˤä <tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX__</tt> 1 졢¾νϤǤϤɤޤ</p>
<p><i>HAVE_DIGRAPHS</i> <i>FALSE</i> ΤΤǤϡdigraph Ƥʤϡˡdigraph <b>mcpp</b> ̾ token ѴƤϤޤ</p>
<p><i>EXPAND_PRAGMA</i> <i>TRUE</i> ǤäƤ⡢STDC, MCPP, GCC Τɤ줫ǻϤޤ #pragma ԤϥޥŸޤ</p>
<p>Include ǥ쥯ȥϼΤ褦ꤷƤޤ<br>
ޤUNIX Ǹ system-specific ʤΤ site-specific ʤΤϼ̤Ǥ compiler-independent ǤǤƱǤ</p>
<blockquote>
<table>
<tr><th>FreeBSD, Linux, Mac OS X, CygWIN</th><td>/usr/include, /usr/local/include</td></tr>
</table>
</blockquote>
<p>Mac OS X ǤϤΤۤframework ǥ쥯ȥ꤬ /System/Library/Frameworks, /Library/Frameworks ꤵޤ</p>
<p>MinGW Ǥ /mingw/include ɸ include ǥ쥯ȥˤʤޤ</p>
<p>Ϥ䤽ΥСˤäưۤʤ implementation-specific ʤΤˤĤƤ *.dif եƤCompiler-independent ǤǤϤޤWindows νϤǤϤäꤻĶѿȤޤĶѿ INCLUDE, CPLUS_INCLUDE ǤCompiler-independent ǤǤƱ͡<br>
ǤĤСѤ <b>mcpp</b> ꥳѥ뤹뤫Ķѿǻꤹ뤫-I ץǻꤹ뤫Ƥ</p>
<p><b>mcpp</b> GCC , Visual C ǰʳǤϡץץ̤ <i>NWORK</i>-1 ĶϡʲĹ˹Ԥʬ䤷ƽϤޤʸƥĹ <i>NWORK</i>-2 ʲǤʤФʤޤ</p>
<p>ǰΤ˷֤ޤʾ <i>italic</i> ɽƤޥϤ <b>mcpp</b> ѥ뤷ΤΤǤꡢ<b>mcpp</b> μ¹ԥץबäƤȤ߹ߥޥǤϤޤ</p>
<p>ϥեꤻ <b>mcpp</b> ươ#pragma MCPP put_defines ǤȡȤ߹ߥޥΰɽޤ</p>
<p><tt>__STDC__</tt> 1 ʾξ֤Ǥϡ_ ǻϤޤʤȤ߹ߥޥϺޤ-N (-undef) ץǤ <tt>__MCPP</tt> ʳ٤ƺޤξ -D ץꤷľƤ⤫ޤޤϤΥС㤦 include directory ʤϡ<b>mcpp</b> ꥳѥ뤷ʤƤ⡢ˡǥСޥ뤳Ȥ̥Сб뤳ȤǤޤ-N -U ȤʤƤ⡢-D Υޥ뤳ȤǤޤ</p>
<p>-+ (-lang-c++) ץ C++ Υץץꤷϡ<tt>__cplusplus</tt> ޤνͤ 1L ǤΤۤˤˤĤΥޥޤ</p>
<p>GCC Ǥ V.3.2 ޤǤϻޥȸäƤ GCC ΤϾʤ¿ gcc cpp -D ץϤΤǤȤθߴΤˤ <b>mcpp</b> ɬפϤʤΤǤ<b>mcpp</b> "pre-preprocess" ǡñΤưصΤ <b>mcpp</b> Ƥޤ<br>
GCC V.3.3 ʹߤ60 Ĥ 70 ĤΥޥ褦ˤʤޤ<b>mcpp</b> V.2.5 ʹߤǤ GCC ǤǤϤʤǤޤäơGCC V.3.3 ʹѤ <b>mcpp</b> ǤϾ嵭Τۤ¿ΥޥޤƤ <b>mcpp</b> ȡ뤹 mcpp_g*.h ȤإåեǤ狼ޤ</p>
<p>FreeBSD, Linux, CygWIN, MinGW / GCC, LCC-Win32, Visual C 2008 long long äƤΤǡ#if long long, unsigned long long ɾޤVisual C 2003, 2005, Borland C 5.5 Ǥ long long Ϥޤ__int64, unsigned __int64 ȤΤǤȤޤBorland C 4.0 Ǥ long long __int64 ʤΤǡ#if long, unsigned long ɾޤ</p>
<p>νϤǤ long ϰϤϤ</p>
<pre>
[-2147483647-1, 2147483647] ([-0x7fffffff-1, 0x7fffffff])
</pre>
<p>Ǥunsigned long
Ϥ</p>
<pre>
[0, 4294967295] ([0, 0xffffffff])
</pre>
<p>ϰϤǤ
</p>
<p>long long ĽϤǤϤ long long
ϰϤ</p>
<pre>
[-9223372036854775807-1, 9223372036854775807]
([-0x7fffffffffffffff-1, 0x7fffffffffffffff])
</pre>
<p>ǡunsigned long long
ϰϤ</p>
<pre>
[0, 18446744073709551615] ([0, 0xffffffffffffffff])
</pre>
<p>Ǥ
</p>
<p>νΤǤϤĤɽϣǤꡢ
ӥåȱ黻⤽бƤΤǡ<b>mcpp</b> #if ǤƱͤǤ<br>
αեȤϤѥեȤǤꡢ<b>mcpp</b> #if ǤƱͤǤʣӥåȤαեȤͤĤΤޤ 1/2 ˤʤˡ<br>
ν; operand ޤǤϤ Standard C ldiv() ؿƱŪ黻ԤΤǡ<b>mcpp</b> #if ǤƱͤǤ</p>
<p>ΥƥʣϣӡˤǤϤʸåȤ ASCII ʤΤǡ<b>mcpp</b> ǤƱͤǤ</p>
<p>䤬 kmmalloc Ȥ롼ꡢmalloc(), free(), realloc() ޤǤޤCygWIN, Visual C 2005, 2008 ʳǤϤ줬ȡ뤵Ƥϡmake MALLOC=KMMALLOCʤޤ -DKMMALLOC=1ˤȤץꤹȤ줬 link ޤҡץΥǥХåѥ롼褦ˤʤäƤޤerrno ֹ <i>EFREEP</i>, <i>EFREEBLK</i>, <i>EALLOCBLK</i>, <i>EFREEWRT</i>, <i>ETRAILWRT</i> ˤ Linux, LCC-Win32 ǤϤ줾 2120, 2121, 2122, 2123, 2124 ʳǤϤ줾 120, 121, 122, 123, 124 ƤƤޤ<a href="mcpp-porting.html#4.extra"> mcpp-porting.html#4.extra</a> ȡˡ*2</p>
<p>GNU Υƥप Visual C ʳǤϡĶѿ
TZ Ϥ餫 JST-9 ˥åȤƤɬפޤʤȡ<tt>__DATE__</tt>, <tt>__TIME__</tt> ޥͤƤޤޤ</p>
<p>:</p>
<p>*1 <backslash><newline> ˤ³ιĹˤ⡢
Ȥ a space ѴιĹˤŬѤ롣ȤʣԤˤޤäƤ硢ȤѴˤäƤ줬ԤϢ뤵뤳Ȥա</p>
<p>*2 CygWIN 1.3.10, 1.5.18 Ǥ malloc() _malloc_r() Ȥä롼ꡢ¾Υ饤֥ؿˤϤƤӽФΤĤ롣Τᡢ¾ malloc() ȤȤǤʤVisual C 2005, 2008 Ǥ⡢ץཪλΥ롼 Visual C malloc() 롼ƤӽФΤǡϤ¾ malloc() ȤȤǤʤ</p>
<br>
<h1><a name="5" href="#toc.5">5. ǥå</a></h1>
<h2><a name="5.1" href="#toc.5.1">5.1. ǥåη</a></h2>
<p><b>mcpp</b> ФǥåȤΰ̣ϡʲ̤ǤǥåϤɸ२顼Ϥ˽Ϥ졢-Q ץǥȥǥ쥯ȥ mcpp.err Ȥե˥쥯Ȥޤ</p>
<p>ǥåϼηȤäƤޤ</p>
<ol>
<li>"filename:line: " "fatal error: ", "error: ", "warning: " Τɤ줫³ 5.3 - 5.9 ΥåΤΤɤ줫³"filename:line: " ˻Ϥޤ룱ԤοǥåȤΤϤʻͤǤ뤬UNIX ΣýϤǤŪʿǷǡƼΥġ뤬ȤƤΤǺѤƤ롣̾ΣԤˤޤʤȤФФ롣<br>
<li>ޥŸǤСΥޥƤӽФɽ롣ͥȤ줿ޥƤӽФǤС줾Υޥ̾ɽ롣Υޥɽ졢ΥޥΤ륽ե̾ȹֹɽ롣<br>
<li>ե̾ȹֹȤιԤɽ롣ե뤬 include 줿ΤǤСinclude Υե̾ȹֹȹԤ缡ɽ롣<br>
</ol>
<p>ɽԤ̾ϡΡʪԡפ \ ˤä³줿ȤΡԡפ餵˥Ȥ a space ѴΤΤǤꡢȤԤޤǤʣԤϢ뤵줿ΤȤʤ롣ֹϢ뤵줿ǸʪԤֹǤ롣Ƚ translation phase ǤΥ顼Ǥϡ phase ιԤɽ롣</p>
<p>-j ץꤷϡ嵭ΣȣϽϤޤ</p>
<p>ǥåˤϼΣĤΥ٥뤬ޤ</p>
<blockquote>
<table>
<tr><th>fatal error</th><td>ץץʾ³Ƥ̣ʤ</td></tr>
<tr><th>error </th><td>ʸˡְäƤ</td></tr>
<tr><th>warning </th><td>Portability Τʤְ㤤βǽΤ</td></tr>
</table>
</blockquote>
<p>Warning
ˤϤ˼ΣĤΥ饹ޤClass 1, 2 ʳϤüʤΤǤ</p>
<blockquote>
<table>
<tr><th>class 1 </th><td>ְ㤤βǽΤ롢ޤ portability 礤</td></tr>
<tr><th>class 2 </th><td>ʾ꤬뤬ºݤˤϤ֤Τʤ</td></tr>
<tr><th>class 4 </th><td>ºݤˤϤ֤꤬ʤ portability ˴ؤ warning</td></tr>
<tr><th>class 8 </th><td>åפ #if group 䡢#if ɾåפˤĤƤΤ warning</td></tr>
<tr><th>class 16</th><td>trigraph, digraph ˤĤƤ warning</td></tr>
</table>
</blockquote>
<p><b>mcpp</b> Ϥ¿οǥåѰդƤޤ<i>STD</i> ⡼ɤǤϼΤ褦ʼˤΤܤäƤޤ</p>
<blockquote>
<table>
<tr><th>fatal error </th><td>17 </td></tr>
<tr><th>error </th><td>76 </td></tr>
<tr><th>warning class 1 </th><td>49 </td></tr>
<tr><th>warning class 2 </th><td>15 </td></tr>
<tr><th>warning class 4 </th><td>17 </td></tr>
<tr><th>warning class 8 </th><td>30 </td></tr>
<tr><th>warning class 16</th><td> 2 </td></tr>
</table>
</blockquote>
<p>ˤĤơ§ȤƤιԤʬŪ˻Ŧޤ</p>
<p>ʤʲǤϡǥåǰѤ륽ΥȡͤʬˤȤƲΥȡϤᤳǤޤΤͤΤ˥ޥ̾ƤȤϡºݤˤϤΥޥŸͤɽޤ<br>
ޤˤäƥ顼ȤƽФꥦ˥ȤƽФꤹå⤢ޤʲǤƱΥåˤĤƤϺǽ˵ܤȤǤäȤñ˥å¤٤ˤޤ</p>
<br>
<h2><a name="5.2" href="#toc.5.2">5.2. Translation limits</a></h2>
<p>ʲΥ顼ˤϡХåեΥСե <b>mcpp</b> λ;¤ˤΤޤХåե translation limits system.H ΥޥƤޤɬפʾϤ礭 <b>mcpp</b> ꥳѥ뤷ƤʤξʤƥǤϡޤͤ礭 out of memory ȯ䤹ʤΤǡۤɤۤɤˡˡ</p>
<br>
<h2><a name="5.3" href="#toc.5.3">5.3. Fatal error</a></h2>
<p>I/O 顼ץץʾ³뤳ȤǤʤ硢ХåեСեץץ³Ƥ̣ʤˡΥ顼åФơץץߤޤƥץˤϡּԡפξ֤ͤޤ</p>
<br>
<h3><a name="5.3.1" href="#toc.5.3.1">5.3.1. <b>mcpp</b> ȤΥХ</a></h3>
<ul>
<li><samp>Bug:</samp><br>
ΥåϿ濫ޤ <b>mcpp</b> ȤΥХ̣ޤ줬Ф뤳ȤϤʤȻפޤ⤷Ф餼ҤξϢ<br>
</ul>
<h3><a name="5.3.2" href="#toc.5.3.2">5.3.2. ʪŪ顼</a></h3>
<ul>
<li><samp>File read error</samp><br>
եɤ߹ߤΥ顼Ǥǥե륷ƥबǤΤǤ礦<br>
<li><samp>File write error</samp><br>
ϥեνФ顼Ǥǥե륷ƥबǤ뤫äѤˤʤäƤΤǤ礦<br>
<li><samp>Out of memory (required size is 0x1234 bytes)</samp><br>
꤬ʤʤޤ<b>mcpp</b> ҡפ 0x1234 bytes 褦ȤǤʤäˡξʤƥĹʥޥޤˤ¿ȯޤեʬ䤷ơ1 translation unit Υޥ餷Ƥ<br>
</ul>
<h3><a name="5.3.3" href="#toc.5.3.3">5.3.3. Translation limits ХåեΥ顼</a></h3>
<ul>
<li><samp>Too long header name "long-file-name"</samp><br>
Include ٤եΥѥꥹȡʻΥǥ쥯ȥΥѥꥹȤϢ뤷Ρˤ <i>PATHMAX</i> ΥĶƤޤ<br>
<li><samp>Too long source line</samp><br>
ʪԤĹ <i>NBUFF</i>-2 ĶƤޤäΥǤϤʤΤǤ礦<br>
<li><samp>Too long logical line</samp><br>
ʪԤ \ ˤä³ԤĹ <i>NBUFF</i>-2 ĶƤޤޤˤĹʥޥȯ뤳ȤޤΤ褦ʥɤϥޥǤϤʤؿȤƽ٤Ǥ礦<br>
<li><samp>Too long line spliced by comments</samp><br>
Ȥ a space ѴȤιԤĹ <i>NBUFF</i>-2 ĶƤޤԤޤȤˤä¿ιԤϢ뤷ȯޤȤʬΥƤ<br>
<li><samp>Too long token</samp><br>
ץץιԤ <i>NWORK</i>-2 ĶĹΥȡޤޤƤޤ<b>mcpp</b> ϥѥΤμĹ <i>NWORK</i> ˽ϹԤʬ䤷褦ȤޤüĹȡʬ䤷ƤϤǤʤȤޤ<br>
</ul>
<p>ΣĤΥ顼ϥȡۤĹʤƤ⡢ޥŸˤΥȡΤȤǥХåեСեˤʤäˤⵯޤξϥޥƤӽФʬ䤷Ƥ</p>
<ul>
<li><samp>Too long quotation "long-string"</samp><br>
ʸƥ롢ʸޤ header-name ĹޤʸƥǤʬ䤷Ƥܤʸƥ Standard C νϤǤХѥΤϢ뤷Ƥޤ<br>
<li><samp>Too long pp-number token "1234567890toolong"</samp><br>
Preprocessing-number token ĹޤStandard ⡼ɤξǤ<br>
<li><samp>Too long number token "12345678901234......"</samp><br>
Number token Ĺޤpre-Standard ⡼ɤξǤ<br>
<li><samp>Buffer overflow scanning token "token"</samp><br>
token
Ƥ뤦˥ХåեСեȤʤޤʸƥ롢ʸheader-namepp-number ʳΥȡǤϡΥåФޤ<br>
<br>
<li><samp>More than <i>BLK_NEST</i> nesting of #if (#ifdef) sections</samp><br>
#if, #ifdef, #ifndef ΥͥȤ <i>BLK_NEST</i> ĶƤޤ<i>BLK_NEST</i> Υޥ̾ʬϼºݤˤϤͤɽ롣ʲƱ͡ˡ#if section ʬ䤷Ƥ<br>
<li><samp>More than <i>INCLUDE_NEST</i> nesting of #include</samp><br>
#include ΥͥȤ <i>INCLUDE_NEST</i> ĶƤޤ#include ̵ºƵˤʤäƤΤǤ礦<br>
</ul>
<h3><a name="5.3.4" href="#toc.5.3.4">5.3.4. #pragma MCPP preprocessed ˴ؤ륨顼</a></h3>
<ul>
<li><samp>This is not the preprocessed source</samp><br>
#pragma MCPP preprocessed ޤ <b>mcpp</b> ˤäƥץץ줿եǤϤޤ<br>
<li><samp>This preprocessed file is corrupted</samp><br>
<b>mcpp</b> ˤäƥץץ줿եΤ褦ǤƤƻȤޤ<br>
<br>
</ul>
<h2><a name="5.4" href="#toc.5.4">5.4. Error</a></h2>
<p>ʸˡŪʴְ㤤ˤΥ顼åФޤ<br>
Standard
C Ǥϡviolation of syntax rule or constraint äϽϤϲ餫οǥåФʤФʤʤȤˤʤäƤޤStandard ⡼ɤǤϤ violation ФƤϸ§Ȥƥ顼åФޤϥ˥Ǥ</p>
<p>ޤStandard C undefined ȤƤΤ¿ˤĤƤ error åޤ warning ФޤUndefined Ǥʤ error warning ФʤΤϡΤΤǤ</p>
<ol>
<li>ʸƥη header name ' /*ñʤʸȤư롣ºݤˤϤϡեץ褦Ȥƥ顼ˤʤϤǤ<, > ǰϤޤ줿 header name ǤϤʸӥȤγϤȲᤵΤǡ餫Υ顼Ȥʤˡheader name Ǥ \ undefined Ǥ뤬åʤºݤˤϤϤեΥץǥ顼ˤʤǤWindows ǤǤ \ class 2 warning Ф / Ѵƽˡ<br>
<li>#undef defineddefined Ȥ̾ #undef Τ undefined Ǥ뤬<b>mcpp</b> Ǥ defined Ȥ̾Υޥ뤳ȤϤǤʤ褦ˤʤäƤΤǡ줬ä뤳Ȥʤ<br>
<li> illegal multi-byte character sequence ä undefined Ǥ뤬ϼ³ϤʤΤǿǤʤʸƥ롢ʸheader name illegal multi-byte character sequence ˤϥ˥Фˡ<br>
<li>_ ǻϤޤ identifier ϽϤΤͽƤꡢ桼ץȷ̤ undefined Ǥ뤬ץץåǤϥ桼ץफǤʤɬȽ̤ǤʤΤǡǤʤ<br>
<li>C99 ǥץȤƵꤵƤޥΤ<tt>__STDC_ISO_10646__</tt>, <tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX__</tt> #define #undef ꤹ undefined Ǥ뤬ǤʤΥޥϽϤΥإåե뤳ȤˤʤǤץץåϥ桼ץफɤɬȽ̤ǤʤǤ롣<br>
<li>C99 UCN ˤĤƤϡtranslation phase 2 <backslash><newline> UCN sequence Ǥ硢ʸƥϢˤä UCN sequence 줿 undefined Ǥ뤬ϿǤʤʤ UCN Ȥưˡ<br>
</ol>
<p>Standard C ΥץץǶŪ˲ violation of syntax rule or constraint ǡ undefined Dz unspecified Dz implementation-defined Ǥ뤫ˤĤƤϡcpp-test.html ȤƤ</p>
<p>Fatal Ǥʤ error åФƤץץ³ޤλȡ顼οɽƥץˡּԡפξ֤ͤޤ</p>
<h3><a name="5.4.1" href="#toc.5.4.1">5.4.1. ʸȥȡ˴ؤ륨顼</a></h3>
<ul>
<li><samp>Illegal control character 0x1b, skipped the character</samp><br>
ʸƥ롢ʸheader nameȰʳΤȤ white space ʳΥȥ륳ɤޤʸåפƽ³ޤ<br>
</ul>
<p>ϥȡΥ顼ǤΣĤϤ⤽ιԤåפƽ³ޤΣĤʸƥΥȡǡԤιޤǤ˰䤬ĤƤʤȤޤ</p>
<pre>
#error I can't understand.
</pre>
<p>ʤɤȡpreprocessing-token sequence ηʤƥȤʸƥǤ⥳ȤǤʤȤ˽ȡμΥ顼ȤʤޤPre-processing-token ΡʥѥΤǤΡˣä token ꤪޤʤΤǡʸ source character set ˴ޤޤƤФۤȤɤ character sequence 餫 pp-token sequence Ȥ̤Τǡpreprocessing-token 顼ȤʤΤϤǤ</p>
<p>ʤåפ #if group Ǥ pp-token 顼ϥ顼Ȥʤޤ</p>
<ul>
<li><samp>Unterminated string literal</samp><br>
ʸƥ뤬뤷ƤޤʸƥԤޤȤϤǤޤɬפʤ顢ʣԤʸƥơϤˤϢ뤵ƤΥ顼 # 黻Ҥˤʸȯ뤳Ȥ⤢ޤξϹԤϥåפޤ<br>
<i>OLDPREP</i> ⡼ɤǤϤϥ顼ˤʤޤʹƥνȤߤʤˡ<br>
ޤ-a (-lang-asm, -x assembler-with-cpp) ץǵư줿ϡԤޤʸƥȽǤơ\n ƼιԤϢ뤹Τǡ顼ˤϤʤޤʥ˥ϽФˡ<br>
<li><samp>Unterminated character constant 't understand.</samp><br>
ʸ뤷Ƥޤ<i>OLDPREP</i> ⡼ɤ lang-asm ⡼ɤǤϤϥ顼ˤʤޤʹƥνȤߤʤˡ<br>
<li><samp>Unterminated header name <header.h</samp><br>
header-name 뤷Ƥޤ<, > ǰϤޤ header-name " ޤ ' äϤΥ顼ǤϤʤ嵭ĤΥ顼Ȥʤޤޤ<, > ǰϤޤ header-name /* äϤ夬ȤȲᤵޤ<br>
<li><samp>Empty character constant ''</samp><br>
ʸȤǤ<br>
<li><samp>Illegal UCN sequence</samp><br>
std ⡼ɤ <tt>__STDC_VERSION__</tt> ͤ
199901L ʾξ硢ޤ C++ ξϡUCN ǧޤ̻ \u, \U ǻϤޤ룱 sequence Υ줾죴Ƥޤ#if ʸǤ줬äȤϡUndefined escape sequence Υ˥Ȥʤ롣ʳξϿǤʤˡ<br>
<li><samp>UCN cannot specify the value "0000007f"</samp><br>
UCN ϣʤ [0, 9f], [d800, dfff] ϰϤͤꤹ뤳ȤϤǤޤԤΤ 0x24 ($), 0x40 (@), 0x60 (`) ϲĤǤԤϤΣʸȤ٤ basic source character set ͤȰפΤǡȤޤޤԤ special characters Τ reserved area ȤʤäƤޤC++ ǤϸԤ¤Ϥޤʤʤʤ̯˰äƤˡC++ Ǥ -V199901L Ȥƥޥ <tt>__cplusplus</tt> 199901L ʾ˻ϡ˴ؤƤ C99 Ʊͤˤʤޤ<br>
<li><samp>Illegal multi-byte character sequence "XY"</samp><br>
<i>OK_MBIDENT</i> == <i>TRUE</i> ǥѥ뤷 Standard ⡼ɤξ硢C99 Ǥ identifier multi-byte character Ȥޤmulti-byte character Ȥǧʤ character sequence ȥ顼ˤʤޤidentifier ʳ pp-token Ǥϥ˥ˡ<br>
</ul>
<h3><a name="5.4.2" href="#toc.5.4.2">5.4.2. 뤷ʤեΥ顼</a></h3>
<p>Υåϥե뤬뤷ʤ #if sectionޥƤӽФǽäƤ˽ФޤΥեϤξinclude 줿եǤʤˤϡ"End of file" ǤϤʤ "End of input" ɽޤ<br>
οǥå <b>mcpp</b> Υ⡼ɤˤäơ顼Ȥʤȥ˥ȤʤȤޤ<br>
Standard ⡼ɤǤϤϤ٤ƥ顼ǤΥޥƤӽФϥåפ#if section бطϤΥե뤬 include 줿ν֤ᤷޤ<br>
pre-Standard ⡼ɤǤϤ٤ƥ˥Ǥpre-Standard ⡼ɤǤ⡢<i>OLDPREP</i> ⡼ɤǤ unterminated macro call ʳϥ˥Фޤ</p>
<ul>
<li><samp>End of file within #if (#ifdef) section started at line 123</samp><br>
123 Ԥ #if (#ifdef, #ifndef) б #endif ޤ<br>
<li><samp>End of file within macro call started at line 123</samp><br>
123 ԤǻϤޤäޥƤӽФեνޤǤ˴뤷ƤޤΥåбƤʤȡ顼äˡĤʬȤɤǤäƥեκǸޤã뤳Ȥޤʤ Buffer overflow Ȥʤ뤫⤷ʤˡޤޥŸλͤ⡼ɤˤäưۤʤΤǡ⡼ɤǤϰտ̤Ÿޥ¾Υ⡼ɤǤϤΥ顼ˤʤ뤳Ȥޤ<br>
</ul>
<h3><a name="5.4.3" href="#toc.5.4.3">5.4.3. Preprocessing group бطΥ顼</a></h3>
<p> #if, #else group бطΥ顼ǤιԤ̵뤷ơʤޤǤ group ³ƤΤȤơ˽³ޤΥåϤȤåפ #if group ˤäƤԤޤ<br>
ʤ#if (#ifdef) section Ȥ #if, #ifdef, #ifndef #endif ޤǡ#if (#elif, #else) group ȤϣĤ #if (#ifdef) section Τ #if (#ifdef, #ifndef), #elif, #else, #endif ǤϤޤ줿Ĥιԥ֥åؤޤ</p>
<ul>
<li><samp>Already seen #else at line 123</samp><br>
123 Ԥ #else 줿ˤޤ #else (#elif) Ƥޤ#endif ˺줿Τ⤷ޤ<br>
<li><samp>Not in a #if (#ifdef) section</samp><br>
#if (#ifdef, #ifndef) ʤ #else (#elif, #endif) Ƥޤ<br>
<li><samp>Not in a #if (#ifdef) section in a source file</samp><br>
Include 줿եǡ#if (#ifdef, #ifndef) ʤ #else (#elif, #endif) ƤޤInclude 줿ե뤬եˤХ顼ˤʤʤñΥեǤϥХȤƤʤȤǤStandard ⡼ɤλǤpre-Standard ⡼ɤǤϥ˥ˡ<br>
</ul>
<p>ΣĤ #asm, #endasm бطΥ顼Ǥpre-Standard ⡼ɤνϤξǤ</p>
<ul>
<li><samp>In #asm block started at line 123</samp><br>
123 ԤϤޤä #asm ֥åˤޤ #asm ޤ#asm ҤˤǤޤ֤#endasm ˺줿ΤǤ礦<br>
<li><samp>Without #asm</samp><br>
#asm ֥åǤϤʤȤ #endasm ޤ<br>
</ul>
<h3><a name="5.4.4" href="#toc.5.4.4">5.4.4. ǥ쥯ƥֹԤñʹʸ顼</a></h3>
<p>ʹߡ5.4.12 ޤǡˤΥ顼ϥåפ #if group Ǥϵޤ-W8 ץǵưȡUnknown directive ˤĤƤϥ˥Фˡ<br>
# ǻϤޤǥ쥯ƥֹԤñʸˡ顼ǤιԤ̵뤷ƽ³ޤʤʤ#if section γϤȤߤʤ#line ǤϹֹѤʤˡ#include, #line ԤΰޥǤСŸǥåԤޤpre-Standard ⡼ɤǤŸʤˡ<br>
ΥåΤΤˤϥǥ쥯ƥ̾ФƤޤ³ɽ륽Ԥǥǥ쥯ƥ֤狼ޤʥǥ쥯ƥֹԤϥȤ space ѴȡɬԤˤʤˡ</p>
<ul>
<li><samp>Illegal #directive "123"</samp><br>
# ³ȡ̾ǤϤޤ# ³Τϥǥ쥯ƥ̾ǤʤФʤޤʤ<i>OLDPREP</i> ⡼ɤǤ #123 #line 123 ƱΤȤưˡ<br>
<li><samp>Unknown #directive "pseudo-directive"</samp><br>
pseudo-directive Ȥǥ쥯ƥ֤ϼƤޤ-a (-lang-asm, -x assembler-with-cpp) ץǵư줿ϡ顼ˤϤʤ餺˥ˤʤޤ<br>
<li><samp>No argument</samp><br>
#if, #elif, #ifdef, #ifndef, #assert, #line ΰޤ<br>
<li><samp>No header name</samp><br>
#include ԤΰޤޤϰޥǤŸȤˤϥȡʤʤޤ<br>
<li><samp>Not a header name "UNDEFINED_MACRO"</samp><br>
header name ǤϤޤheader name ϤΥޥƤʤʤɤǤ<, > ޤ ", " ǰϤޤ줿Τ header name Ǥ<br>
<li><samp>Not an identifier "123"</samp><br>
#ifdef, #ifndef, #define, #undef ˤ identifier ΰɬפǤ123 identifier ǤϤޤ<br>
<li><samp>No identifier</samp><br>
#define, #undef ΰޤ<br>
<li><samp>No line number</samp><br>
#line ΰޥǤ
ŸȤ ˤϲȡĤʤʤäƤޤޤ<br>
<li><samp>Not a line number "name"</samp><br>
#line ΰͥȡpreprocessing numberˤǤϤޤ<br>
<li><samp>Line number "0x123" isn't a decimal digits sequence</samp><br>
#line ϽȡǤʤФʤޤStandard ⡼ɤξǤpre-Standard ⡼ɤϥ˥ϽФʡȡǧˡ<br>
<li><samp>Line number "2147483648" is out of range of [1,2147483647]</samp><br>
#line [1,2147483647] ϰϤˤʤФʤޤ0 ⥨顼ǤStandard ⡼ɤξǤ<br>
<li><samp>Not a file name "name"</samp><br>
#line ̾ʸƥǤʤФʤޤIdentifier 磻ʸƥǤϤޤ<br>
</ul>
<p>Υ顼 Standard ⡼ɤξǡΥǥ쥯ƥ̵֤뤵ޤ<i>OLDPREP</i> ⡼ɤǤϥ顼⥦˥Ф<i>KR</i> ⡼ɤǤϥ˥Ȥʤꡢ "junk" ʤäΤȤƥץץ³ޤ</p>
<ul>
<li><samp>Excessive token sequence "junk"</samp><br>
#else, #endif, #asm, #endasm ιԤ;פʥƥ junk ޤ#ifdef, #ifndef, #include, #line, #undef ιԤθ;פʥƥ junk ޤϥȤȤƽƤ<br>
</ul>
<h3><a name="5.4.5" href="#toc.5.4.5">5.4.5. #if ιʸ顼</a></h3>
<p> #if, #elif, #assert ǥ쥯ƥμιʸ˴ؤ륨顼Ǥ</p>
<p>#if (#elif) ǥ顼äϡ #if (#elif) Ԥϵɾ줿ΤȤơʤʤ group åפơˡץץ³ޤ</p>
<p>åפ #if (#ifdef, #ifndef, #elif, #else) group ˤĤƤϡ줬ä legal preprocessing token ΩäƤ뤫ɤȡ#if group бطϥåޤ¾ʸˡ顼ϥ顼ˤϤʤޤ</p>
<p>#if ԤΤΤǤϡɾåפʬޤ㤨 #if a || b Τ褦ʼ a Ǥϡb ɾϹԤޤΣʸˡ顼ʤ translation limit Υ顼ϤȤɾåפʬˤäƤåޤ</p>
<ul>
<li><samp>More than <i>NEXP</i>*2-1 constants stacked at "12"</samp><br>
#if ɾǡåѤޤƤ 12 ΤȤ <i>NEXP</i>*2-1 ʾˤʤޤ#if ΥͥȤޤ<br>
<li><samp>More than <i>NEXP</i>*3-1 operators and parens stacked at "+"</samp><br>
#if ɾǡåѤޤƤ黻Ҥȥåιפ + ΤȤ <i>NEXP</i>*3-1 ʾˤʤޤʥåϰФĤȿˡ#if ΥͥȤޤ<br>
<li><samp>Misplaced constant "12"</samp><br>
#if Τ٤Ǥʤ֤ 12 ޤ#if Ǥϥ㥹ȤϻȤޤ(int)0x8000 ʤɤȥ㥹ȤȤäꤹȡint ޥȤƤʤ identifier Ȥߤʤ 0 ɾΤǡ(0)0x8000 ȤʤꡢΥ顼ȯޤ<br>
<li><samp>Operator ">" in incorrect context</samp><br>
#if ̯ʰ֤ > Ȥ黻Ҥޤޥ MACRO ĤΥȡƤˡ#if MACRO > 0 ʤɤȤȡޥŸη #if > 0 ȤʤΤǡΥ顼ȤʤޤʤξϤľ Macro "MACRO" is expanded to 0 token Ȥ˥ФΤǡȤ狼ˡ<br>
<li><samp>Unterminated expression</samp><br>
#if 뤷ƤޤMACRO ĤΥȡƤ #if a || MACRO ʤɤξǤ<br>
<li><samp>Excessive ")"</samp><br>
#if ( бʤ;פ ) ޤ<br>
<li><samp>Missing ")"</samp><br>
#if ( б
) ޤ<br>
<li><samp>Misplaced ":", previous operator is "+"</samp><br>
? бʤ : ޤ
<br>
<li><samp>Bad defined syntax</samp><br>
#if defined ʸˡְäƤޤäбȤƤʤäꡢ
identifier ˤʤäƤʤäξǤޥŸη̡Υ顼äϡΥå³ƤŸ̤ɽޤ<br>
<li><samp>Can't use a string literal "string"</samp><br>
#if ˤʸƥϻȤޤ<br>
<li><samp>Can't use a character constant 'a'</samp><br>
<i>POSTSTD</i> ⡼ɤǤ
#if ʸ磻ʸϻȤޤ<br>
<li><samp>Can't use the operator "++"</samp><br>
#if ˻Ȥʤ黻Ҥޤ=, ++ Ǥ<br>
<li><samp>Not an integer "1.23"</samp><br>
#if ԤˤʸޤˤȤޤ<br>
<li><samp>Can't use the character 0x24</samp><br>
#if ˻Ȥʤʸʥ 0x24ˤޤ
identifier, operator, punctuator, string literal, character constant, preprocessing number Τɤ preprocessing token ˤפʤʸΥȡǤʥȥ륳ɤϤ˥åƤΤǡʳʸˡ
$ identifier ǧϤǤ⡢ץˤäƤϤ줬Ȥʤʤޤ
åפ group ˤΤϥåޤ<br>
</ul>
<p> #if sizeof ˴ؤ륨顼Ǥpre-Standard ξǤ</p>
<ul>
<li><samp>sizeof: Syntax error</samp><br>
#if sizeof ʸˡְäƤޤäʤäꡢä¿ꡢäбȤƤʤäꡢʤäꤹǤ<br>
<li><samp>sizeof: No type specified</samp><br>
#if sizeof (type) type ꤵƤޤsizeof (*) ʤɤǤsizeof ((*)()) ϴؿؤΥݥΥ legal ʹʸǤ<br>
</ul>
<h3><a name="5.4.6" href="#toc.5.4.6">5.4.6. #if ɾ˴ؤ륨顼</a></h3>
<p>Υ顼ɾåפʬˤϵޤ-W8 ץǤϤˤĤƤ⥦˥Фˡ</p>
<p>#if C99 ǤϤνϤλĺǡC90, C++98 Ǥ long / unsigned long ɾΤǤ<b>mcpp</b> Ǥ C90, C++98 Ǥ long long / unsigned long long ɾޤC90, C++98 long / unsigned long ϰϤĶϥ˥Фޤ<br>
long long ΤʤϤǤϡ long long / unsigned long long long / unsigned long ɤؤƤpre-Standard ǤϤ٤ (signed) long ɤؤƤ<i>POSTSTD</i> Ǥ #if ʸϻȤʤΤǡ̤Υ顼ˤʤޤ</p>
<ul>
<li><samp>Constant "123456789012345678901" is out of range</samp><br>
ͤ unsigned long long ɽǤϰϤĶƤޤ<br>
<li><samp>Integer character constant 'abcdefghi' is out of range</samp><br>
ʸ 'abcdefghi' ͤ unsigned long long ɽǤϰϤĶƤޤ<br>
<li><samp>Wide character constant L'abcde' is out of range</samp><br>
磻ʸ L'abcde' ͤ unsigned long long ɽǤϰϤĶƤޤ<i>STD</i> ⡼ɤλǤ<br>
<li><samp>8 bits can't represent escape sequence '\x123'</samp><br>
ʸΣĤ escape sequence ͤ 8 bits ɽǤϰϡ[0, 0xFF]ˤĶƤޤ<br>
<li><samp>16 bits can't represent escape sequence L'\x12345'</samp><br>
磻ʸΣĤ escape sequence ͤ 16 bits UTF-8 ξ 32 bitsˤɽǤϰϤĶƤޤ<i>STD</i> ⡼ɤλǤ<br>
<li><samp>Division by zero</samp><br>
#if 0 ˤ껻ޤ껻 / ˤΤ % ˤΤޤ#if dividend / divisor .. divisor ޥȤƤʤʤɤ˵ޤ#if defined divisor && (dividend / divisor ..) ȽȤǡΥ顼뤳ȤǤޤ<br>
<li><samp>Result of "op" is out of range</samp><br>
黻 op ˤ黻η̤ long long ϰϳȤʤޤop ϣ黻 *, /, %, +, - Τɤ줫Ǥɽξϡñ '-' 黻Ҥ -<tt>LLONG_MIN</tt> ǥСեȤʤޤUnsigned long long ϥСե뤳ȤʤΤǥ顼ˤϤʤޤŪʱ黻̤ϰϳȤʤϥ˥Фޤ<br>
</ul>
<p> sizeof ˴ؤ륨顼ǤåפʬǤϽФޤ-W8 ץǤϥ˥Фˡpre-Standard ξǤ</p>
<ul>
<li><samp>sizeof: Unknown type "type"</samp><br>
#if sizeof (type) type ѤǤ<br>
<li><samp>sizeof: Illegal type combination with "type"</samp><br>
#if sizeof (long float)
ȡȤ߹碌ѤǤ<br>
</ul>
<h3><a name="5.4.7" href="#toc.5.4.7">5.4.7. #define Υ顼</a></h3>
<p> #define ˴ؤ륨顼Ǥ
ޥޤ</p>
<p>#, ## 黻Ҥ˴ؤ륨顼 Standard
⡼ɤΤΤǤ<br>
<samp>__VA_ARGS__</samp> ˴ؤ륨顼 Standard ⡼ɤξǤ
Ѱޥ C99 λͤǤGCC, Visual C++ 2005, 2008 ȤθߴΤ C90 Ǥ C++ ǤͭȤƤޤʤ˥Фˡ</p>
<ul>
<li><samp>"defined" shouldn't be defined</samp><br>
defined Ȥ̾ΥޥǤޤ Standard ⡼ɤǥåޤ<br>
<li><samp>"__STDC__" shouldn't be redefined</samp><br>
ޥ <tt>__STDC__</tt> #define Ǥޤ<tt>__STDC_VERSION__</tt>, <tt>__FILE__</tt>, <tt>__LINE__</tt>, <tt>__DATE__</tt>, <tt>__TIME__</tt> C99 ⡼ɤǤ <tt>__STDC_HOSTED__</tt> -+ ץǤ <tt>__cplusplus</tt> ƱͤǤ Standard ⡼ɤǥåޤ<br>
<li><samp>"__VA_ARGS__" shouldn't be defined</samp><br>
C99 ǤϲѰޥִꥹ <samp>__VA_ARGS__</samp> ȤѥȤޤ identifier ϥޥȤ뤳ȤϤǤޤ<br>
<li><samp>More than <i>NMACPARS</i> parameters</samp><br>
ޥǥѥο <i>NMACPARS</i> ĶƤޤ<br>
<li><samp>Empty parameter</samp><br>
ޥ˥Υѥޤ
<br>
<li><samp>Illegal parameter "123"</samp><br>
ޥ identifier ʳΥȡѥ˻ȤƤޤ
Standard ⡼ɤǤϡidentifier ǤäƤ <samp>__VA_ARGS__</samp> ϥѥȤƻȤޤ<br>
<li><samp>Duplicate parameter name "a"</samp><br>
ޥ a Ȥѥ̾ʣƤޤ<br>
<li><samp>Missing "," or ")" in parameter list "(a,b"</samp><br>
ޥǥѥꥹȤĤ
) ޤޤϥѥľ ',' Ǥ ')' Ǥʤ̤Υȡޤ<br>
<li><samp>No token before ##</samp><br>
ޥִꥹ ## 黻Ҥ˥ȡޤ<br>
<li><samp>No token after ##</samp><br>
ޥִꥹ ## 黻Ҥθ˥ȡޤ<br>
<li><samp>## after ##</samp><br>
ޥִꥹ ## ## Ȥȡ¤Ӥޤϥ顼ǤϤʤȤ⤢뤫⤷ޤ## Ȥȡ¾ΥȡϢ뤵ɬ valid ǤʤȡȤʤΤǡΥޥŸˤɬ顼ˤʤޤ<b>mcpp</b> ǤϤϥޥ˥顼ˤޤ<br>
<li><samp>Not a formal parameter "id"</samp><br>
ؿͥޥ # 黻ҤΥڥ id ѥ̾ǤϤޤ<br>
<li><samp>"..." isn't the last parameter</samp><br>
"<samp>...</samp>" ȤѥϥޥκǸΥѥǤʤФʤޤpre-Standard ⡼ɤǤ <samp>...</samp> Illegal parameter 顼ˤʤˡ<br>
<li><samp>"__VA_ARGS__" without corresponding "..."</samp><br>
ִꥹ <samp>__VA_ARGS__</samp> Ȥ identifier <samp>...</samp> Ȥѥ礷Ȥޤ<br>
</ul>
<p>GCC-specific-build <i>STD</i> ⡼ɤǤ GCC2 ͤβѰޥȤޤΥޥ <samp>__VA_ARGS__</samp> ȤƤȡΥ顼ˤʤޤ
<samp>__VA_ARGS__</samp> Ȥʤ GCC3 ͤ C99 ͤǽʤФʤޤ</p>
<ul>
<li><samp>__VA_ARGS__ cannot be used in GCC2-spec variadic macro</samp><br>
</ul>
<h3><a name="5.4.8" href="#toc.5.4.8">5.4.8. #undef Υ顼</a></h3>
<p> #undef ˴ؤ륨顼Ǥ</p>
<ul>
<li><samp>"__STDC__" shouldn't be undefined</samp><br>
ޥ <tt>__STDC__</tt> #undef Ǥޤ
<tt>__STDC_VERSION__</tt>, <tt>__FILE__</tt>, <tt>__LINE__</tt>, <tt>__DATE__</tt>, <tt>__TIME__</tt> C99 ⡼ɤǤ <tt>__STDC_HOSTED__</tt> -+ ץǤ <tt>__cplusplus</tt> ƱͤǤ Standard ⡼ɤξ˥åޤ<br>
</ul>
<h3><a name="5.4.9" href="#toc.5.4.9">5.4.9. ޥŸΥ顼</a></h3>
<p>ϥޥŸ˴ؤ륨顼ǤΥޥɽ졢ΥޥΤ륽ե̾ȹֹɽޤ#, ## 黻Ҥ˴ؤ륨顼 Standard ⡼ɤǤ</p>
<ul>
<li><samp>Less than necessary N argument(s) in macro call "macro( a)"</samp><br>
ޥƤӽФΰޤmacro ˤϰ N ɬפǤʤˤ 0 ĤΥȡƤơ³ޤѥĤǰξϥȰηȤζ̤Ĥޤϥ顼ˤޤ<i>OLDPREP</i> ⡼ɤǤϤϥ˥Ǥ<br>
<li><samp>More than necessary N argument(s) in macro call "macro( a, b, c)"</samp><br>
ޥƤӽФΰ¿ޤmacro ΰ N ĤΤϤǤ;פʰΤƤơ³ޤ<i>OLDPREP</i> ⡼ɤǤϤϥ˥Ǥ<br>
<li><samp>Not a valid preprocessing token "+12"</samp><br>
## 黻ҤˤäƣĤ pp-token Ϣ뤷Ȥ"+12" Ȥ invalid ʤΤˤʤޤϸڤΥ뤫⤷ޤΤޤ³ޤ-lang-asm (-x assembler-with-cpp, -a) ץǤϡϥ˥Ǥ<br>
<li><samp>Not a valid string literal "\\"str\""</samp><br>
# 黻ҤˤäƥޥƤӽФΰʸȤͭʡñΡʸƥȤϤʤ餺"\\"str\"" Ȥ token sequence ˤʤޤƥγ \ Τ뤳ȤǤʥƥγ \ ʸȡUnterminated string literal Υ顼ˤʤ뤳Ȥ⤢ꡢΥ顼ˤʤʤȤ⤢ˡΤޤ³ޤ֤ѥեǺ٥顼ˤʤǤ礦<i>POSTSTD</i> ⡼ɤǤϤΥ顼ȯޤUnterminated string literal Ϥꤦˡ<br>
</ul>
<p>ʲΥ顼ǤϡΥޥƤӽФϥåפޤ</p>
<ul>
<li><samp>Buffer overflow expanding macro "macro" at "something"</samp><br>
ޥŸ
something ΤȤǥХåեСեޤޥʬ䤷Ƥ<br>
<li><samp>Unterminated macro call "macro( a, (b, c)"</samp><br>
ޥƤӽФ뤷ƤޤΥ顼ΤϤƤϡǥ쥯ƥֹԤǤΥޥƤӽФιԤǴ뤷ƤʤǤޤStandard ⡼ɤǤϰΥޥϰִΩäŸޤλˤΥޥƤӽФϤΰǴ뤷ƤʤФʤޤ<i>POSTSTD</i> ⡼ɤǤϥޥִꥹˤޥƤӽФִꥹȤǴ뤷Ƥʤ⡢Υ顼Ȥʤޤ<br>
<li><samp>Rescanning macro "macro" more than <i>RESCAN_LIMIT</i> times at "something"</samp><br>
ޥΥͥȤơŸ "something" ΤȤǺβ <i>RESCAN_LIMIT</i> ĶޤStandard ⡼ɤξǤޤꤨޤ<br>
<li><samp>Recursive macro definition of "macro" to "macro"</samp><br>
ޥƵŪǤ pre-Standard ⡼ɤλꤦ륨顼Ǥβ <i>PRESTD_RESCAN_LIMIT</i> ãȺƵŪޥȤߤʤޤ<br>
</ul>
<p>Υ顼 <i>STD</i> ⡼ɤ -K ץꤷȤΤΤǤ
Ȥˡޥüʣʤᡢmacro notification ΤΥХåեʤʤäȤ̣Ƥޤ
ºݤˤϤޤޤ</p>
<ul>
<li><samp>Too many magics nested in macro argument</samp>
<li><samp>Too many nested macros in tracing MACRO</samp>
</ul>
<h3><a name="5.4.10" href="#toc.5.4.10">5.4.10. #error, #assert</a></h3>
<ul>
<li><samp>#error</samp><br>
#error ǥ쥯ƥ֤¹Ԥޤ #error ԤɽޤʰΤΤ˥ȡ顼unterminated string ˤä #error ϼ¹Ԥʤˡ#error Standard ⡼ɤξǤ<br>
<li><samp>Preprocessing assertion failed:</samp><br>
#assert ǥ쥯ƥ֤¹Ԥޤθդ³ #assert ԤΰϤޤμΤΤ˥顼äϡassertion ԤΤȤߤʤޤ#assert pre-Standard ⡼ɤ COMPILER != GNUC ξǤ<br>
</ul>
<h3><a name="5.4.11" href="#toc.5.4.11">5.4.11. #include μ</a></h3>
<ul>
<li><samp>Can't open include file "file-name"</samp><br>
Include ٤ե뤬¸ߤʤˤΥ顼ȯޤ֤ե̾Υڥߥ include directory λδְ㤤Ǥ礦<br>
</ul>
<h3><a name="5.4.12" href="#toc.5.4.12">5.4.12. ¾Υ顼</a></h3>
<p>ΣĤ Standard ⡼ɤ C99 ΤΤǤ
C++ Ǥ -V199901L ץǵưƱͤǤ</p>
<ul>
<li><samp>Operand of _Pragma() is not a string literal</samp><br>
_Pragma() operator ΰϣĤʸƥޤϥ磻ʸƥǤʤФʤޤ<br>
<li><samp>_Pragma operator found in directive line</samp><br>
_Pragma() operator #pragma ǥ쥯ƥ֤ˤʤΤǤ
ǥ쥯ƥֹԤǻȤȤϤǤޤ
</ul>
<br>
<h2><a name="5.5" href="#toc.5.5">5.5. Warning (class 1)</a></h2>
<p>ʸˡŪˤϴְ㤤ǤϤʤνְ㤤βǽ
portability Τˡwarning ФޤWarning ˤ 1, 2, 4, 8, 16 ΣĤ class ޤ<b>mcpp</b> εư -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 ޤߤޤ</p>
<p>Standard ⡼ɤǤ Standard C undefined ȤƤư¿ error ˤޤˤĤƤ warning Фޤ</p>
<p>Ʊͤ Standard ⡼ɤǤ Standard C unspecified ȤƤͤȤФƤϡʳɬ warning Фޤ</p>
<ol>
<li>#if sub-expression ɾˤĤƤϡwarning ϽФʤ||, &&, ? : ʳα黻Ҥ˴ؤƤ operand ɾ unspecified Ǥ뤬#if ѤʤΤǡɾϷ̤ˤϱƶʤǤ롣<b>mcpp</b> ǤϡȡɾϾ˽иƱ˺鱦˹Ԥδ֤α黻Ͼ˱黻ҤΥ롼ԥε§˽äơιͤɬפˤʤä˽ƹԤ<br>
</ol>
<p>Standard ⡼ɤǤϡimplementation-defined ȤƤư¿ˤĤƤ warning ФޤImplementation-defined Ǥʤ warning νФʤΤϡǤ</p>
<ol>
<li>#include directive include եõꡢ #include ΰ header-name Ȥ pp-token ۤˡ warning ФƤΤǤϤ뤵header-name ϥޥǤʤСΥȡ space ̵ͭޤƤΤޤȤ롣ޥǤСŸ̤ space ̵ͭޤƤΤޤȤ<i>POSTSTD</i> ⡼ɤǤϡޥŸˤä pp-token ֤ space 뤬ξ < > ޤǤ space ƤäĤΤ header-name Ȳ᤹롣ɤˤƤ <i>POSTSTD</i> Ǥ <, > ˤ header-name obsolescent feature ǤˡWarning ϽФʤˡ#pragma MCPP debug path, #debug path ǥѥɽ롣<br>
<li>#if Ǥ single byte ʸ'a' ˤɾȡñ multi- byte character Υ磻ʸL'' ˤɾϴʸåȤƱǤäƤ⡢single byte ΥʤȤ̵ͭȤ en-coding Ȥˤä portability Ϥ¤ΤǤ뤬꤬ʤUCN ˤĤƤƱͤǤ롣<br>
<li>#if ӥåȱ黻ɽˤäƷ̤ͤۤʤ뤬ȾΥޥϣɽȤäƤΤǡȤ portability ϤۤȤ¸ߤʤαӥåȥեȤ operand ޤν portability ˳Τǡwarning Ф<br>
<li>Token separator ȤƤʣ white spaces sequenceStandard C Ǥ translation phase 3 Ǥ one space ˰̤뤫ɤ implementation-defined ȤƤ뤬̾ϥ桼ϤޤäˤɬפϤʤPortability ˤʤΤϡpreprocessing directive Ԥ <vertical-tab> ޤ <form-feed> Ǥ롣<b>mcpp</b> ǤϤ space Ѵ뤬λ warning Фʣ space, tab sequence one space ۤäư̤롣<br>
<li>ȼȤ߹ߥޥˤĤƤ warning ϽФʤ<br>
<li>#pragma
sub-directive ˤĤƤ⸶§Ȥ warning ϽФʤ<b>mcpp</b> Ȥ #pragma once, #pragma __setlocale, #pragma MCPP * ǰְäƤϡwarning ФޤGCC V.3 Ǥ #pragma GCC poison (dependency) Τ褦ˡ°ΥץץåϽ뤬 <b>mcpp</b> Ͻʤ #pragma ˤĤƤ warning Ф<br>
<li>C99 ǤϡUCN sequence # 黻Ҥˤäʸ硢\ \\ Ȥդ˽Ťͤ뤫ɤ implementation-defined ȤʤäƤ뤬ˤĤƤ warning ϽФʤ<b>mcpp</b> Ǥ \ ϽŤͤʤ<br>
</ol>
<p>äơ<b>mcpp</b> ǤϥץץΥ٥Ǥ portability Υåܴۤ˹ԤȤǤޤ</p>
<p><i>POSTSTD</i> ⡼ɤǤϡ<a href="#2.1"> 2.1</a> ˤͤΰ㤤 <i>STD</i> ⡼ɤƱͤǤ
</p>
<p>˥ĽФƤ⡢פξ֤ͤޤ-W0
Υץǵưȡ˥ϽФޤ</p>
<h3><a name="5.5.1" href="#toc.5.5.1">5.5.1. ʸȡӥȤ˴ؤ륦˥</a></h3>
<ul>
<li><samp>Converted [CR+LF] to [LF]</samp><br>
ԥɤ
[CR+LF] [LF] ѴޤWindows ѤΥե UNIX ϤΥƥǥѥ뤹ȡΥ˥ФơԥɤưŪѴޤΥ˥ϣФޤCompiler-independent-build Ǥϥ饹ǡcompiler-specific-build Ǥϥ饹Ǥ<br>
<li><samp>Illegal control character 0x1b in quotation</samp><br>
ʸƥ롢ʸheader name white space Ǥʤȥ륳ɤޤϥѥΤǥ顼ˤʤ뤫⤷ޤǤʤƤ⡢ʤǤȥ륳ɤʸƥ롢ʸǤ escape sequence ǽ٤Ǥ<br>
<li><samp>Illegal multi-byte character sequence "XY" in quotation</samp><br>
ʸƥ롢ʸheader name XY ΣХܤ multi-byte characterʴˤΣХܤǤХܤ multi-byte character ΣХܤǤϤޤ"XY" ɽϲϤˡ multi-byte character ȤߤʤХܤ single byte character ȤơХܤϼʸȤưޤ<br>
볰ϰϤΥɤǤС˥ϽФޤޤϰϤˤºݤˤʸΤʤ꤬Ȥɤˤޤ<b>mcpp</b> ̾ϤޤǤϥåޤϰϤϼ̤Ǥ<br>
<blockquote>
<table>
<tr><th>encoding </th><td>first byte </td><td>second byte</td></tr>
<tr><th>shift-JIS </th><td>0x81-0x9f, 0xe0-0xfc</td><td>0x40-0x7e, 0x80-0xfc</td></tr>
<tr><th>EUC-JP </th><td>0x8e, 0xa1-0xfe </td><td>0xa1-0xfe</td></tr>
<tr><th>KS C 5601 </th><td>0xa1-0xfe </td><td>0xa1-0xfe</td></tr>
<tr><th>GB 2312-80 </th><td>0xa1-0xfe </td><td>0xa1-0xfe</td></tr>
<tr><th>Big Five </th><td>0xa1-0xfe </td><td>0x40-0x7e, 0xa1-0xfe</td></tr>
<tr><th>ISO-2022-JP</th><td>0x21-0x7e </td><td>0x21-0x7e</td></tr>
</table>
</blockquote>
ISO-2022-JP ˤʸɤΤۤ shift sequence ȤΤޤShift sequence ̤ˤȡUTF-8 ʳϤ٤ multi-byte character ϣХȤǤ<br>
UTF-8 Ǥ multi-byte character ϣХȤޤϣХȡˣХȤǤꡢȾδϣХȤ encode ޤ
Хܤ 0xc2-0xefХܰʹߤ 0x80-0xbf ϰϤˤޤܺ٤ϾάޤɤˤƤ⡢ƥХȤϤϰϤˤʤФʤޤ
ޤϰˤ illegal sequence ¸ߤޤ<b>mcpp</b> Ϥ˥˥Фޤ<br>
ʤEUC-JP 0x8f + 0xa1-0xfe + 0xa1-0xfe ΣХ encoding JIS X 0212 ΤˤϣʸȤƤǧǤ0x8f, 0xa1-0xfe + 0xa1-0xfe ΣʸȤǧޤη̡˥Ф#if Υ磻ʸɾʳϡưޤEUC-JP ǤϣХܤ 0x8e ʸJIS X 0201 ΤȾѥʡˤϣХ encoding ǤΤǡmulti-byte character Ȥưޤ<br>
Υ˥ϥåפ #if group ǤϽФޤ<br>
<li><samp>"/*" in comment</samp><br>
/* Ȥ sequence ޤտޤƽΤǤʤСȤĤ˺Ǥ礦ȤϥͥȤǤޤ<br>
<li><samp>Too long identifier, truncated to "very_long_identifier"</samp><br>
Identifier Ĺ <i>IDMAX</i> ĶƤΤǡ<i>IDMAX</i> ˽̤ޤ<br>
<li><samp>Illegal digit in octal number "089"</samp><br>
ʤοͥȡ 8 ޤ 9 ʸޤpre-Standard ⡼ɤǤФޤStandard ⡼ɤǤ̾ιԤοͥȡˤĤƤȽϤޤ#if ˤΥȡС Not an integer 顼ΰȤʤޤ<br>
<li><samp>Unterminated string literal, catenated to the next line</samp><br>
ĤƤʤʸƥ̾ϥ顼Ǥ-lang-asm (-x assembler-with-cpp, -a) ץǵư줿ϡϹԤޤʸƥȲᤷơ'\n' ƼιԤϢ뤷ޤνåȤϲʤΤǡܤʸƥϢפεǽȤäƽƤ<br>
<li><samp>Unterminated character constant 't understand.</samp><br>
ʸ뤷Ƥޤ
lang-asm ⡼ɤǤϤϥ顼ˤϤʤޤ<br>
</ul>
<h3><a name="5.5.2" href="#toc.5.5.2">5.5.2. 뤷ʤեΥ˥</a></h3>
<p>եκǸιԤȾüǤˡΥ˥Фޤold_prep ⡼ɤǤϥ˥Фޤ</p>
<ul>
<li><samp>End of file with no newline, supplemented newline</samp><br>
ե뤬ԥɤΤʤԤǽäƤƤϤʤޤԥɤ䤤ޤ<br>
<li><samp>End of file with \, deleted the \</samp><br>
ե뤬 <backslash><newline> ǽäƤƤϤʤޤ<backslash> ޤ<br>
<li><samp>End of file with unterminated comment, terminated the comment</samp><br>
ȤĤ˺ǤȤĤޤ<br>
</ul>
<p>Υ˥
pre-Standard ⡼ɤǤФޤStandard ⡼ɤǤϥ顼ˡϤνǤʤϡΥ˥̵뤷ƽ³ޤη̤Ϥ̯ʥ顼Ǥ礦<i>OLDPREP</i> ⡼ɤǤ unterminated macro call ʳϥ˥Фޤ</p>
<ul>
<li><samp>End of file within #if (#ifdef) section started at line 123</samp><br>
<li><samp>End of file within macro call started at line 123</samp><br>
<li><samp>End of file with unterminated #asm block started at line 123</samp><br>
123 Ԥ #asm б #endasm ޤ<br>
</ul>
<h3><a name="5.5.3" href="#toc.5.5.3">5.5.3. ǥ쥯ƥֹԤ˴ؤƼΥ˥</a></h3>
<ul>
<li><samp>The macro is redefined</samp><br>
³ưΤե̾ȹֹ椬ɽޤ
<br>
ޥȤϰäƤǺޤ
Ƥʤ˰㤤ޤƱ̾ΥޥʣƤϡξƤʤȺȤʤꡢΥ˥Фޤ<br>
<ol>
<li>ѥοƱ<br>
<li>ִꥹȤƱʤȡ֤Σİʾ white spaces ϤĤäƤ⣱ĤȤߤʤ<i>POSTSTD</i> Ǥ token separator äƤʤƤ⼫ưŪ a space ѴΤǡtoken separator ΰ㤤ˤʤʤˡ<br>
<li><i>STD</i> ⡼ɤǤϥѥ̾Ʊ<i>POSTSTD</i> ǤϤϥåʤpre-Standard ⡼ɤǤåʤ<br>
</ol>
<br>
<li><samp>Unknown argument "name"</samp><br>
#pragma MCPP debug, #debug ΰȤ "name" ϼƤޤ<br>
<li><samp>No argument</samp><br>
#pragma MCPP debug, #debug ΰޤ<br>
<li><samp>Not an identifier "123"</samp><br>
#pragma MCPP
debug, #debug ΰ identifier ǤϤޤ<br>
</ul>
<p> Standard ⡼ɤξǤ</p>
<ul>
<li><samp>"and" is defined as macro</samp><br>
C++ and ޥȤޤ
<br>
C95 Ǥ <iso646.h> ǥޥȤ "and" Σ̾ϡ
C++ Ǥ operator token ǤC++ ǤϤϥޥȤ뤳ȤǤʤΤǤ operator ȤƼƤʤϤǤȤ褦ˡޥȤ뤳Ȥʤ饦˥Фޤ<br>
</ul>
<p> <i>STD</i> ⡼ɤξǤ</p>
<ul>
<li><samp>No space between macro name "MACRO" and repl-text</samp><br>
#define
ԤΥޥִ̾ΥꥹȤȤδ֤˥ڡޤ̾ϤꤨʤȤǤ<br>
<pre>#define THIS$AND$THAT(a, b) ((a) + (b))</pre>
Ȥդ˥ޥ̾˵ʳʸȤƤȡ<br>
<pre>#define THIS $AND$THAT(a, b) ((a) + (b))</pre>
ȲᤵơΥ˥Фޤ<br>
</ul>
<p> lang-asm ⡼ɤξǤ</p>
<ul>
<li><samp>Illegal #directive "+"</samp>
<li><samp>Unknown #directive "pseudo-directive"</samp><br>
lang-asm ⡼ɤǤʤХ顼ˤʤȤǤlang-asm ⡼ɤ˸¤äƥ˥ФǤ<br>
</ul>
<p>ʲ #pragma ˴ؤ륦˥ Standard ⡼ɤξǤ˥ϽФƤ⤽ιԤϸ§ȤƤΤޤϤޤ#pragma MCPP, #pragma GCC ǻϤޤԤΤץץǽ٤ΤϽϤޤ
#pragma GCC visibility * Τ褦˥ѥΤιԤϡ˥ʤˤΤޤϤޤ</p>
<ul>
<li><samp>No sub-directive</samp><br>
#pragma Ԥ˲ΰ⤢ޤιԤ̵뤵ޤ<br>
<li><samp>Unknown encoding "encoding"</samp><br>
#pragma
__setlocale( "encoding") ǻꤵ줿 "encoding" Ȥ encoding ϼƤޤencoding ̾ˤĤƤ <a href=#2.8>2.8</a> Ƥ<br>
<li><samp>Too long encoding name "encoding"</samp><br>
#pragma __setlocale( "long-long-encoding") ǻꤵ줿 "long-long-encoding" Ȥ encoding ̾ 19 ХȤĶƤΤǡ̵뤷ޤ<br>
<br>
<li><samp>Bad push_macro syntax</samp><br>
<li><samp>Bad pop_macro syntax</samp><br>
#pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro, #pragma pop_macro ιʸְäƤޤ #pragma Ǥϰϥޥ̾ ", " ǰϤߡˤ (, ) ǰϤǡ("MACRO") ȤʤФʤޤVisual C ߴΤξĹʻͤǤˡ<br>
<li><samp>"MACRO" has not been defined</samp><br>
#pragma MCPP push_macro, #pragma MCPP pop_macro, #pragma push_macro, #pragma pop_macro ΰǤ ("MACRO") MACRO Ϥ⤽ޥȤƤޤ<br>
<li><samp>"MACRO" is already pushed</samp><br>
#pragma MCPP push_macro( "MACRO") MACRO ϤǤ push 졢ˤθ #undef ƤޤMACRO κʤ push Ǥޤ<br>
<li><samp>"MACRO" has not been pushed</samp><br>
#pragma MCPP pop_macro( "MACRO") MACRO push ƤޤǤ pop 줿Τ⤷ޤ<br>
</ul>
<p>GCC ǤǤϼΥ˥Фޤ</p>
<ul>
<li><samp>Ignored #ident</samp><br>
<li><samp>Ignored #sccs</samp><br>
#ident, #sccs ιԤ̵뤷ޤ
<br>
</ul>
<p>GCC ѤǤ #pragma GCC poison, dependency Τɤ줫³Ԥ class 2 Υ˥ФǼΤƤޤ GCC V.3 ǤϥץץåΤǤ<b>mcpp</b> Ͻޤ</p>
<p> pre-Standard ⡼ɤǽФޤStandard ⡼ɤǤϥ顼ˡ</p>
<ul>
<li><samp>Not in a #if (#ifdef) section in a source file</samp><br>
<li><samp>Line number "0x123" isn't a decimal digits sequence</samp><br>
</ul>
<p> <i>KR</i> ⡼ɤξȡ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 ѤǤ <i>STD</i> ⡼ɤ #endif ԤξФޤStandard ⡼ɤΤ¾ξϥ顼<i>OLDPREP</i> Ǥϥ顼⥦˥Фʤˡ</p>
<ul>
<li><samp>Excessive token sequence "junk"</samp><br>
</ul>
<h3><a name="5.5.4" href="#toc.5.5.4">5.5.4. #if ˴ؤ륦˥</a></h3>
<p>ΣĤ #if, #elif, #assert ΰ˴ؤ륦˥Ǥ</p>
<ul>
<li><samp>Macro "MACRO" is expanded to "defined"</samp><br>
#if ǥޥ MACRO ŸȤ defined ˤʤޤ identifier ǤϤʤ黻ҤȤưޤ䤷ʥޥǤStandard C Ǥ undefinedˡ<br>
<li><samp>Macro "MACRO" is expanded to "sizeof"</samp><br>
#if ǥޥ MACRO ŸȤ sizeof ˤʤޤ identifier ǤϤʤ黻ҤȤưޤ䤷ʥޥǤpre-Standard ξǤ<br>
<li><samp>Macro "MACRO" is expanded to 0 token</samp><br>
ޥ MACRO ĤΥȡŸޤ#if Ǥ줬ȯȡƤϲ餫Υ顼ˤʤޤΥ˥ϥ顼θ餫ˤ뤿ΤΤǤ<br>
</ul>
<p> #if, #elif, #assert ΰ˴ؤ륦˥ǤɾåפʬǤϽФޤ-W8 ץǤϽФˡ</p>
<ul>
<li><samp>Undefined escape sequence '\x'</samp><br>
\x Ȥ escape sequence Ϥޤñʤ \x ȤХȤ sequence Ȥɾޤ\x ˣʸ³ escape sequence ϤˡUCN ΥʤƱͤǤ<br>
</ul>
<p> #if (#elif, #assert) Ԥα黻ȷ˴ؤ륦˥ǤϤꥹåפʬ˴ؤƤϽФޤ-W8 ץǤϽФˡ</p>
<p>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 Ǥ<br>
<i>POSTSTD</i> ⡼ɤǤʸ #if ˤϻȤʤΤǡ˥Фޤʥ顼ˤʤˡ</p>
<ul>
<li><samp>Constant "123456789012" is out of range of (unsigned) long</samp><br>
ͤ (unsigned) long ɽǤϰϤĶƤޤ<br>
<li><samp>Integer character constant 'abcde' is out of range of unsigned long</samp><br>
ʸ 'abcde' ͤ unsigned long ɽǤϰϤĶƤޤ<br>
<li><samp>Wide character constant L'abc' is out of range of unsigned long</samp><br>
磻ʸ L'abc' ͤ unsigned long ɽǤϰϤĶƤޤ<br>
<li><samp>Result of "op" is out of range of (unsigned) long</samp><br>
黻 op ˤ黻η̤ (unsigned) long ϰϳȤʤޤop ϣ黻 *, /, %, +, - Τɤ줫Ǥɽξϡñ - 黻Ҥ -<tt>LONG_MIN</tt> ǥСեȤʤޤUnsigned long ϥСե뤳ȤʤΤǥ顼ˤϤʤޤŪʱ黻̤ϰϳȤʤϥ˥Фޤ<br>
<li><samp>LL suffix is used in other than C99 mode "123LL"</samp><br>
C99 ʳΥ⡼ɤ LL ȤҤȤƤޤ<br>
<li><samp>Shift count "40" is larger than bit count of long</samp><br>
ӥåȥեȱ黻
<<, >> α operand ͤ long ΥӥåĶƤޤ<br>
<br>
<li><samp>Negative value "-1" is converted to positive "18446744073709551615"</samp><br>
ʤĤȤκ黻η̡ĤʤѴޤϥ顼ǤϤޤ֤β餫δְ㤤Ǥ礦黻 *, /, %, +, -, <, >, <=, >=, ==, !=, &, ^, | ξաӣ黻 ? : 裲裳 operand ˤĤƤϡʤξϡ¾ĤǤʤѴޤ<br>
<li><samp>Illegal shift count "-1"</samp><br>
ӥåȥեȱ黻 <<, >> α operand ͤǤޤ long long ΥӥåĶƤޤ⥽δְ㤤Ǥ礦<br>
<li><samp>"op" of negative number isn't portable</samp><br>
黻 op η̤ϡoperand ΰޤǤ portability ޤop /, %, >> Τɤ줫Ǥ operand ξ >> 黻Ҥϡѥե̿ CPU νϤδ֤Ǥ portability ϤǤʣӥåȤΥեȤǣdzä̤ˤʤˡǤʤ CPU νϤȤδ֤Ǥ portability ޤ<br>
</ul>
<h3><a name="5.5.5" href="#toc.5.5.5">5.5.5. ޥŸ˴ؤ륦˥</a></h3>
<p>Υ˥ǤϤΥޥɽ졢ΥޥΤ륽ե̾ȹֹɽޤ</p>
<ul>
<li><samp>Macro started at line 123 swallowed directive-like line</samp><br>
123 ԤϤޤäޥ # ǻϤޤԤȤɤ߹ߤޤ֤ޥƤӽФδְ㤤Ǥ礦ޥʤС# ǻϤޤԤ directive line ȤƲᤵϤǤåפ #if group ǤϥޥäƤŸʤΤǡιԤ directive line ȤƲᤵޤ<br>
<li><samp>Replacement text "sub(" of macro "head" involved subsequent text</samp><br>
ޥ "head" ִꥹ "sub(" κǥޥƤӽФθΥƥȤޤޤ K&R 1st. Standard C ˻ޤǥ顼ǤϤޤ⤷տޤˤμΥޥȤäƤΥ˥Фʤ顢ϥޥޤϥޥƤӽФδְ㤤ǤտޤƻȤäΤǤа۾ʥޥǤ<br>
Υ˥ <i>STD</i> ⡼ɤξǤ<i>COMPAT</i> ⡼ɤǤϤΥ˥ class 8 ǤФޤpre-Standard ⡼ɤǤƱݤϵޤ˥ϽФޤ<i>POSTSTD</i> ǤϺִꥹȤθΥƥȤϼޤʤΤǡΥ˥Ϸ褷ƽФޤunterminated macro call Υ顼ˤʤȡޤääŸ̤ˤʤȤˡ<br>
<li><samp>Less than necessary N argument(s) in macro call "macro( a)"</samp><br>
ޥƤӽФΰޤ̾Ϥϥ顼ǤѰޥǰĤʤäϥ˥ˤȤɤƤޤGCC βѰޥ C99 ΤȤδ֤ΰܿξ㳲餹Ǥ<br>
<li><samp>Removed ',' preceding the absent variable argument</samp><br>
GCC3 ͤβѰޥθƤӽФDzѰ 0 ĤǤ뤿ᡢִꥹȤDzѰľˤ륳ޤޤStandard ⡼ɤ GCC-specific-build ξǤ<br>
<li><samp>Old style predefined macro "linux" is used</samp><br>
'_' ǻϤޤʤʰȿλޥȤޤ
Standard ⡼ɤ GCC-specific-build ξǤ<br>
</ul>
<p>ΣĤ <i>OLDPREP</i> ⡼ɤǤ¾Υ⡼ɤǤϥ顼ˡ</p>
<ul>
<li><samp>Less than necessary N argument(s) in macro call "macro( a)"</samp><br>
<li><samp>More than necessary N argument(s) in macro call "macro( a, b, c)"</samp><br>
</ul>
<h3><a name="5.5.6" href="#toc.5.5.6">5.5.6. ֹ˴ؤ륦˥</a></h3>
<p>Ϲֹ˴ؤ륦˥Ǥ</p>
<ul>
<li><samp>Line number "32768" is out of range of [1,32767]</samp><br>
C90, C++ Ǥ #line
[1,32767] ϰϤˤʤФʤޤ0 ⥨顼Ǥ<tt>__STDC_VERSION__</tt> >= 199901L ޤ <tt>__cplusplus</tt> >= 199901L ξϤΰͭϰϤ [1,2147483647] ǤäơC90, C++ Ǥ [32768,2147483647] ϰϤϥ顼ǤϤʤ˥ˤȤɤƤޤ<br>
Standard ⡼ɤξǤ<br>
</ul>
<p>C90 Ǥ #line 32767
Ͼ˶ᤤֹꤷ硢λǤϥ顼ˤʤʤΤΡ줳ϰϤСޤС硢<b>mcpp</b> Ǥ warning ФǹֹΤޤ䤷³ƤޤѥΤˤäƤϤʤ⤷ޤ#line λ꤬ߤ礭ȤǤ</p>
<ul>
<li><samp>Line number 32768 got beyond range</samp><br>
ιֹ椬 32768 ãޤλǣ warning Фޤ<br>
<li><samp>Line number 32769 is out of range</samp><br>
ޥ <tt>__LINE__</tt> ŸȤ32767 Ķޤ<br>
</ul>
<h3><a name="5.5.7" href="#toc.5.5.7">5.5.7. #pragma MCPP warning (#warning)</a></h3>
<ul>
<li><samp>#warning</samp><br>
<li><samp>#pragma MCPP warning</samp><br>
#pragma
<b>mcpp</b> warning (#warning) ǥ쥯ƥ֤¹ԤޤιԤɽޤʰΤΤ˥ȡ顼Unterminated string ˤä #pragma MCPP warning ϼ¹ԤʤˡΥǥ쥯ƥ֤ص warning level 1 ΤȤ˷ǺܤƤޤºݤˤ warning level ˴طʤɬɽޤ<br>
#pragma MCPP warning Standard ⡼ɤξǡpre-Standard ⡼ɤǤ #warning Ǥ<br>
</ul>
<h2><a name="5.6" href="#toc.5.6">5.6. Warning (class 2)</a></h2>
<p>ְ㤤ǤϤʤ portability Τ륱ˤĤƤΥ˥Ǥ</p>
<ul>
<li><samp>Converted [CR+LF] to [LF]</samp><br>
ԥɤ [CR+LF] [LF] ѴޤΥ˥ compiler-independent-build Ǥϥ饹ǡcompiler-specific-build Ǥϥ饹Ǥ<br>
</ul>
<p>#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 Ǥ</p>
<ul>
<li><samp>Constant "123456789012" is out of range of (unsigned) long</samp><br>
<li><samp>Integer character constant 'abcde' is out of range of unsigned long</samp><br>
<li><samp>Wide character constant L'abc' is out of range of unsigned long</samp><br>
<li><samp>Result of "op" is out of range of (unsigned) long</samp><br>
<li><samp>LL suffix is used in other than C99 mode "123LL"</samp><br>
<li><samp>I64 suffix is used in other than C99 mode "123i64"</samp><br>
<li><samp>Shift count "40" is larger than bit count of long</samp><br>
</ul>
<p>ΣĤ Standard ⡼ɤξǤ</p>
<ul>
<li><samp>Parsed "//" as comment</samp><br>
// ޤǤȤȤƲᤷޤC99 C++ ǤϹˡǤC90 Ǥ⥦˥ФǥȤȤưޤ<br>
<li><samp>Variable argument macro is defined</samp><br>
Ѱޥ C99 λͤǤC90, C++ DzѰޥޤ<br>
<li><samp>Empty argument in macro call "MACRO( a, ,"</samp><br>
ޥƤӽФ˥ΰޤ<b>mcpp</b> ǤϤΰϣĤ pp-token sequence ǤȤߤʤ reasonable ʽޤ C99 ǤϹˡǤΤ C90 Ǥ undefined Ǥꡢportability ޤ',' ʤΤϥǤϤʤʤȤߤʤ顼Ȥ롣ĤΰȣĤΥȤϹʸ塢̤ĤʤɤǤäƤ⥨顼ˤϤʤˡ˥Τϰ̤ˤɤǤϤޤǽʾϡ<br>
<pre>
#define EMPTY
</pre>
Ȥơ <tt>EMPTY</tt> ʬ˽ΤɤǤ礦<br>
<li><samp>Skipped the #pragma line</samp><br>
GCC V.3 Ǥ #pragma GCC <args> Ȥ pragma ꡢˤϥץץåΤ⤢ޤ<b>mcpp</b> #pragma GCC poison dependency ϥݡȤƤޤ<br>
°ΥץץåϽ뤬 <b>mcpp</b> Ͻʤ#pragma ˤĤƤϡΥ˥Фޤ<br>
<li><samp>Not a valid preprocessing token "+12"</samp><br>
## 黻ҤˤäƣĤ pp-token Ϣ뤷Ȥ"+12" Ȥ invalid ʤΤˤʤޤ̾ϥ顼Ǥ-lang-asm (-x assembler-with-cpp, -a) ץǵư줿ϥ顼ˤϤʤޤ<br>
</ul>
<p> <i>POSTSTD</i> ⡼ɤξǤ</p>
<ul>
<li><samp>Header-name enclosed by <, > is an obsolescent feature <stdio.h></samp><br>
<stdio.h> Ȥ
header name ѻߤͤǤ"stdio.h" ȤäƤ<br>
</ul>
<p>ΣĤΥ˥ΥƥΤΤǤΥƥǤץǤportability ʤΤǡǰΤ˥˥Фޤ</p>
<ul>
<li><samp>#include_next is not allowed by Standard</samp><br>
<li><samp>#warning is not allowed by Standard</samp><br>
Υǥ쥯ƥ֤ GCC ǤͭǤʳΤΤǤꡢportability ޤ<br>
<li><samp>GCC2-spec variadic macro is defined</samp><br>
GCC2 ͤβѰޥޤ
GCC-specific-build ǤϻȤޤΥޥˤ portability ޤ<br>
<br>
<li><samp>Converted \ to /</samp><br>
#include directive header name \ ޤޤƤΤǡ / Ѵƽޤ Windows ΣϣӤǤ path-delimiter ǤǤ undefined Ǥ/ Ȥäְۤ㤤ޤΥ˥ϣФޤWindows ư <b>mcpp</b> ΤΤǤʤ\ " ľˤϤ " ʸƥ delimiter ȤϲᤷʤΤǡunterminated string literal Υ顼Ȥʤˡ<br>
<li><samp>'$' in identifier "THIS$AND$THAT"</samp><br>
Identifier '$' ޤޤƤޤΥ˥ϣФޤ<i>DOLLAR_IN_NAME</i> <i>TRUE</i> ˤƥѥ뤵줿 <b>mcpp</b> ǤФޤΥƥǤ '$' identifier ͭʸǤportability Ϥޤ¾ΥƥǤ '$' ϣʸ pp-token ȤʤΤǡTHIS$AND$THAT THIS $ AND $ THAT ΣĤ pp-token ʬޤʤη̡compile phase ǥ顼ˤʤϤǤˡ<br>
</ul>
<br>
<h2><a name="5.7" href="#toc.5.7">5.7. Warning (class 4)</a></h2>
<p>Standard C ǤϤĤ translation limits ˤĤơݾڤ٤ͤꤷƤޤץץåϤͤĶ translation limits äƤۤͤɤȤޤ˰¸륽 portability ¤ޤ<b>mcpp</b> ǤϤ translation limits system.H Υޥ뤳ȤǤդǤ褦ˤʤäƤޤStandard ⡼ɤǤϤͤ Standard C κǾͤĶƤϡΤȤѤ륽ФƤϥ˥ФޤϤɸإå䥽ˤäƤȯ̤ˤʤΤǡclass 1, 2 鳰Ƥޤ</p>
<ul>
<li><samp>Logical source line longer than 509 bytes</samp><br>
ԤĹ 509 ХȤĶƤޤ<br>
<li><samp>Quotation longer than 509 bytes "very_very_long_string"</samp><br>
ʸƥ롢
ʸheader name Ĺ 509 ХȤĶƤޤ<br>
<li><samp>More than 8 nesting of #include</samp><br>
#include
ΥͥȤ٥Ķޤ٥ˤʤäΥ˥Фޤ<br>
<li><samp>More than 8 nesting of #if (#ifdef) sections</samp><br>
#if, #ifdef, #ifndef ΥͥȤ٥Ķޤ٥ˤʤäΥ˥Фޤ<br>
<li><samp>More than 1024 macros defined</samp><br>
Ƥޥ 1025 Ĥãޤοˤ pre-defined ޥ header-file 줿ޥޤޤƤޤ<br>
<li><samp>String literal longer than 509 bytes "very_very_long_string"</samp><br>
# 黻ҤȤä줿ޥŸˤäơ509 ХȤĶĹʸƥ뤬ޤ<br>
</ul>
<p>Υ˥ϥåפ #if group ǤϽФޤ</p>
<ul>
<li><samp>More than 32 nesting of parens in #if expression</samp><br>
#if
ΥåΥͥȤ٥Ķޤ٥ˤʤäФޤ<br>
<li><samp>More than 31 parameters</samp><br>
ޥΥѥοĶޤ<br>
<li><samp>Identifier longer than 31 bytes "very_very_long_name"</samp><br>
Identifier
ĹХȤĶƤޤ<br>
</ul>
<p><tt>__STDC_VERSION__</tt> >= 199901L
ξϤ translation limits ϼ̤ǤIdentifier ĹǤϡUCN multi-byte-character Ϥ줾죱ʸȿޤʥΥХȿǤϤʤ̯ʵǤˡ</p>
<blockquote>
<table>
<tr><th>ԤĹ </th><td>4095 Х</td></tr>
<tr><th>ʸƥ롢ʸheader name Ĺ</th><td>4095 Х</td></tr>
<tr><th>Identifier Ĺ </th><td>63 ʸ</td></tr>
<tr><th>#include Υͥ </th><td>15 ٥</td></tr>
<tr><th>#if, #ifdef, #ifndef Υͥ </th><td>63 ٥</td></tr>
<tr><th>#if ΥåΥͥ </th><td>63 ٥</td></tr>
<tr><th>ޥΥѥο </th><td>127 </td></tr>
<tr><th>Ǥޥο </th><td>4095 </td></tr>
</table>
</blockquote>
<p>-+ ץ C++ ΥץץꤷϡΤ褦 translation limits ȤޤޥΥѥκ <b>mcpp</b> Ǥ 255 ޤǤǤʤΤǡ256 ĤǤϥ顼Ȥʤޤ</p>
<blockquote>
<table>
<tr><th>ԤĹ </th><td>65536 Х</td></tr>
<tr><th>ʸƥ롢ʸheader name Ĺ</th><td>65536 Х</td></tr>
<tr><th>Identifier Ĺ </th><td>1024 ʸ</td></tr>
<tr><th>#include Υͥ </th><td>256 ٥</td></tr>
<tr><th>#if, #ifdef, #ifndef Υͥ </th><td>256 ٥</td></tr>
<tr><th>#if ΥåΥͥ </th><td>256 ٥</td></tr>
<tr><th>ޥΥѥο </th><td>256 </td></tr>
<tr><th>Ǥޥο </th><td>65536 </td></tr>
</table>
</blockquote>
<p>Υ˥ºݤˤϤ뤵Τǡclass 1, 2 鳰Ƥޤ</p>
<ul>
<li><samp>Converted 0x0c to a space</samp><br>
token separator ȤƤ [FF], [VT], [CR] [CR][LF] ǤϤʤñȤ [CR]ˤΥɤ space Ѵޤ줬 directive Ԥˤ Standard C Ǥ undefined Ǥȡʸƥ롢ʸΥɤѴޤѴƤ褤ΤǤ뤬ʸåȤϽϰ¸ʤΤǡ<b>mcpp</b> ǤϤޤݤʤɬפʥåϥѥΤǹԤǤˡ¾ǡtoken separator ȤƤ [TAB] a space Ѵޤϥѥ̤˲αƶͿʤΤǡʥץץåˤȤäƤ⥳ѥΤˤȤäƤ [TAB] space Ʊ̣ʤˡ˥ϽФޤ[FF] ϼºݤΥ˻ΤǤֲڡפտޤƤΤǤ礦ʤǤ<br>
<li><samp>Undefined symbol "name", evaluated to 0</samp><br>
#if Ԥ identifier "name" ϥޥȤͤƤޤ0 ɾޤϷ褷ƥ顼ǤϤޤץδְ㤤Ǥǽޤ#if defined ΰˤϤΥ˥ϽФޤ#if name .. ȤȤ #if defined name && (name ..) Ȥ뤫ޤ <b>mcpp</b> ư -D name=0 Ȥץդ뤳ȤǡΥ˥뤳ȤǤޤC++ Ǥ true, false Ȥȡ̰ǡ˥ʤˤ줾 1, 0 ɾޤ<br>
<li><samp>Multi-character wide character constant L'ab' isn't portable</samp><br>
磻ʸͤϡƱʸåȤνϴ֤Ǥ磻ʸ encoding ϰ¸Ǥꡢξ塢Multi-character ɾλϰ¸ʤΤǡȤä #if ϰܿޤ<i>STD</i> ⡼ɤǤФޤ<i>POSTSTD</i> Ǥ #if ʸǧʤΤǥ顼ˤʤޤΤΤƱͤǤ<br>
<li><samp>Multi-character or multi-byte character constant '' isn't portable</samp><br>
Multi-character character constant multi-byte character character constant ͤɾλϽϰ¸ʤΤǡȤä #if ϰܿޤ<i>STD</i> ⡼ɤǽФޤ<br>
</ul>
<p>ΣĤ Standard ⡼ɤξФޤ</p>
<ul>
<li><samp>Macro with mixing of ## and # operators isn't portable</samp><br>
ؿͥޥִꥹ
## # Ȥȡ¤ӤޤΣĤα黻Ҥ̤ͥ Standard C Ǥ unspecified ʤΤǡܿޤ<b>mcpp</b> Ǥ # ŬѤޤʤؿͥޥǵո # ## Ȥȡ¤Ӥȥ顼ˤʤޤ# 黻ҤΥڥɤϥѥǤʤФʤʤǤ<br>
<li><samp>Macro with multiple ## operators isn't portable</samp><br>
ޥִꥹʣ ## 黻Ҥ֤ˣĤΥȡޤϥѥϤǤޤ## 黻Ҥɾ Standard C Ǥ unspecified ʤΤǡΥޥϰܿΤʤ礬ޤ<b>mcpp</b> Ǥ ## 黻ҤϺ鱦ؽŬѤƤޤ<br>
</ul>
<p> <i>STD</i> ⡼ɤ -k ޤ -K ץꤷȤΤΤǤ</p>
<ul>
<li><samp>Too long comment, discarded up to here</samp><br>
ȤüĹΤǡޤǤʬ䰦ޤ
ԤޤȤ 256 ʾˤʤȡޤǤΤƤơԤܤȤƥȤޤ
ĹʥɥȤ˴ޤΤϡɤǤϤޤ<br>
</ul>
<br>
<h2><a name="5.8" href="#toc.5.8">5.8. Warning (class 8)</a></h2>
<p>δְ㤤ǤǽϾʤǰΤդ¥̣ǡΥåФޤåΤ -W8 Υץǵư줿Ǥ</p>
<p>åפ #if group preprocessing directive ̾ #if, #ifdef, #ifndef, #elif, #else, #endif бطåޤ-W8 Ǥ Illegal directive, Unknown directive Υå⤷ޤޤStandard ⡼ɤǤ #if ΥͥȤ٥Ķ⥦˥Фޤ</p>
<ul>
<li><samp>Illegal #directive "+" (in skipped block)</samp><br>
<li><samp>Unknown #directive "pseudo-directive" (in skipped block)</samp><br>
<li><samp>Ignored #ident (in skipped block)</samp><br>
<li><samp>Ignored #sccs (in skipped block)</samp><br>
<li><samp>More than 8 nesting of #if (#ifdef) sections (in skipped block)</samp><br>
<li><samp>#include_next is not allowed by Standard (in skipped block)</samp><br>
<li><samp>#warning is not allowed by Standard (in skipped block)</samp><br>
</ul>
<p> #if ˴ؤ륦˥Ǥ㤨 #if a || b ȤǤϡa Ǥ b ɾϹԤޤ-W8 ȤƵưȡɾʤʬ˴ؤƤ⤳Υ˥ФޤξϤ (in non-evaluated sub-expression) Ȥդޤ</p>
<ul>
<li><samp>Constant "123456789012345678901" is out of range</samp><br>
<li><samp>Constant "123456789012" is out of range of (unsigned) long</samp><br>
<li><samp>LL suffix is used in other than C99 mode "123LL"</samp><br>
<li><samp>I64 suffix is used in other than C99 mode "123i64"</samp><br>
<li><samp>Shift count "40" is larger than bit count of long</samp><br>
<li><samp>Integer character constant 'abcdefghi' is out of range</samp><br>
<li><samp>Integer character constant 'abcde' is out of range of unsigned long</samp><br>
<li><samp>Wide character constant L'abcdef' is out of range</samp><br>
<li><samp>Wide character constant L'abc' is out of range of unsigned long</samp><br>
<li><samp>8 bits can't represent escape sequence 'x123'</samp><br>
<li><samp>16 bits can't represent escape sequence L'x12345'</samp><br>
<li><samp>Division by zero</samp><br>
<li><samp>Undefined symbol "name", evaluated to 0</samp><br>
<li><samp>sizeof: Unknown type "type"</samp><br>
<li><samp>sizeof: Illegal type combination with "type"</samp><br>
<li><samp>Multi-character wide character constant L'ab' isn't portable</samp><br>
<li><samp>Multi-character or multi-byte character constant '' isn't portable</samp><br>
<li><samp>Undefined escape sequence '\x'</samp><br>
<li><samp>UCN cannot specify the value "0000007f"</samp><br>
<li><samp>Negative value "-1" is converted to positive "18446744073709551615"</samp><br>
<li><samp>Result of "op" is out of range</samp><br>
<li><samp>Result of "op" is out of range of (unsigned) long</samp><br>
<li><samp>Illegal shift count "-1"</samp><br>
<li><samp>"op" of negative number isn't portable</samp><br>
<br>
<li><samp>sizeof is disallowed in C Standard</samp><br>
#if sizeof Τ pre-Standard ⡼ɤǤξǤ⤳ Standard C ǤϻȤޤȤޤ<br>
<li><samp>"MACRO" wasn't defined</samp><br>
#undef Ƥʤ̾ꤷƤޤϾʤȤ Standard C Ǥϥ顼ǤϤޤ<br>
<li><samp>Macro "macro" needs arguments</samp><br>
դޥȤƤΤƱ̾ñȤǸƤޤŸΤޤĤޤpre-Standard ⡼ɤξФޤStandard ⡼ɤǤϲʤΤǡ˥ϽФʤˡ<br>
<li><samp>Replacement text "sub(" of macro "head" involved subsequent text</samp><br>
ޥ "head" ִꥹ "sub(" κǥޥƤӽФθΥƥȤޤޤΥ˥ <i>STD</i> ⡼ɤǤ class 1 Ǥ<i>COMPAT</i> ⡼ɤǤ class 8 Ǥ<br>
</ul>
<br>
<h2><a name="5.9" href="#toc.5.9">5.9. Warning (class 16)</a></h2>
<p>Trigraph digraph ϻȤɬפΤʤĶǤϤޤäȤʤΤǤδĶǤ⤷餬ФСդפǤ礦-W16 ץϤФΤǤ¾ǡtrigraph 뤤 digraph ѤƤ륽ǤϤΥ˥ȯ뤳ȤˤʤäƤ뤵Ǥ礦顢¾Υ˥Ȥ̤Υ饹ˤƤޤɤˤƤ⡢ trigraph 뤤 digraph ͭʾ֤ǤФޤDigraph Standard ⡼ɤξǡtrigraph <i>STD</i> ⡼ɤǤ</p>
<ul>
<li><samp>2 trigraph(s) converted</samp><br>
ʪΣĤ trigraph sequence Ѵޤ trigraph ΤĤǽΤǤ礦<br>
<li><samp>2 digraph(s) converted</samp><br>
ιΣĤ digraph sequence Ѵޤ digraph ΤĤǽΤǤ礦<br>
<i>STD</i> ⡼ɤǤ digraph ΤǤʤϤǤϡץץäƤ digraph Τ褦̾ token ѴƽϤޤ<br>
<pre>
<% -> { <: -> [ %: -> #
%> -> } :> -> [ %:%: -> ##
</pre>
<i>POSTSTD</i> ⡼ɤǤ translation phase 1 ̾ pp-token ѴƤޤޤΰ㤤ϡdigraph # 黻Ҥˤʸоݤˤʤä˸ޤǥեȤǤ digraph sequence Τޤʸޤ<i>POSTSTD</i> Ǥ̾ pp-token Ѵ줿Τʸޤޤʸƥ digraph sequence character sequence ä硢ǥեȤǤϤΤޤޤǤ<i>POSTSTD</i> ǤϤб pp-token character sequence Ѵޤ<br>
<i>STD</i> ⡼ɤǤϤΥ˥ digraph ΡѴפоݤȤƤΤǡpreprocessing-directive Ԥ˸ƾäƤޤ digraph ϥȤޤ<br>
</ul>
<br>
<h2><a name="5.10" href="#toc.5.10">5.10. ǥå</a></h2>
<table border='1' frame='below'><tr><th rowspan='2'>ǥå</th><th rowspan='2'>Fatal<br>error</th><th rowspan='2'>Error</th><th colspan='5'>Warning class</th></tr>
<th>1</th><th>2</th><th>4</th><th>8</th><th>16</th></tr>
<tr><td><samp>"..." isn't the last parameter</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>"/*" in comment</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td></tr>
<tr><td><samp>"and" is defined as macro</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>"defined" shouldn't be defined</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>"MACRO" has not been defined</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>"MACRO" has not been pushed</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>"MACRO" is already pushed</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>"MACRO" wasn't defined</samp></td><td></td><td></td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>"op" of negative number isn't portable</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>"__STDC__" shouldn't be redefined</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>"__STDC__" shouldn't be undefined</samp></td><td></td><td><a href='#5.4.8'>5.4.8</td></tr>
<tr><td><samp>"__VA_ARGS__" without corresponding "..."</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>"__VA_ARGS__" cannot be used in GCC2-spec variadic macro</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>## after ##</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>#error</samp></td><td></td><td><a href='#5.4.10'>5.4.10</td></tr>
<tr><td><samp>#include_next is not allowed by Standard</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>#warning</samp></td><td></td><td></td><td><a href='#5.5.7'>5.5.7</td></tr>
<tr><td><samp>'$' in identifier "THIS$AND$THAT"</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>16 bits can't represent escape sequence L'\x12345'</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>2 digraph(s) converted</samp></td><td></td><td></td><td></td><td></td><td></td><td></td><td><a href='#5.9'>5.9</td></tr>
<tr><td><samp>2 trigraph(s) converted</samp></td><td></td><td></td><td></td><td></td><td></td><td></td><td><a href='#5.9'>5.9</td></tr>
<tr><td><samp>8 bits can't represent escape sequence '\x123'</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>_Pragma operator found in directive line</samp></td><td></td><td><a href='#5.4.12'>5.4.12</td></tr>
<tr><td><samp>Already seen #else at line 123</samp></td><td></td><td><a href='#5.4.3'>5.4.3</td></tr>
<tr><td><samp>Bad defined syntax</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Bad pop_macro syntax</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>Bad push_macro syntax</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>Buffer overflow expanding macro "macro" at "something"</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>Buffer overflow scanning token "token"</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Bug:</samp></td><td><a href='#5.3.1'>5.3.1</td></tr>
<tr><td><samp>Can't open include file "file-name"</samp></td><td></td><td><a href='#5.4.11'>5.4.11</td></tr>
<tr><td><samp>Can't use a character constant 'a'</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Can't use a string literal "string"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Can't use the character 0x24</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Can't use the operator "++"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Constant "123456789012" is out of range of (unsigned) long</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Constant "1234567890123456789012" is out of range</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Converted 0x0c to a space</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Converted [CR+LF] to [LF]</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>Converted \ to /</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>Division by zero</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Duplicate parameter names "a"</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>Empty argument in macro call "MACRO( a, ,"</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>Empty character constant ''</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>Empty parameter</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>End of file with no newline, supplemented the newline</samp></td><td></td><td></td><td><a href='#5.5.2'>5.5.2</td></tr>
<tr><td><samp>End of file with unterminated #asm block started at line 123</samp></td><td></td><td><a href='#5.4.2'>5.4.2</td><td><a href='#5.5.2'>5.5.2</td></tr>
<tr><td><samp>End of file with unterminated comment, terminated the comment</samp></td><td></td><td></td><td><a href='#5.5.2'>5.5.2</td></tr>
<tr><td><samp>End of file with \, deleted the \</samp></td><td></td><td></td><td><a href='#5.5.2'>5.5.2</td></tr>
<tr><td><samp>End of file within #if (#ifdef) section started at line 123</samp></td><td></td><td><a href='#5.4.2'>5.4.2</td><td><a href='#5.5.2'>5.5.2</td></tr>
<tr><td><samp>End of file within macro call started at line 123</samp></td><td></td><td><a href='#5.4.2'>5.4.2</td><td><a href='#5.5.2'>5.5.2</td></tr>
<tr><td><samp>Excessive ")"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Excessive token sequence "junk"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>File read error</samp></td><td><a href='#5.3.2'>5.3.2</td></tr>
<tr><td><samp>File write error</samp></td><td><a href='#5.3.2'>5.3.2</td></tr>
<tr><td><samp>Header-name enclosed by <, > is an obsolescent feature <stdio.h></samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>GCC2-spec variadic macro is defined</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>I64 suffix is used in other than C99 mode "123i64"</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Identifier longer than 31 bytes "very_very_long_name"</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Ignored #ident</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Ignored #sccs</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Illegal #directive "123"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td><td><a href='#5.5.3'>5.5.3</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Illegal control character 0x1b in quotation</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td></tr>
<tr><td><samp>Illegal control character 0x1b, skipped the character</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>Illegal digit in octal number "089"</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td></tr>
<tr><td><samp>Illegal multi-byte character sequence "XY" in quotation</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td></tr>
<tr><td><samp>Illegal multi-byte character sequence "XY"</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>Illegal parameter "123"</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>Illegal shift count "-1"</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Illegal UCN sequence</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>In #asm block started at line 123</samp></td><td></td><td><a href='#5.4.3'>5.4.3</td></tr>
<tr><td><samp>Integer character constant 'abcde' is out of range of unsigned long</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Integer character constant 'abcdefghi' is out of range</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Less than necessary N argument(s) in macro call "macro( a)"</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td><td><a href='#5.5.5'>5.5.5</td></tr>
<tr><td><samp>Line number "0x123" isn't a decimal digits sequence</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td><td><a href='#5.5.6'>5.5.6</td></tr>
<tr><td><samp>Line number "2147483648" is out of range of 1,2147483647</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>Line number "32768" got beyond range</samp></td><td></td><td></td><td><a href='#5.5.6'>5.5.6</td></tr>
<tr><td><samp>Line number "32768" is out of range of 1,32767</samp></td><td></td><td></td><td><a href='#5.5.6'>5.5.6</td></tr>
<tr><td><samp>Line number "32769" is out of range</samp></td><td></td><td></td><td><a href='#5.5.6'>5.5.6</td></tr>
<tr><td><samp>LL suffix is used in other than C99 mode "123LL"</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Logical source line longer than 509 bytes</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Macro "MACRO" is expanded to "defined"</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td></tr>
<tr><td><samp>Macro "MACRO" is expanded to "sizeof"</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td></tr>
<tr><td><samp>Macro "MACRO" is expanded to 0 token</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td></tr>
<tr><td><samp>Macro "macro" needs arguments</samp></td><td></td><td></td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Macro started at line 123 swallowed directive-like line</samp></td><td></td><td></td><td><a href='#5.5.5'>5.5.5</td></tr>
<tr><td><samp>Macro with mixing of ## and # operators isn't portable</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Macro with multiple ## operators isn't portable</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Misplaced ":", previous operator is "+"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Misplaced constant "12"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Missing ")"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Missing "," or ")" in parameter list "(a,b"</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>More than 1024 macros defined</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>More than 31 parameters</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>More than 32 nesting of parens in #if expression</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>More than 8 nesting of #if (#ifdef) sections</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>More than 8 nesting of #include</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>More than <i>BLK_NEST</i> nesting of #if (#ifdef) sections</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>More than <i>INCLUDE_NEST</i> nesting of #include</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>More than necessary N argument(s) in macro call "macro( a, b, c)</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>More than <i>NEXP</i>*2-1 constants stacked at "12"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>More than <i>NEXP</i>*3-1 operators and parens stacked at "+"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>More than <i>NMACPARS</i> parameters</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>Multi-character or multi-byte character constant '' isn't portable</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Multi-character wide character constant L'ab' isn't portable</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Negative value "-1" is converted to positive "18446744073709551615"</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>No argument</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>No header name</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>No identifier</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>No line number</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>No space between macro name "MACRO" and repl-text</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>No sub-directive</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>No token after ##</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>No token before ##</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>Not a file name "name"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>Not a formal parameter "id"</samp></td><td></td><td><a href='#5.4.7'>5.4.7</td></tr>
<tr><td><samp>Not a header name "UNDEFINED_MACRO"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>Not a line number "name"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td></tr>
<tr><td><samp>Not a valid preprocessing token "+12"</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>Not a valid string literal</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>Not an identifier "123"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>Not an integer "1.23"</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Not in a #if (#ifdef) section</samp></td><td></td><td><a href='#5.4.3'>5.4.3</td></tr>
<tr><td><samp>Not in a #if (#ifdef) section in a source file</samp></td><td></td><td><a href='#5.4.3'>5.4.3</td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>Old style predefined macro "linux" is used</samp></td><td></td><td></td><td><a href='#5.5.5'>5.5.5</td></tr>
<tr><td><samp>Operand of _Pragma() is not a string literal</samp></td><td></td><td><a href='#5.4.12'>5.4.12</td></tr>
<tr><td><samp>Operator ">" in incorrect context</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Out of memory (required size is 0x1234 bytes)</samp></td><td><a href='#5.3.2'>5.3.2</td></tr>
<tr><td><samp>Parsed "//" as comment</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>Preprocessing assertion failed</samp></td><td></td><td><a href='#5.4.10'>5.4.10</td></tr>
<tr><td><samp>Quotation longer than 509 bytes "very_very_long_string"</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Recursive macro definition of "macro" to "macro"</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>Removed ',' preceding the absent variable argument</samp></td><td></td><td></td><td><a href='#5.5.5'>5.5.5</td></tr>
<tr><td><samp>Replacement text "sub(" of macro "head" involved subsequent text</samp></td><td></td><td></td><td><a href='#5.5.5'>5.5.5</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Rescanning macro "macro" more than <i>RESCAN_LIMIT</i> times at "something"</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>Result of "op" is out of range</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Result of "op" is out of range of (unsigned) long</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Shift count "40" is larger than bit count of long</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>sizeof is disallowed in C Standard</samp></td><td></td><td></td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>sizeof: Illegal type combination with "type"</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>sizeof: No type specified</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>sizeof: Syntax error</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>sizeof: Unknown type "type"</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Skipped the #pragma line</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>String literal longer than 509 bytes "very_very_long_string"</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>The macro is redefined</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td></tr>
<tr><td><samp>This is not a preprocessed source</samp></td><td><a href='#5.3.4'>5.3.4</td></tr>
<tr><td><samp>This preprocessed file is corrupted</samp></td><td><a href='#5.3.4'>5.3.4</td></tr>
<tr><td><samp>Too long comment, discarded up to here</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td></tr>
<tr><td><samp>Too long header name "long-file-name"</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long identifier, truncated to "very_long_identifier"</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td></tr>
<tr><td><samp>Too long line spliced by comments</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long logical line</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long number token "12345678901234"</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long pp-number token "1234toolong"</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long quotation "long-string"</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long source line</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too long token</samp></td><td><a href='#5.3.3'>5.3.3</td></tr>
<tr><td><samp>Too many magics nested in macro argument</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>Too many nested macros in tracing MACRO</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>UCN cannot specify the value "0000007f"</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Undefined escape sequence '\x'</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Undefined symbol "name", evaluated to 0</samp></td><td></td><td></td><td></td><td></td><td><a href='#5.7'>5.7</td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Unknown #directive "pseudo-directive"</samp></td><td></td><td><a href='#5.4.4'>5.4.4</td><td><a href='#5.5.4'>5.5.4</td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Unknown argument "name"</samp></td><td></td><td></td><td><a href='#5.5.3'>5.5.3</td></tr>
<tr><td><samp>Unterminated character constant 't understand.</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>Unterminated expression</samp></td><td></td><td><a href='#5.4.5'>5.4.5</td></tr>
<tr><td><samp>Unterminated header name <header.h</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>Unterminated macro call "macro( a, (b,c)"</samp></td><td></td><td><a href='#5.4.9'>5.4.9</td></tr>
<tr><td><samp>Unterminated string literal</samp></td><td></td><td><a href='#5.4.1'>5.4.1</td></tr>
<tr><td><samp>Unterminated string literal, catenated to the next line</samp></td><td></td><td></td><td><a href='#5.5.1'>5.5.1</td></tr>
<tr><td><samp>Variable argument macro is defined</samp></td><td></td><td></td><td></td><td><a href='#5.6'>5.6</td></tr>
<tr><td><samp>Wide character constant L'abc' is out of range of unsigned long</samp></td><td></td><td></td><td><a href='#5.5.4'>5.5.4</td><td><a href='#5.6'>5.6</td><td></td><td><a href='#5.8'>5.8</td></tr>
<tr><td><samp>Wide character constant L'abc' is out of range</samp></td><td></td><td><a href='#5.4.6'>5.4.6</td><td></td><td></td><td></td><td><a href='#5.8'>5.8</td></tr>
</table><br>
<br>
<h1><a name="6" href="#toc.6">6. Х</a></h1>
<p>ץץ Standard C Ŭ٤ڤ뤿 Validation Suite <b>mcpp</b> ΥȤȤ˸ƤޤStandard C ΥץץΤ٤ƤεڤǤΤˤĤǤ<b>mcpp</b> ϤȤäƥåƤޤ¿νϤǥѥ뤷ƥåƤޤäơХͤϤۤȤɤʤĤǤޤĤĤäƤ붲Ͻʬޤ</p>
<p>⤷ԲIJưȯ줿顢Ҥ𤯤<br>
⤷
"Bug: ..." ȤǥåФ顢ϴְ㤤ʤ <b>mcpp</b> ޤϽϤΡʤ֤ <b>mcpp</b> Ρ˥ХǤޤȤ㤯ʡ֥פǤ⡢碌뤳Ȥ <b>mcpp</b> ˽ʤ顢ХǤ</p>
<p>ХˤϼΤ褦ʥǡդƤ褦ꤤޤ</p>
<ol>
<li><b>mcpp</b> ܿϡ<br>
<li>ХȻפΤƸǤʤ٤ûץ륽
<br>
<li>ν̡
<br>
</ol>
<p>ХΤۤˤ⡢<b>mcpp</b> λȤꡢǥåΥɥȤν
ʤɤˤĤƤո<br>
ոȾ</p>
<p><a href="http://mcpp.sourceforge.net/"> http://mcpp.sourceforge.net/</a></p>
<p> "Open Discussion Forum" ޤϥǤꤤޤ
</p>
</body>
</html>
|