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
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<style> 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>CPP-TEST</h1>
<h3>== Validation Suite for Standard C Conformance of Preprocessing ==</h3>
</div>
<div align="right">
<h4>for V.1.5.5 (2008/11)<br>
(kmatsui@t3.rim.or.jp)</h4>
</div>
<div align="center">
<h2>== ܼ ==</h2>
</div>
<h4><dl><dt><a name="toc.1" href="#1">1. Standard C Validation Suite</a>
<dd><a name="toc.1.1" href="#1.1">1.1. </a>
<dd><a name="toc.1.2" href="#1.2">1.2. </a>
<dd><a name="toc.1.3" href="#1.3">1.3. ΥɥȤɽˡ</a>
<br>
<br>
<dt><a name="toc.2" href="#2">2. Standard C ץץħ</a>
<dd><a name="toc.2.1" href="#2.1">2.1. K&R 1st. Standard C Υץץ</a>
<dd><dl><dt><a name="toc.2.2" href="#2.2">2.2. Translation phases</a>
<dd><a name="toc.2.2.1" href="#2.2.1">2.2.1. ³ tokenization </a></dl>
<dd><dl><dt><a name="toc.2.3" href="#2.3">2.3. Preprocessing token</a>
<dd><a name="toc.2.3.1" href="#2.3.1">2.3.1. Keyword ʤ</a>
<dd><a name="toc.2.3.2" href="#2.3.2">2.3.2. Preprocessing-number</a>
<dd><a name="toc.2.3.3" href="#2.3.3">2.3.3. Token-base ư token Ϣ</a></dl>
<dd><a name="toc.2.4" href="#2.4">2.4. #if ɾη</a>
<dd><a name="toc.2.5" href="#2.5">2.5. Portable ʥץץå</a>
<dd><dl><dt><a name="toc.2.6" href="#2.6">2.6. ؿͥޥŸˡ</a>
<dd><a name="toc.2.6.1" href="#2.6.1">2.6.1. ؿƤӽФƱ</a>
<dd><dl><dt><a name="toc.2.6.2" href="#2.6.2">2.6.2. ֤Ÿ</a>
<dd><a name="toc.2.6.2.1" href="#2.6.2.1">2.6.2.1. #, ## 黻Ҥ operand Ÿʤ</a></dl>
<dd><a name="toc.2.6.3" href="#2.6.3">2.6.3. Ȥ</a>
<dd><a name="toc.2.6.4" href="#2.6.4">2.6.4. ƱޥκƵŪŸɻ</a></dl>
<dd><dl><dt><a name="toc.2.7" href="#2.7">2.7. </a>
<dd><a name="toc.2.7.1" href="#2.7.1">2.7.1. <stdio.h> η header name</a>
<dd><a name="toc.2.7.2" href="#2.7.2">2.7.2. Character-base ΤʤĤ # 黻Ҥε</a>
<dd><a name="toc.2.7.3" href="#2.7.3">2.7.3. ޥ white spaces ΰ</a>
<dd><a name="toc.2.7.4" href="#2.7.4">2.7.4. ؿͥޥΥѥ̾</a>
<dd><a name="toc.2.7.5" href="#2.7.5">2.7.5. ɾΤ狼ʤ #if ʸ</a>
<dd><a name="toc.2.7.6" href="#2.7.6">2.7.6. ޥδؿͤǤʤ</a>
<dd><a name="toc.2.7.7" href="#2.7.7">2.7.7. C90 Corrigendum 1, Amendment 1 Ǥɲ</a>
<dd><a name="toc.2.7.8" href="#2.7.8">2.7.8. Ĺʵ</a></dl>
<dd><a name="toc.2.8" href="#2.8">2.8. C99 Υץץ</a>
<dd><a name="toc.2.9" href="#2.9">2.9. ʥץץ</a>
<br>
<br>
<dt><a name="toc.3" href="#3">3. Validation Suite </a>
<dd><a name="toc.3.1" href="#3.1">3.1. Validation Suite for Conformance of Preprocessing</a>
<dd><dl><dt><a name="toc.3.2" href="#3.2">3.2. ƥˡ</a>
<dd><a name="toc.3.2.1" href="#3.2.1">3.2.1. ưƥ</a>
<dd><a name="toc.3.2.2" href="#3.2.2">3.2.2. cpp_test ˤ뼫ưƥ</a>
<dd><dl><dt><a name="toc.3.2.3" href="#3.2.3">3.2.3. GCC / testsuite ˤ뼫ưƥ</a>
<dd><a name="toc.3.2.3.1" href="#3.2.3.1">3.2.3.1. TestSuite Ȥ</a>
<dd><a name="toc.3.2.3.2" href="#3.2.3.2">3.2.3.2. TestSuite ؤΥȡȥƥ</a>
<dd><a name="toc.3.2.3.3" href="#3.2.3.3">3.2.3.3. <b>mcpp</b> μưƥ</a>
<dd><a name="toc.3.2.3.4" href="#3.2.3.4">3.2.3.4. TestSuite ȸڥå</a></dl></dl>
<dd><a name="toc.3.3" href="#3.3">3.3. Violation of syntax rule or constraint ȿǥå</a>
<dd><dl><dt><a name="toc.3.4" href="#3.4">3.4. ܺ</a>
<dd><a name="toc.3.4.1" href="#3.4.1">3.4.1. Trigraphs</a>
<dd><a name="toc.3.4.2" href="#3.4.2">3.4.2. <backslash><newline> ˤ³</a>
<dd><a name="toc.3.4.3" href="#3.4.3">3.4.3. </a>
<dd><a name="toc.3.4.4" href="#3.4.4">3.4.4. üʥȡ (digraphs) ʸ (UCN)</a>
<dd><a name="toc.3.4.5" href="#3.4.5">3.4.5. Preprocessing directive line space, tab</a>
<dd><a name="toc.3.4.6" href="#3.4.6">3.4.6. #include</a>
<dd><a name="toc.3.4.7" href="#3.4.7">3.4.7. #line</a>
<dd><a name="toc.3.4.8" href="#3.4.8">3.4.8. #error</a>
<dd><a name="toc.3.4.9" href="#3.4.9">3.4.9. #pragma, _Pragma() operator</a>
<dd><a name="toc.3.4.10" href="#3.4.10">3.4.10. #if, #elif, #else, #endif</a>
<dd><a name="toc.3.4.11" href="#3.4.11">3.4.11. #if defined</a>
<dd><a name="toc.3.4.12" href="#3.4.12">3.4.12. #if η</a>
<dd><a name="toc.3.4.13" href="#3.4.13">3.4.13. #if α黻</a>
<dd><a name="toc.3.4.14" href="#3.4.14">3.4.14. #if Υ顼</a>
<dd><a name="toc.3.4.15" href="#3.4.15">3.4.15. #ifdef, #ifndef</a>
<dd><a name="toc.3.4.16" href="#3.4.16">3.4.16. #else, #endif Υ顼</a>
<dd><a name="toc.3.4.17" href="#3.4.17">3.4.17. #if, #elif, #else, #endif бطΥ顼</a>
<dd><a name="toc.3.4.18" href="#3.4.18">3.4.18. #define</a>
<dd><a name="toc.3.4.19" href="#3.4.19">3.4.19. ޥκ</a>
<dd><a name="toc.3.4.20" href="#3.4.20">3.4.20. Keyword Ʊ̾Υޥ</a>
<dd><a name="toc.3.4.21" href="#3.4.21">3.4.21. Pp-token ʬΥפޥŸ</a>
<dd><a name="toc.3.4.22" href="#3.4.22">3.4.22. Pp-number Υޥ sequence</a>
<dd><a name="toc.3.4.23" href="#3.4.23">3.4.23. ## 黻ҤȤäޥ</a>
<dd><a name="toc.3.4.24" href="#3.4.24">3.4.24. # 黻ҤȤäޥ</a>
<dd><a name="toc.3.4.25" href="#3.4.25">3.4.25. ޥΥޥŸ</a>
<dd><a name="toc.3.4.26" href="#3.4.26">3.4.26. ޥƱ̾ޥ</a>
<dd><a name="toc.3.4.27" href="#3.4.27">3.4.27. ޥκ</a>
<dd><a name="toc.3.4.28" href="#3.4.28">3.4.28. ޥ</a>
<dd><a name="toc.3.4.29" href="#3.4.29">3.4.29. #undef</a>
<dd><a name="toc.3.4.30" href="#3.4.30">3.4.30. ޥƤӽФ</a>
<dd><a name="toc.3.4.31" href="#3.4.31">3.4.31. ޥƤӽФΥ顼</a>
<dd><a name="toc.3.4.32" href="#3.4.32">3.4.32. #if ʸ</a>
<dd><a name="toc.3.4.33" href="#3.4.33">3.4.33. #if Υ磻ʸ</a>
<dd><a name="toc.3.4.35" href="#3.4.35">3.4.35. #if multi-character ʸ</a>
<dd><a name="toc.3.4.37" href="#3.4.37">3.4.37. Translation limits</a></dl>
<dd><a name="toc.3.5" href="#3.5">3.5. ʬΥɥ</a>
<br>
<br>
<dt><a name="toc.4" href="#4">4. ꤵƤʤ¦̤ɾ</a>
<dd><a name="toc.4.1" href="#4.1">4.1. Multi-byte character encoding</a>
<dd><a name="toc.4.2" href="#4.2">4.2. Undefined behavior</a>
<dd><a name="toc.4.3" href="#4.3">4.3. Unspecified behavior</a>
<dd><a name="toc.4.4" href="#4.4">4.4. ˥˾ޤ¾Υ</a>
<dd><dl><dt><a name="toc.4.5" href="#4.5">4.5. ¾γƼʼ</a>
<dd><a name="toc.4.5.1" href="#4.5.1">4.5.1. ư˴ؤʼ</a>
<dd><a name="toc.4.5.2" href="#4.5.2">4.5.2. ץȳĥǽ</a>
<dd><a name="toc.4.5.3" href="#4.5.3">4.5.3. ¹ԸΨ</a>
<dd><a name="toc.4.5.4" href="#4.5.4">4.5.4. ɥȤʼ</a></dl>
<dd><a name="toc.4.6" href="#4.6">4.6. C++ Υץץ</a>
<br>
<br>
<dt><a name="toc.5" href="#5">5. C ץץμ</a>
<dd><dl><dt><a name="toc.5.1" href="#5.1">5.1. ɸإåե</a>
<dd><a name="toc.5.1.1" href="#5.1.1">5.1.1. Ū</a>
<dd><a name="toc.5.1.2" href="#5.1.2">5.1.2. <assert.h></a>
<dd><a name="toc.5.1.3" href="#5.1.3">5.1.3. <limits.h></a>
<dd><a name="toc.5.1.4" href="#5.1.4">5.1.4. <iso646.h></a></dl>
<br>
<dt><a name="toc.6" href="#6">6. ƼץץåΥƥȷ</a>
<dd><a name="toc.6.1" href="#6.1">6.1. ƥȤץץå</a>
<dd><a name="toc.6.2" href="#6.2">6.2. ɽ</a>
<dd><a name="toc.6.3" href="#6.3">6.3. ƥץץåħ</a>
<dd><a name="toc.6.4" href="#6.4">6.4. ɾ</a>
<dd><a name="toc.6.5" href="#6.5">6.5. ƥȤո</a>
</dl>
<br>
<h1><a name="1" href="#toc.1">1. Standard C Validation Suite</a></h1>
<p> Martin Minow DECUS cpp Ū˽ľ <b>mcpp</b> V.2 ȾΤ portable ʣåץץåޤΥץץåϥΤǡѥ뤹˥إåեΤĤΥޥؤ뤳ȤdzƼνѤ˰ܿǤ褦ˤʤäƤޤޤ Standard C (ISO/ANSI/JIS C) ȤƼư⡼ɤäƤޤΤ Standard C ⡼ɤϡʸ̤θ̩ Standard C ץץ¸ƤĤǤ</p>
<p>ΥץץåʤϡΥƥȤΤ "Validation Suite for Standard C Conformance of Preprocessing" ʥץץɸŬڤ륽եȥ켰ˤȾΤΤޤC ФǤʤ C++ ⥫СƤޤΥɥȤϤθڥå (Validation Suite) βǤθڥåȤϤΥɥȤȤȤˡBSD 饤ˤ륪ץեȥȤƸޤ</p>
<br>
<h2><a name="1.1" href="#toc.1.1">1.1. </a></h2>
<p>θڥåȤ 1998/08 NIFTY SERVE / FC / LIB 2 Ǹ졢http://www.vector.co.jp/pack ˤžܤޤˤ version number ޤǤ version 1.0 ǤäȤˤޤ</p>
<p>V.1.1 ϡC99 1997/08 draft б V.1.0 update ΤǤ1998/09 ˡϤ NIFTY SERVE / FC / LIB 2 vector / software pack Ǹޤ</p>
<p>V.1.2 ˷ꤷ C++ Standard бơV.1.1 ˤ updates äΤǤ1998/11 ˡϤ NIFTY SERVE / FC / LIB 2 vector / software pack Ǹޤ</p>
<p>V.1.3 ˷ꤷ C99 бơV.1.2 updates äΤǤޤưƥȤΥץϡGCC / testsuite ѤǤ褦˽ľ edition ɲäޤ</p>
<p>V.1.3 ϳȯǡ<b>mcpp</b> V.2.3 ȤȤˡʵ(IPA) ʿǯ١̤Ƨեȥ¤ȡפ˿ ͵ץȥޥ͡ˤäƺ졢2002/07 - 2003/02 δ֤ IPA λȿУͤνΤȤ˳ȯʤޤѸǥɥȤ⤳ΥץȤǡͭ²ҡϥ˻䤬ȥƥäƤǤäΤǤ2003/02 ˤ <b>mcpp</b> V.2.3 ȸڥå V.1.3 m17n.org Ǹޤ</p>
<p> <b>mcpp</b> ȸڥåȤʿǯ١̤Ƨեȥ¤ȡפˤ PM ˤäƷ³ƺ졢줾 V.2.4, V.1.4 ؤ update Ȥʤޤ*1, *2</p>
<p>θ <b>mcpp</b> ȸڥåȤϤ˲ɤκȤ³Ƥޤ2005/03 ˤϤ줾 V.2.5, V.1.5 ޤڥå V.1.5 Ǥѹʤɤޤ2006/07 ˤϤ줾 V.2.6, V.1.5.1 ޤڥå V.1.5.1 ǤϳƽϤοСΥץץåΥƥȷ̤ɲä줿ʳˤ礭ѹϤޤθ塢2006/11 <b>mcpp</b> V.2.6.2 ȸڥå V.1.5.2 2007/04 <b>mcpp</b> V.2.6.3 V.1.5.3 Ƥޤڥå V.1.5.2, V.1.5.3 ǤϤΥɥȤμ㴳ιäǡ¼ŪѹϤޤ
ˡ2007/05 <b>mcpp</b> V.2.6.4 2008/03 <b>mcpp</b> V.2.7 ȸڥå V.1.5.4 ޤ
ڥå V.1.5.4 ǤϾΥƥȥ˽ɲääۤVisual C++ 2008 Υƥȷ̤ɲäޤ
2008/05 ˤ <b>mcpp</b> V.2.7.1 2008/11 ˤ <b>mcpp</b> V.2.7.2 ȸڥå V.1.5.5 ޤ
ڥå V.1.5.5 Ǥ Wave V.2.0 Υƥȷ̤ɲäޤ</p>
<p>:</p>
<p>*1 cpp V.2.2 ޤǤñ cpp ȸƤǤ̤ cpp ʶ路Τǡ V.2.3 <b>mcpp</b> ȸƤ֤ȤˤMatsui CPP ΰ̣Ǥ롣ΥɥȤǤ V.2.2 ޤǤΥС <b>mcpp</b> ȸƤ֡ޤΥɥȤ̾ V.1.2 ޤǤ cpp_test.doc ȤƤV.1.3 cpp-test.txt ѹ V.1.5.2 cpp-test.html Ȥʤä伫Ȥ̾⡢V.1.2 ޤǤ Psycho ȤƤV.1.3 kmatsui ѹ</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.2.5 ޤǤϼΤȤ֤Ƥ</p>
<blockquote>
<p>http://www.m17n.org/mcpp/</p>
</blockquote>
<p>2006/04 ˼ΤȤ˰ܤä</p>
<blockquote>
<p><a href="http://mcpp.sourceforge.net/">http://mcpp.sourceforge.net/</a></p>
</blockquote>
<p>cpp V.2.2 Ӹڥå V.1.2 ϥ٥ҤΥȤμΤȤˤ롣dos/prog/c Ȥǥ쥯ȥƤ뤬MS-DOS ѤǤϤʤ UNIX, WIN32/MS-DOS, OS-9 бƤ롣</p>
<blockquote>
<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 ΤΤ DOS/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.2" href="#toc.1.2">1.2. </a></h2>
<p>øεʤȤƤ 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 ȸƤ֤Ȥޤ</p>
<p>βǻȤֵʽפϼΤΤǤ</p>
<pre>
C90:
ANSI X3.159-1989 (ANSI, New York, 1989)
ISO/IEC 9899:1990(E) (ISO/IEC, Switzerland, 1990)
ibid. Technical Corrigendum 1 (ibid., 1994)
ibid. Amendment 1: C Integrity (ibid., 1995)
ibid. Technical Corrigendum 2 (ibid., 1996)
JIS X 3010-1993 ܵʶJIS ϥɥ֥å 59-1994ס1994
C99:
ISO/IEC 9899:1999(E)
ibid. Technical Corrigendum 1 (2001)
ibid. Technical Corrigendum 2 (2004)
C++:
ISO/IEC 14882:1998(E)
ISO/IEC 14882:2003(E)
</pre>
<p>ANSI X3.159 ˤ "Rationale"ͳˤ°Ƥޤ ISO C90 ˤϤʤѤޤǤISO C99 Ǥ褷ޤ "Rationale" ޤ˿ƻȤޤ<br>
C++ 1998 ǯǤΤȤ 2003 ǯǤꤵޤʸνǤʤȤץץˤĤƤѹϤޤǡʸǤ 2003 ǯǤޤ C++98 ȸƤӤޤ</p>
<p>C99, C++ εʽ PDF ǥեޥåȤ줿饤ǤΤȤǤޤopen-std.org γƼ draft ̵ˡ</p>
<p>C99, C++98, C++03:</p>
<blockquote>
<p><a href="http://webstore.ansi.org/ansidocstore/default.asp">http://webstore.ansi.org/ansidocstore/default.asp</a></p>
</blockquote>
<p>C99+TC1+TC2:</p>
<blockquote>
<p><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf">http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf</a></p>
</blockquote>
<p>C99 Rationale 1999/10 final draft:</p>
<blockquote>
<p><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n897.pdf">http://www.open-std.org/jtc1/sc22/wg14/www/docs/n897.pdf</a></p>
</blockquote>
<br>
<h2><a name="1.3" href="#toc.1.3">1.3. ΥɥȤɽˡ</a></h2>
<p>ΥɥȤϤĤƤϥƥȥեǤV.1.5.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>꿧</tt>եȤϡɸޥΤ˻Ȥޤ<br>
</ul>
<br>
<h1><a name="2" href="#toc.2">2. Standard C ץץħ</a></h1>
<p>Validation Suite βˡStandard C (ISO C) ΥץץŪħƤޤ϶ʽŪǤϤʤK&R 1st. Ӥʤ Standard C Υץץιͤ餫ˤ褦ȤΤǤ</p>
<p>λȤƤϡK&R 1st. C90 Ȥ濴Ȥ C90 C99, C++ ȤդäȤȤޤߤϵʤȤƤ C99 ͭʤΤǤ¤νϤˤ C99 ϤޤȾʬƤʤΤǡC90 濴ȤۤºŪȻפ뤫Ǥ</p>
<p>ʤξϤǤϥץۤȤɼƤޤValidation Suite ΤΤץʤΤǡȤƤ</p>
<br>
<h2><a name="2.1" href="#toc.2.1">2.1. K&R 1st. Standard C Υץץ</a></h2>
<p>Pre-Standard ΣøϤˤ麹̤ޤǤץץˤϤۤȤɴबʤȸäƤ褤餤ξǤʤäϡȤʤ٤ Kernighan & Ritchie "The C Programming Language", 1st. edition Υץץε꤬ޤˤñʤޤʤΤǤäȤˤޤˤطʤˤϡץץϸΤФ֤ޤפΤ褦ʤΤȤͤäȻפޤK&R 1st. ʹߡƽϤˤäƥץץˤ¿εǽդäƤޤƤˤϸΤ䤦ΤΤȡۤʤϴ֤Ǥ portability ݤ褦ȤΤȤޤɤˤƤϴ֤㤬¿portable ǤˤΤ¾Ǥ</p>
<p>C90 ǤĹǯκθǤäΥץץΤʵ꤬Ϳޤɲä줿ǽ⤤ĤꡢˤĤƤϤ褯ΤƤޤäʤȤϡC90 ץץ˴ؤ¾ƤŪʵǤȤȤǤεˤϡޤǤޤǤä֥ץץȤϲפȤŪʤȤˤĤƤιͤ˸ƤޤC90 Υץץ K&R 1st. + ǤϤʤΤǤˤϡֿǽפǤʤܤΤİ뤳ȤɬפȻפޤǰʤȤˤϵʽʸˤϤΤȤޤȤƽҤ٤ƤϤ餺ʽǤ "Rationale" Ǥ⥵ȿƤǤ˻ǰʤȤˤϡΥץץȤŶη̤ȻפӤʤʬĤƤޤǡʲ C90 ץץδŪħޤȤƽҤ١ˤƤ뤳Ȥˤޤ</p>
<p>Pre-Standard ΥץץȰۤʤ롢뤤ϽΤˤ줿 Standard C ץץħϡΣˤޤȤ뤳ȤǤޤ</p>
<ol>
<li>Τνϰ¸ʬʤ¹ԻĶ execution environ-mentˤΩʸ̤ΥץץǤ롣Ϥˤäƥץץճʷ̤ˤʤ붲ϤƾʤޤˤäơץץåΤΤΥ portable ˽ȤǽˤʤäƱΣϣӤǤСץץåμ¹ԥץϣĤǤ⤹ȸäɤ餤Ǥ롣<br>
<br>
<li>Translation phases εˤäơ token ʬ䤹ޤǤμ礬ΤƤ롣Token ץץޤǤ pre-processing token ȤŪʷǰ롣Preprocessing token ȤΤ token ̤˵ꤷȤ⡢ץץΤνϰ¸ʬڤΥȤΩäƤ롣<br>
<br>
<li>ץץ preprocessing token ñ̤Ȥ롢§Ȥ token-oriented ʤΤǤ롣Ф pre-Standard Υץץ token-oriented ʷˤʤ顢Ūаޤ餯 character-oriented ʽʬʤ餺ȾüʤΤǤä<br>
<br>
<li>ؿͥޥŸϴؿƤӽФǥˤ뤳ȤǡʸˡƤ롣ؿͥޥθƤӽФϴؿƤӽФλȤȤʤɤǤȤ롣˥ޥƤӽФν⡢ؿΰ˴ؿƤӽФɾȥѥǤꡢΥޥŸƤִꥹΥѥ֤롣λΥޥƤӽФϤΰǴ뤷ƤʤФʤʤ<br>
</ol>
<p>θ§ʲ˽缡ƤƤޤ</p>
<br>
<h2><a name="2.2" href="#toc.2.2">2.2. Translation phases</a></h2>
<p>ץץμ K&R 1st. ǤϤޤäܤƤʤäˡ¿κθȤʤäƤޤC90 Ǥ translation phases ȤΤꤵơ줬ΤˤޤȼΤ褦ʤΤǤ*1</p>
<ol>
<li>եʸɬפʤ饽ʸåȤ map 롣Trigraph ִ롣*2<br>
<li><backslash><newline> 롣ˤäʪԤ³Ԥˤ롣<br>
<li>Preprocessing token white spaces Ȥʬ롣Ȥ one space character ִ롣ԥɤݻ롣<br>
<li>Preprocessing directive ¹ԤޥƤӽФŸ롣#include directive Сꤵ줿եˤĤ phase 1 phase 4 ƵŪ˽롣<br>
<li>ʸåȤ¹ԻʸåȤؤѴ롣Ʊͤˡʸʸƥ escape sequence Ѵ롣<br>
<li>ܤʸƥϢ뤷ܤ磻ʸƥϢ뤹롣<br>
<li>Preprocessing token token Ѵѥ뤹롣<br>
<li>롣<br>
</ol>
<p>ϼºݤ̡ phase ˤʤäƤɬפϤʤƱ̤ˤʤ褦˽ɤȤˤʤäƤޤ</p>
<p>Τ phase 1 phase 4 ޤ 6 ޤǤץץϰϤ°ޤץץåΩץˤʤäƤƥץץ̤֥եȤƽϤϡԥ token separator ¸ɬפ뤿ᡢphase 4 ޤǤôΤ̤Ǥphase 5 \n escape sequence ѴƤޤȡ줬 token separator ȤƤβԥȶ̤Ĥʤʤˡ Validation Suite ǥƥȤΤ phase 4 ޤǤǤ</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
</pre>
C99 Ǥ phase 4 _Pragma() operator νդä줿
Τۤ㴳λ礬ɲäƤ뤬̣ѲϤʤ</p>
<p>*2 C99 1997/11 draft Ǥϡtrigraphs Ѵˡbasic source character set ˴ޤޤʤ multi-byte character \Uxxxxxxxx Ȥ Unicode Σ sequence ʤ universal character name Ѵ롢ȤˤʤäƤơphase 5 Ǥ¹ԻʸåȤ˺ѴȤΤǤ롣C++ Standard ǤۤƱͤǤ롣ͤޤǤ뤦ˡϤˤȤäƤô礭ȤǤ롣ʤȤ 1999/01 draft phase 1 νϺ졢C99 ǤǤ⤽̤Ȥʤä</p>
<h3><a name="2.2.1" href="#toc.2.2.1">2.2.1. ³ tokenization </a></h3>
<p><backslash><newline> ˤ³ K&R 1st. Ǥϡ</p>
<ol>
<li>Ĺ #define ԤˤΡ<br>
<li>ĹʸƥˤΡ<br>
</ol>
<p>ΣĤܤƤǡ¾ξϤɤʤΤ餫ǤϤޤǤ</p>
<p>C90 Ǥϡphase 3 preprocessing token token separator ȤƤ white spaces ؤʬ䤬Ԥˡphase 2 <backslash><newline> κԤ뤳ȤΤˤ졢ɤʹԤǤ⡢ɤ token ǤͭȤʤޤ</p>
<p>ޤtrigraph ν phase 1 ǹԤΤǡ??/<newline> Ȥ sequence Ʊͤ˺ޤ¾ǡʸåȤ ASCII multi-byte character encoding shift-JIS ǤϤǤϡĤ multi-byte character ǤΤǡХܤ 0x5c Υɤ <backslash> ǤϤޤ</p>
<p>Translation phase ΤˤʤäΤɤΤǤϤ token Ǥι³ʤɤȤΤǧɬפΤɤϡǤK&R 1st. Ǥϲ̣ԤˤޤʤĹʸƥ̤ˤޤ褦˽ˤϤˡʤä櫓ǤC90 Ǥܤʸƥ뤬Ϣ뤵뤳ȤˤʤäΤǡ虜虜 token DzԤɬפϤʤʤäƤޤ³ɬפʤΤĹȥԤǤǤСphase 2 3 ϵդΤۤɤäΤǤ</p>
<p>ˤ⤫餺줬ߤεΤ褦˷ޤäΤϡK&R 1st. ʸƥι³ˤϢȤͤȤƽ줿Ǥ褦ˤȤbackward compatibilityʸߴˤΤȻפޤˤĤƤϼѾϤۤȤɰ̣ΤʤǤñʡκǤưפʤΤǤΤǡǤ礦</p>
<br>
<h2><a name="2.3" href="#toc.2.3">2.3. Preprocessing token</a></h2>
<p>Preprocessing tokenʰʸ塢pp-token άˤȤǰ C90 ǽƳ줿ΤǤˤĤƤ֤ǤޤΤƤʤ褦ʤΤǡƤϤʤФʤޤpp-token ȤƵꤵƤΤϼ̤Ǥ*1</p>
<blockquote>header-name<br>
identifier<br>
preprocessing-number<br>
character-constant<br>
string-literal<br>
operator<br>
punctuator<br>
嵭ΤɤˤƤϤޤʤ non-white-space character</blockquote>
<p>ʤΤ褦ǸᤴƤޤǤ token ȤϤʤäƤޤToken ϼΤ褦ʤΤǤ</p>
<blockquote>keyword<br>
identifier<br>
constant (floating-constant, integer-constant, enumeration-constant, character-constant)<br>
string-literal<br>
operator<br>
punctuator</blockquote>
<p>Pp-token token ȰäƤΤϼǤ</p>
<ol>
<li>Keyword ¸ߤʤ
keyword Ʊ̾ identifier Ȥư롣<br>
<li>Constant Τ character-constant ƱǤ뤬floating-constant, integer-constant, enumeration constant ¸ߤfloating-constant, integer-constant preprocessing-number ȤΤ롣<br>
<li>Header-name pp-token ȤƤ¸ߤʤ<br>
<li>Operator punctuator ϤۤƱǤ뤬operator #, ## punctuator # pp-token ȤƤ¸ߤʤʤ preprocessing directive ԤǤͭˡ<br>
</ol>
<p>ȡƱʤΤ string-literal character-constant ʤΤǤǤפʤΤ keyword ¸ߤʤȤȡ token pre-processing-number ¸ߤǤΣˤĤơ˸Ƥޤ</p>
<p>:</p>
<pre>
*1 C90 6.1 Lexical elements
C99 6.4 Lexical elements
</pre>
C99 Ǥ pp-token Ǥ token Ǥ operator punctuator ˵ۼ줿Operator ȤѸ token μȤƤǤϤʤñˡֱ黻ҡפȤǽɽѸȤʤäƱ punctuator token (punctuator pp-token) ʸ̮ˤä punctuator ʶڤҡˤȤƵǽꡢoperator ȤƵǽꤹ뤳Ȥˤʤ롣ޤpp-token α黻ҤȤ _Pragma ɲä줿</p>
<h3><a name="2.3.1" href="#toc.2.3.1">2.3.1. Keyword ʤ</a></h3>
<p>Keyword phase 7 ǽǧޤץץ phases Ǥ keyword identifier ȤưޤơץץˤȤäƤ identifier ϥޥ̾Ǥ뤫ޥȤƤʤ identifier Ǥ뤫Τɤ餫Ǥ (*1)ȤȤϡkeyword Ʊ̾ΥޥȤȤȤˤʤޤ</p>
<p>εϡץץϰ¸ʬڤΥԲķΤΤȻפޤˤä㤨 #if ˥㥹Ȥ sizeof ȤȤػߤޤ*2</p>
<p>:</p>
<p>*1 äΤ˸СޥΥѥ̾ identifier Ǥ롣ޤpreprocessing directive ̾ü identifier Ǥꡢkeyword ȻʤäƤ롣줬 directive Ǥ뤫ɤϹʸȽǤΤǤꡢdirective ǤʤˤСޥŸоݤȤʤꤦñʤ identifier Ǥ롣</p>
<p>*2 <a href="#3.4.14.7">3.4.14.7</a>, <a href="#3.4.14.8">3.4.14.8</a> ȡ
</p>
<h3><a name="2.3.2" href="#toc.2.3.2">2.3.2. Preprocessing-number</a></h3>
<p>Preprocessing-numberʰʸ塢pp-number άˤϼΤ褦˵ꤵƤޤ
*1, *2</p>
<blockquote>
digit<br>
. digit<br>
pp-number digit<br>
pp-number nondigit<br>
pp-number e sign<br>
pp-number E sign<br>
pp-number .<br>
</blockquote>
<p>Non-digit ȤΤ letter underscore Ǥ
</p>
<p>Ȥʤޤ
</p>
<ol>
<li>Ƭ digit ޤ . digit Ǥ롣
<br>
<li>Ȥ letter (alphabet), underscore, digit, period e+, e-, E+, E- sequence Ĥɤ¤ǤƤ⤫ޤʤ<br>
</ol>
<p>Pp-number floating-constant, integer-constant Τ٤Ƥޤߤޤ㤨 3E+xy ȤäͤǤϤʤΤޤǤޤPp-number ϥץץñˤ뤿˺Ѥ줿Τạ̇̄ΩĤμ sequence tokenization ΩĤȤƤޤ*3</p>
<p>Tokenization ñˤʤΤϳΤǤ pp-number ͭ token ǤϤޤäơϥץץνޤǤ˾ǤƤʤФʤޤ pp-number ȤΤ虜虜ǻȤɬפϤޤޤƻȤȤͣͤΤϡ## 黻ҤȤä줿ޥǿ pp-number Ȳ pp-token ȤϢ뤵 pp-number Ȥʤꡢ # 黻ҤȤä줿ޥˤäƤ줬ʸǤʸƥƤޤСɤ pp-token valid token ˤʤޤ pp-number ¸ߤǧʤȡϢˤä줿Τ valid pp-token ǤϤʤʤäƤޤޤʤη̤ undefined Ȥʤˡ</p>
<p>Ȥƻ϶ˤüʤΤǤܺ٤˸ƤɬפϤޤ pp-number token-oriented ʥץץͤ뤦Ƕ̣Ƥޤ</p>
<p>:</p>
<pre>
*1 C90 6.1.8 Preprocessing numbers
C99 6.4.8 Preprocessing numbers
</pre>
<p>*2 C99 ǤưΣɽǽˤ뤿ˡpp-number p sign, pp-number P sign Ȥ sequence ɲäƤ롣</p>
<p>ޤ嵭 nondigit identifier-nondigit ֤줿 identifier UCN (universal character name) Ƚ multi-byte character λѤǧ줿ΤȼѹǤ<a href="#2.8">2.8</a> ȡˡʤpp-number UCN ȤȤǤmulti-byte character ȤǽǤ롣ͥȡ UCN multi-byte character ޤޤ뤳ȤϤʤΤǤ뤬Ϥ ##, # 黻ҤȤäʸΤȤͤơ줬ǧ줿ΤǤ</p>
<pre>
*3 C89 Rationale 3.1.8 Preprocessing numbers
C99 Rationale 6.4.8 Preprocessing numbers
</pre>
<h3><a name="2.3.3" href="#toc.2.3.3">2.3.3. Token-base ư token Ϣ</a></h3>
<p>C90 Ǥϥޥ黻 ## ˤä pp-token Ϣ뤹뤳ȤǤ褦ˤʤޤΤȤ C90 ΡֿǽפȤƤ褯ΤƤޤɲä줿ǽȤϡŪˡؤ뤿Ƴ줿ΤǤܤΤϡ줬 token-oriented ʥץץΤɬܤΤΤȤʤäƤ뤳ȤǤ</p>
<p> token ϢˡȤƤϡ "Reiser" cpp ǤΡȤ 0 Ĥ character ִȤͤѤΤΤƤޤޤʳˤ character-oriented ưץץåǤϡտޤʤˤޤ token Ϣ뤬ȯƤޤȤꡢѤŪˡʤǤϤޤǤϤ⡢character-oriented ʥץץη٤Ѥˡȸޤ</p>
<p>Ф C90 Ǥϡtoken-oriented ưˤäŪ token Ϣ뤹뤳ȤǤ褦ˤʤäƤޤTranslation phase 3 ǥ pp-token white spaces sequence ʬޤθ pp-token ȤΤϡ## 黻ҤˤϢ # 黻Ҥˤʸheader-name ܤʸƥϢȥ磻ʸƥϢ뤷ޤ pp-number ¸ߤ⤳ʸ̮֤ƹͤȡΰΤˤʤޤʤC90 tokenization ˤĤƤϡΤ褦ʸ§¸ߤƤȸǤ礦</p>
<ol>
<li>Pp-token ۤΤϢ뤵뤳ȤϤʤϢ ## 黻ҤˤäʤФʤʤ<br>
<li>äϢ뤵줿 pp-token ƤʬΥ뤳ȤϤʤ<br>
</ol>
<p>Pre-Standard character-oriented ʥץץǤϡޥƤӽФŸȡη̤ token sequence token ȰտޤʤϢȤޤ token-oriented Standard C ΥץץǤϵäƤϤʤʤȤȹͤޤ*1</p>
<p>:</p>
<p>*1 <a href="#3.4.21">3.4.21</a> ȡ
</p>
<br>
<h2><a name="2.4" href="#toc.2.4">2.4. #if ɾη</a></h2>
<p>C90 Ǥ #if ɾ long ʤ unsigned long ΣΥǹԤ뤳Ȥˤʤޤ (*1)⡢ץץñ㲽ȤȤˡϰ¸ʬʤΤΩäƤޤint ΥϤˤä礭ѤΤ٤ơlong / unsigned long ȾνϤӥåȡνϤӥåȤޤϣӥåȤǤ顢̤ #if ˤϤʤ portability ݤǤޤ*2, *3</p>
<p>:</p>
<pre>
*1 C90 6.8.1 Conditional inclusion դ -- Semantics ̣§
*2 C99 6.10.1 Conditional inclusion
</pre>
<p>C99 Ǥ #if ηϤνϤκȤ줿
C99 Ǥ long long / unsigned long long ɬܤǤΤǡ long long / unsigned long long ޤϤʾȤȤˤʤ롣ˤä #if portability Ϥʤ㲼뤳Ȥˤʤä</p>
<p>*3 long ӥåȤνϤƤ뤫⤷ʤɤȤȤ ;̤Ǥ뤬ΥϼΤ褦˷ۤɤȻפäƤ롣</p>
<ol>
<li>short ϣХȡlong ϣХȤȤ롣<br>
<li>longlonglong long ǤϤʤˤޤ quadra ХȤȤ롣<br>
<li>int CPU ˤȤäƤμʥȤ롣ʤ short, long, longlong Τɤ줫ĤȰפ롣<br>
<li>short int, long int Ȥդ short, long int ν˻ȤȤϤ롣<br>
</ol>
<p>ʤӥåȤνϤνи衢sizeof (short) <= sizeof (int) <= sizeof (long) Ȥ뤿ˤ٤ƤԼˤʤꡢɤη portability ʤʤäƤƤΤǤ롣ϤơХǷΤɤ</p>
<br>
<h2><a name="2.5" href="#toc.2.5">2.5. Portable ʥץץå</a></h2>
<p>ʾΤ褦 Standard C ץץεϡץץåΤΤΥ portable ˽ȤǽˤƤޤץץåѥΤνϰ¸ʬˤĤΤʤФʤʤȤϡʤǤºݤ Standard C νϤǥץץå portable ˽ȤȤʤΤϡΤ褦ʼŪʬǤ</p>
<ol>
<li>#include ΤΣϣӤΥѥꥹȵҷɸإåեΤ꤫<br>
<li>ե̾ȹֹξѥΤϤη<br>
<li>¹Իץ<br>
<li>ʸåȡ<br>
<li>ϤǤϡC90 Ǥ long / unsigned long ΡC99 ǤϺΥåȽϤΤäƤƤϤʤʤȡ<br>
</ol>
<p>Τȣϴ¸νϤ˼Ȥʤǡ⤤ϥƱ #line 123 "filename" Ȥ줵ƤȴԤޤ̵ƤʻȤϤȤ⤫ŪˤϡStandard C ΥץץϲǽǤ⥽νˤäƤϡ̤ implementation ɬפȤʤǽʤϤޤʤʸåȤϥ˥ơ֥ۤڤǤ뤬ˡϼºݤˤϡۥȽϤΤۤåȽϤΥȤȤϤۤȤɤʤǤ礦顢ȤϤʤʤǤ礦</p>
<p><b>mcpp</b> Standard C ץץλͤΤΩƤ뤳ȤưȤƤޤʤ<b>mcpp</b> ¿νϤ˰ܿ뤳ȤŪȤƤΤǡportability ݤΤ #if section ʤ¿ʤäƤ뤬ˡ</p>
<br>
<h2><a name="2.6" href="#toc.2.6">2.6. ؿͥޥŸˡ</a></h2>
<p>դΥޥŸˡ C90 ǤϴؿƤӽФǥˤƵꤵ졢function-likeʴؿ͡˥ޥȸƤФ褦ˤʤޤ˥ޥޤޤƤϡ§ȤơϥѥȤִäŸޤ</p>
<p>Pre-Standard ǤϤ餫ǤϤޤǤºݤˤϡΥޥŸ˥ѥִŸȤˡȤΤ¿äΤǤϤʤȻפޤŸˡطʤˤΤϡХǥͤΥƥִη֤ȤȯۤǤäȿ¬ޤʤޥŸϰ̤˥ǥͤΥƥִη֤Ǥޤʤ櫓ǤդޥŸˤΤ¿ΥץץåΥޥŸˡäΤǤϤʤǤ礦</p>
<p>ˡϥǤδؿƤӽФͤγѤȤϤޤäۤʤä̯ʥޥλȤͶȯͥȤ줿դޥθƤӽФκݤˤϡɤ줬ɤΰʤΤ狼ʤʤ֤ȯޤᤰäƽϰ¸ʬƤޤǸСäΥޥŸϹ٤ʵǽô褦ˤʤäˡǥͤΥƥִη֤ȤȯۤǤϤϤ٤ŤʤꤹȸǤ礦</p>
<h3><a name="2.6.1" href="#toc.2.6.1">2.6.1. ؿƤӽФƱ</a></h3>
<p>Ƨޤ Standard C ϡfunction-like ޥθƤӽФؿƤӽФؤǤΤȤưդ뤳ȤǡʸˡȹͤޤRationale Standard C Υޥ˴ؤ뵬꤬ɤȤ§ĤƤǡ§Ƥޤ*1</p>
<ul>
<li><samp>ؿȤȤǤϤɤǤޥȤ褦ˤ뤳ȡ</samp><br>
<li><samp>ޥƤӽФϤɤˤäƤ⡢ʤϤʸˤäƤ⡢ޥΰˤäƤ⡢ޥˤäƤ⡢Ʊ token sequence 褦˥ޥŸꤹ뤳ȡ</samp><br>
</ul>
<p>ϴؿƤӽФʤΤȤǤդޥθƤӽФǤǤϤʤäΤǤǥͥƥִη֤ǤϡʤʤȤ餫Ǥ</p>
<p>:</p>
<pre>
*1 C89 Rationale 3.8.3 Macro replacement
C99 Rationale 6.10.3 Macro replacement
</pre>
<h3><a name="2.6.2" href="#toc.2.6.2">2.6.2. ֤Ÿ</a></h3>
<p>ؿƤӽФȥѥʥޥŸȤ§¸뤿˴οʤΤϡΥޥŸƤѥ֤뤳ȤǤơΤˤϰΥޥƤӽФϤΰǴ뤷ƤʤФʤޤʴ뤷Ƥʤϥ顼ȤʤˡΥޥθΥƥȤäƤޤʤɤȤȤäƤϤʤޤˤäơͥȤ줿ؿͥޥθƤӽФŪݤĤȤǤޤ*1</p>
<p>:</p>
<p>*1 <a href="#3.4.25">3.4.25</a> ȡ
</p>
<h4><a name="2.6.2.1" href="#toc.2.6.2.1">2.6.2.1. #, ## 黻Ҥ operand Ÿʤ</a></h4>
<p># 黻Ҥ operand ϥޥŸʤȤˤʤäƤޤ
ޤ## 黻Ҥ operand ޥŸ줺Ϣˤä줿 pp-token Ϻ˥ޥŸоݤȤʤޤεϤʤɬפʤΤǤ礦</p>
<p>ε꤬̣ĤΤϡޥޤǤǤޥޤ token sequence ΤޤʸϢ뤷ꤷˡε꤬ΩĤȤˤʤޤդŸƤʸϢ뤷ꤷϡ#, ## 黻ҤȤʤޥ⤦Ĥ֤뤳ȤˤʤޤΤɤǤץޤǤ褦ˤ뤿ˤϡ#, ## 黻Ҥ operand ϥޥŸʤȤ꤬ɬפʤΤǤ*1</p>
<p>:</p>
<p>*1 <a href="#3.4.25">3.4.25</a>, misc.t / PART 3, 5 ȡ# 黻Ҥ operand ޥŸʤȤ꤬ΩɽŪ assert() ޥǤ롣<a href="#5.1.2">5.1.2</a> ȡ</p>
<h3><a name="2.6.3" href="#toc.2.6.3">2.6.3. Ȥ</a></h3>
<p>ơޥŸϥޥƤӽФִꥹȤ֤졢function-like ޥΰ§ȤŸƤִꥹΥѥ֤줿塢ִꥹΥޥƤӽФƺ뤳ȤˤʤäƤޤ</p>
<p>κ K&R 1st. λͤǤơطʤˤϡ֥ǥͤΥƥִη֤פȤȯۤäȻפޤStandard C Ǥ function-like ޥΰ ## 黻Ҥ operand ʳ˴ŸƤޤäƤޤǤϤäŸΤǤ礦</p>
<p>ɬפʤΤϡִꥹΥѥʳʬ˥ޥ硢 ## 黻Ҥޤޥξ硢⤦ĤϥޥΡפŤˤʤä cascaded macro ǤޥƤӽФΡְפŤˤͥȤƤϡϺҹ¤ŸƤΤǡ̾ϺǿŸ뤳ȤϤޤʤ㳰Ϥ롣<a href="#2.7.6">2.7.6</a>, <a href="#3.4.27">3.4.27</a> ȡˡ
</p>
<h3><a name="2.6.4" href="#toc.2.6.4">2.6.4. ƱޥκƵŪŸɻ</a></h3>
<p>Cascaded macro ϼŸƤޤʤäƤϺ礬ޤϥޥȤƵŪˤʤäƤǤΤޤŸ̵ºƵ˴٤äƤޤޤȤˤΥޥޤޤƤľܺƵξϤİʾŪ˺ƵƤƱҤޤ뤿ᡢStandard C ǤϡŸΥޥƱ̾Υޥִꥹ˸Ƥ⡢ִʤפȤղäƤޤʸϤǤΰտޤϤ狼䤹ΤǤ</p>
<p>ϴؿͥޥξ硢ؿȤϰäʸˡˤʤǤǥִȤޤäƤޤޥͭλͤǤꡢޥǤǤʤʽȤƽȤƤΤʤΤǡλͤβƻĤΤʤȤǤ礦</p>
<br>
<h2><a name="2.7" href="#toc.2.7">2.7. </a></h2>
<p>ơʾǤ Standard C Υץץɤ̡ñ̤夲Ƥޤܺ٤˸ƤȡԵ§ʤȤ䡢ϤΥСإåɤγͭܿ˳Ȥ˴ޤޤƤޤ¿ pre-Standard ŪŪʥץץˡ줺˻ĤäƤޤäΤȻפޤΩʤIJŪʬ¸ߤͤ狼ˤäˤƤޤޤStandard C ˤäƿ̵ѤѻˤʤäȤ鷺ʤ餢ޤʲˤФƤߤޤ</p>
<h3><a name="2.7.1" href="#toc.2.7.1">2.7.1. <stdio.h> η header-name</a></h3>
<p><, > ǰϤޤ줿 header-name K&R 1st. Ū˻ȤƤƤΤǤȡȤƤϤ㳰ŪԵ§ʤΤǤΤ Standard C Ǥ header-name Ȥ pp-token ˴ؤƤ undefined ʬ implementation-defined ʬ¿ʤäƤޤäƤޤ㤨 /* Ȥ sequence ޤޤƤ undefined Ǥޤ<stdio.h> Τ褦ˡheader-name Ǥʤ <, stdio, ., h, > ȤĤ pp-token ʬȤ#include Ԥ˸¤äƣĤ pp-token ˹ʤФʤޤˡ implementation-defined ǤTokenization translation phase 3 ǹԤΤˡphase 4 ǤιԤ #include directive ǤȤ狼ȡtokenization ʤʤФʤʤΤǤϤʤϤŪʻͤȸ虜ޤPhase 3 Ǥäʬ줿ʲΡpp-token δ֤ space νȤʤޤ#include <stdio.h> ʤɤȤǥ쥯ƥ֤ϺǤ portability ι⤤ΤΤ褦˸ޤץץμͤȤʤ portability 㤤ΤʤΤǤ#include ԤΰޥǤȡԵ§ޤ</p>
<p>", " ǰϤޤ줿 header-name ˤϡϤޤ\ escape ʸȤưʤȤȤ <, > ˤ header-name ƱͤǡʸƥȤϰä̤äƤޤescape sequence phase 6 ǽΤʤΤǡphase 4 ǽƤޤ header-name escape sequence ¸ߤʤΤϡŪʤȤǤϤޤʵʤǤ header-name \ undefined Ǥ롣ϼڤˤ뤿θǤºݡ", " Ǥ \ " ľˤΤǤʤ¤ꡢʤ<, > ǤϤ⤦ʣǤ뤬ˡ*1</p>
<p>ޤ#include <stdio.h> #include "stdio.h" Ȥΰ㤤ϡԤϽξõΤФơԤϥȥǥ쥯ȥʤХѥˤõơ̵ <stdio.h> ƱõȤΤȤˤޤStandard C ǤϣϣӤ˴ؤ֤ƤʤΤǡ֥ȥǥ쥯ȥפȤѸϻȤäƤʤ¿ΣϣӤˤĤƤϤᤵˡʤ#include <stdio.h> #include "stdio.h" ȽФळȤʤΤǤ</p>
<p>Header-name ηˣ濫뤳Ȥϡ桼ΥإåȥƥإåȤζ̤ܤǤ狼Ȥ readability ޤΤˤϤ虜虜Ե§ʥȡѰդʤƤ⡢"stdio.h" "usr.H" Ȥդ suffix Ƕ̤ޤǰΤոȡ readability Ǥ뤫顢ƥबե̾ʸȾʸ̤ʤƤ⤫ޤʤ"usr.hdr", "usr.usr", "usr.u" Ǥ⤫ޤʤˡ</p>
<p><, > ǰϤޤ줿 header-name ϸͤȤƤ̵ѤǤꡢץץ tokenization ݤˤʤΤǡѻߤۤɤȻפޤΥѥ뤹뤿ˤϤʤѻߤ櫓ˤϤ椭ޤobsolescent feature ȵꤷƤۤΤǤ</p>
<p>*1 ȤC99 Ǥ \ ǻϤޤ UCN Ƴ줿ˡäˤʤä</p>
<h3><a name="2.7.2" href="#toc.2.7.2">2.7.2. Character-base ΤʤĤ # 黻Ҥε</a></h3>
<p>ϡ# 黻Ҥ operand pp-token δ֤ token separator ȤƤ white spaces ΰǤİʾ white spaces ϣĤ space ˰̤Ĥʤ space ʤȤˤʤäƤޤ</p>
<p>ȾüʵǤToken-based ưŰ줹뤿ˤϡtoken separator ̵ͭ˺ʤȤɬפǤꡢΤˤ token separator ٤ƺ뤫Ȥ⤢ pp-token δ֤ one space ֤ɤ餫˵ꤹ٤ǤC89 Rationale 3.8.3.2 (C99 Rationale 6.10.3.2) The # operator ϤεˤĤơ"As a compromise between token-based and character-based preprocessing discipline"token-based ʥץץˡ character-based ʤȤƤȤơ˷ꤵ줿ȽҤ٤Ƥޤ</p>
<p>ϥץץåμưפˤɤ;פô̤ˤʤäƤꡢޤʣʥޥŸˡˤޤ⤿餷ƤޤC90 6.8.3, C99 6.10.3 Macro replacement ޥִ -- Examples 4. ˤ㤬ܤäƤޤ</p>
<pre style="color:navy">
#define str(s) # s
#define xstr(s) str(s)
#define INCFILE(n) vers ## n
#include xstr(INCFILE(2).h)
</pre>
<p> #include ԤϤŸȤΤǤ</p>
<pre style="color:navy">
#include "vers2.h"
</pre>
<p>¿ϤǤޤ
INCFILE(2) vers2 ִ뤳ȤˤϤޤϤޤxstr() ΰǤ INCFILE(2).h Ÿ̤ vers2, ., h ȤĤ pp-token sequence ǤʽŸϤΣĤ pp-token δ֤ white spaces ʤΤȤưäƤޤˤϼΤ褦꤬ޤ</p>
<ol>
<li>vers2 ϥˤä pp-token ǤϤʤޥִˤä줿ΤǤ롣vers2 θ white spaces ʤȤݾڤ뤿ˤϡޥִ white spaces ʤ褦ˤʤФʤʤޥִˤǤȡʤȤץץåѥ餫ΩץǤ硢ޥŸη̤Ȥ pp-token ۤΤϢ뤷ƤޤȤȯ롣 token-based ʥץץθ§ȿ롣<br>
<br>
<li># 黻Ҥ operand ˤʤꤦޥִ white spaces pp-token ۤΤϢ뤹ΤɤˤϡؿͥޥƤӽФΰ¸ߤޥִǤϡŪ˲ white space ִ̤Ǥ줬 # 黻Ҥ operand ˤʤäϲ white space ٤ƤִäƤǸ˻Ĥä white space ʪ space ֤롢Ȥäٹɬפˤʤ (*1)ϥץץμˤȤäƤʤôǤ롣ơ˸礦åȤʤ⡢ɬפǤ뤳Ȥϵʽʸ餫ǤϤʤǤΤΤǤ롣<br>
</ol>
<p>ޤʤ䤳Ϥ٤ơ# 黻Ҥ operand token separator ΰȾüͳ褷Ƥޤ</p>
<p># 黻ҤǤϤ٤Ƥ pp-token single space ʬΥʸȤͤpp-token ΰۤϢɤ䤳ȯ뤳Ȥʤʸ줿ɤ pp-token sequence Ǥä狼ΤǡɤȻפޤꤹȡΥޥ "vers2 . h" Ÿ뤳ȤˤʤޤŬڤʥޥǤϤޤ</p>
<p>Ǥ狼褦ˡspace ΤʤȤˤ줬ƤϺۤȤͣξ礬#include ԤΥޥ #, ## 黻ҤȤ줿ǤTranslation phase 4 ǽ #include ԤǤϡphase 6 ǽʸƥϢϻȤޤ#include ԤΥޥ϶ #, ## 黻ҤȤäƥѥʤƤ⡢ñʸƥФǤळȤǤäΤ token-based ʸ§ΤϡޤˤХƤޤ</p>
<p>Standard C ΥץץǤ syntax token-based ʤΤǤʤ顢# 黻Ҥ semantics ΤȤ character-based ʵ꤬ơŪʰ»ʤäƤޤ*2</p>
<p>ξ塢ʽΤϵʸɬ餫ǤϤʤͤȤƤޤŬڤǤꡢ٤Ǥ礦</p>
<p>:</p>
<p>*1 <b>mcpp</b> ⤷礦ʤΤǤƤ롣</p>
<p>*2 JIS C ISO C ΤΤǡƤѹϲäƤʤȤˤʤäƤ롣JIS ϥɥ֥åפ X 3010 / 6.8.3 4. ΰˤϡfputs( ..) ȤޥŸ̤ʸȤ space ̵ͭäƤȤߥ롣ΰ space ΰ̵ФǤꡢ# 黻Ҥε褯ƤͤƤ뤤ϰåȤϻפʤꤽΤΤ̵ѤѻǤ뤳ȤΤǤ롣</p>
<h3><a name="2.7.3" href="#toc.2.7.3">2.7.3. ޥ white spaces ΰ</a></h3>
<p># 黻Ҥ operand white spaces ΰƱͤε꤬ޥ˴ؤƤ⤢ޤݡݥޥκϸΥޥʤΤǤʤФʤʤǤ뤿ˤϡѥο̾ƱǡִꥹȤƱ spelling ǤʤФʤʤִꥹ white spaces ˤĤƤϡ̵ͭƱǤʤФʤʤϰäƤƤɤݡݤȵꤵƤޤ</p>
<p># 黻Ҥε꤬嵭Τ褦ǤСִꥹ white spaces ˤĤƤƱʤФʤʤΤǡεǤϤꡢͳ # 黻Ҥεˤޤ</p>
<p># 黻Ҥ operand pp-token δ֤ˤϤ٤ one space ΤȤưȤȤˤСޥκ˺ݤƤ white spaces ̵ͭˤʤʤʤޤ</p>
<p>ˡץץåμǤϤ̲ơΤ٤Ƥ pp-token δ֤§Ȥ one space ֤褦ˤ뤳ȤǤޤ뤳ȤˤäơޥŸ˺ݤƤ tokenization ñΤ˹ԤȤǤޤθ§㳰ĤޤĤ preprocessing directive ԤǤβԥɤǤꡢ⤦ĤϥޥǤΥޥ̾Ȥ³ '(' δ֤ white spaces ̵ͭǤФŪˣäΥץץκƤΤǤꡢޤѤ櫓ˤϤޤ</p>
<h3><a name="2.7.4" href="#toc.2.7.4">2.7.4. ؿͥޥΥѥ̾</a></h3>
<p>ޥκ˺ݤƤϥѥ̾פƤʤФʤʤȵꤵƤ뤳Ȥ <a href="#2.7.3">2.7.3</a> ǿޤϲʵȻפޤѥ̾ϡޥŸ˲ΰ㤤⤿餷ޤ˺ݤƤå뤿ˤϡץץåϤ٤ƤΥޥΥѥ̾ƤɬפޤȤƤ⤽λȤƻϡʤȤϰϤǤϡΥåʳ˲⤢ޤäΤۤȤɰ̣ΤʤåΤˡϤ˥ХˤʤʤСإåɤΤϡޤ</p>
<p>ޥκǤϥѥ̾פƤʤФʤʤȤϡۤɤȻפޤ</p>
<h3><a name="2.7.5" href="#toc.2.7.5">2.7.5. ɾΤ狼ʤ #if ʸ</a></h3>
<p>#if ԤΰǤ #if ǤɾϥץץǹԤΤǼ¹ԻĶΩΤǤʤФʤޤΤᡢ̤顢¹ԻĶФ䤤碌ɬפȤ륭㥹ȡsizeof 黻ҡƤޤʤ translation phase 7 ǽɾˡʸʤӥ磻ʸˤϽƤޤ</p>
<p>ʸɾϼΤ褦˲ŤˤǤꡢportability ϤۤȤɤޤ</p>
<ol>
<li>ʸͤʸåȡASCII, EBCDIC ˤˤäưۤʤ롣<br>
<br>
<li>ʸåȤƱǤäƤ⡢single-character character con-stant ΰϽǤʥѥΤǤ char ʤĤˤˡ<br>
<br>
<li>Multi-character character constant ɾϽǤꡢʸåȤΰƱǤ⡢ͤƱȤϸ¤ʤ<tt>CHAR_BIT</tt> char ʤȤƤ⡢'ab' 'a' * 256 + 'b' ȤʤΤȤ 'a' + 'b' * 256 ȤʤΤϡꤵƤʤ<br>
<br>
<li>Multi-byte character encoding ϽǤ롣Wide char-acter encoding multi-byte character encoding ˽wchar_t Υ̵ͭǤ롣<br>
<br>
<li>Multi-byte character encoding ƱǤäƤ⡢ͤɾƱȤϸ¤ʤƱ꤬롣<br>
<br>
<li>ʾϤ⥳ѥΤǤʸɾˤⶦ̤Ǥ뤬˥ץץǤʸåȤϥѥΤȰäƤƤ褤ȤˤʤäƤ롣<br>
Translation phase 4 ޤǤоݤȤΤϥʸåȤǤꡢphase 6 ʹߤоݤȤΤϼ¹ԻʸåȤǤ롣phase 5 ʸʸƥʸΥʸåȤ¹ԻʸåȤؤѴԤʤʸåȤ⡢multi-byte character encoding ⡢ȼ¹ԻȤǰޤäƤ뤫⤷ʤ<br>
#if ʸɾΤ phase 4 Ǥ뤬ϥʸåȤͤǤ¹ԻʸåȤͤߥ졼ȤƤ⡢ɤǤ褤ȤˤʤäƤ롣ʸåȤȤƤʤ<br>
<br>
<li>#if ɾʸåȤȼ¹ԻʸåȤƱǤäƤ⡢ɾΤϰäƤƤ褤ȤˤʤäƤ롣ʤΰ⡢multi-character character constant, multi-byte character constant ɾΥХȥ⡢phase 4 phase 7 ȤǰäƤ뤫⤷ʤ<br>
<br>
<li>⡢ʸɾηϡphase 7 Ǥ multi-byte character ޤ character constant intwide character constant wchar_t ǤΤФơphase 4 Ǥ C90 Ǥ long ޤ unsigned long Ǥ롣ʤphase 4 Ǥ int long ƱɽĤΤ褦˰졢unsigned int unsigned long ƱɽĤΤ褦˰롣äơʸåȡΰɾΥХȥ phase 4 7 ȤǤޤäƱǤäƤ⡢<tt>INT_MAX</tt> < <tt>LONG_MAX</tt> νϤǤϡphase 4 ǥСեʤʸ phase 7 ǤϥСե뤳Ȥ⤢ꤦ뤷phase 7 int ˤʤΤ phase 4 Ǥ long ˤʤ뤫⤷줺ˤʤ뤫ˤʤ뤫ޤäƤϤʤʸǤʤȡˤʤ뤳ȤϤʤʸˤĤƤϰŪˤϤۤȤͽ¬Ǥʤ<br>
<br>
<li>C99 Ǥ #if ηϤνϤκȤ줿ʤɾηϤˤäưۤʤ뤫⤷ʤ<br>
<br>
<li>˥ץץǤʤѥˤⶦ̤Ǥ뤬multi-byte character ˤ encoding ꤬롣Ȥ UTF-8 ϣХȤ unicode ʸХȤʤХȤ encode 뤬ʸΡ͡פȤϤäǤ ͤ UTF-8 ΣХȤ sequence ɾ͡פǤȤ⸵ unicode Ρ͡פǤȤȤˤʤΤǤɤͤŪǤΤȽȤʤ<br>
<br>
<li>⥳ѥȶ̤Ǥ뤬C99, C++98 Ǥ UCN ȤΤޤƳ줿Ʊʸ UCN ɽΤ multi-byte character ȤƽΤȤƱʸפǤƱʸΤϤǤ뤬Ρ͡פ multi-byte character encoding ˤäƤ줾äƤǤ<br>
</ol>
<p>Ȥǡ#if ʸͤϽϴ֤Ǥ portability ʤСƱϤΥѥեȤδ֤Ǥ㤦⤷ʤȤ¿ɤɾ뤫ۤȤͽ¬Ǥޤ</p>
<p>̤ˤϣøεˤϤޤʬϾʤ黻˴ؤƤΰǤΤΡ CPU ǷޤΤǤꡢϺԤǤդ˷뤳ȤΤǤʬϤޤʤΤǤʸɾ㳰Ǥ CPU λ͡ʸåȡmulti-byte character encoding Ȥƥ¦װǷޤ¦̤ΤۤˡϺԤκ̤ˤޤƤ̤¿ޤ</p>
<p>줬 #if ʸȤʤȡϤκ̤ϰϤѥեȤΰפݾڤ줺ɾƤ⤤äɾΤۤȤɤ狼ޤʸɾϼ¹ԻĶؤ䤤碌ɬפȤΤȹͤޤStandard C ΥץץǤϤ䤤碌ɬפȤϽ줿ˤ⤫餺ʤʸϽޤǤơ䤤碌ʤǤ⤹൬̵˺äˡ̣ʤΤȤʤäƤޤäȻפޤ</p>
<p> #if ʸˤɤʻȤƻΤǤ礦 ѥեǤ char ѿͤʸӤ뤳Ȥ褯ԤޤѿȤʤץץեǤϤλȤƻ⤢ޤ#if ʸλȤƻȤƤϡˤŬڤϻפդޤ̵ѤĹʪǤꡢ㥹Ȥ sizeof Ʊͤˡ#if оݤ٤Ǥ礦Ƥ⡢㥹Ȥ sizeof 줿Τ٤С륽ϤϤ뤫˾ʤϤǤ</p>
<h3><a name="2.7.6" href="#toc.2.7.6">2.7.6. ޥδؿͤǤʤ</a></h3>
<p>ޥƤӽФϤäִꥹȤ֤줿塢줬˺ޤStandard C κεǤƱΤϡΥޥƤӽФθΥȡִꥹȤ³Ƥ뤫Τ褦ˡִꥹȤϢ³뤳ȤǤϴؿƤӽФǥȤؿͥޥεθ§ޤäæƤꡢޥŸ狼ˤװȤʤäƤޤϡ³ΥȡоݤȤȤεϺоݤִꥹȤ˸ꤹ٤ȹͤƤޤ</p>
<p>¤ϸ³ΥȡоݤȤΤϡ餯 K&R 1st. ΤĹǯΰۤλͤäȻפޤStandard C ǤϤλͤɬפʤʤäϤʤΤǤIJΤ褦ĤäƤޤäƤΤǤϥޥŸκˤǤΤǡʲ˾ܺ٤˸Ƥ뤳Ȥˤޤ</p>
<p>ޥ rescanʺˤˡʸϤΤ˵ҤΤϡưפʤȤǤϤޤʽʸϤ⡢K&R 2nd. ʸϤ狼䤹ΤǤϤޤȤСK&R 2nd. A.12 ˤϡִꥹȤϷ֤פȤޤʽˤϷ֤ȤϽƤޤRescan ϣԤ褦ˤɤޤƵŪ˹Ԥ褦ˤɤޤƤ櫓ǤϤޤ</p>
<p>ϼȤʤȡΤ뤳ȤǤʤΤǤϤʤȻפޤˡˡʤȡľŪǤ褦ˤϤʤʤǤ礦Τ餤ޥ rescanning ȤΤϥޥŸŪʼˡ̩夷ΤʤΤǤ</p>
<p>ޤΥХƤƤߤޤñˤ뤿ˡ x, y ϥޥǤϤʤȤޤΥޥƤӽФϤɤŸΤǤ礦</p>
<pre style="color:navy">
#define FUNC1( a, b) ((a) + (b))
#define FUNC2( a, b) FUNC1 OP_LPA a OP_CMA b OP_RPA
#define OP_LPA (
#define OP_RPA )
#define OP_CMA ,
FUNC2( x, y)
1: FUNC2( x, y)
2: FUNC1 OP_LPA x OP_CMA y OP_RPA
3: FUNC1 ( x , y )
</pre>
<p>1: 2: ִ졢2: rescan ˤä 3: 뤳Ȥϡ狼ޤǤϡ3: ϥޥƤӽФǤ礦 ʤƬ⤦ rescan ٤Ǥ礦</p>
<p>Rescan Ƭ鲿٤Ǥ֤ⷫΤʤΤǤ礦ȤоϰϤƵŪˤ˶Ƥ椯ΤʤΤǤ礦 ¤ϡΤɤǤʤΤǤ</p>
<p>Rescan ȤΤμºݤŪˤ§ŪʺƵǡ뤤ϤƱ̤ˤʤ뤢η֤ǹԤƤȻפޤθŵŪ㤬 Kernighan & Plauger "Software Tools"ʡ֥եȥˡסˤ Macro Processing ξϤ˺ܤäƤΤǤϸ M4 ޥץåȯŸƤ椯Τǡ켫ΤϣåץץåǤϤޤRitchie äǽޥץåפΤȽƤꡢåץץåμˡθΤ뤳ȤǤޤ</p>
<p>ΥޥץåǤϡޥƤӽФȤִꥹȤϤ֤ɤľȤˡ rescanning ¸ƤޤִꥹˤޤޥƤӽФäϡ֤줬ϤˤäΤ褦ˡפοʥޥִꥹȤƱ褦֤ɤľޤ֤ϥޥִƥȤ륨쥬ȤˡסϤҹ¤ߤƵϤμǽ褦ȤΤǤȤ褦ˡˡϥޥץåΥץ¤狼䤹뤿ˡ礤ΩäƤޤ</p>
<p>åץץå¿⤳Ʊ褦ˡŪϡʤΥåִꥹȤѤǡɤľȤˡǥޥ re-scan ƤΤȻפޤ</p>
<p>嵭Ǥϡ2: rescan ˡFUNC1 λǤϥޥƤӽФǤʤȤ狼ȡƱˤΥȡꤷʸִϷ֤ˤƵˤ OP_LPA ʹߤоݤȤʤޤOP_LPA ( ִơ줬ޥǤʤȤ狼ȡ x ʹߤоݤȤʤ롢ȤդˤƬ缡ꤷƤ椭3: ǽ̤ȤʤޤϤϤޥƤӽФǤϤޤ</p>
<p>"Software Tools" Ρʤ뤤ϤΡˤˡϳΤ re-scan δʼˡǤ"Software Tools" ϿƤϤޤˤޤȤ⤢ޤϡϤ֤줿ִꥹȤϥϢ³ɤ߹ޤ뤿ˡrescan ִꥹȤۤƸΥޥƤӽФθʬޤǥƤޤǽ뤳ȤǤͥȤ줿ޥǤϡrescan Ƥ뤦ˤĤδ֤ˤͥȥ٥뤬ƤƤޤȤ⤢ꤨޤĤޥ̾Ÿʤޥ䡢ִꥹȤ̤ΰĤޥθƤӽФȾʬȤ֥ޥλ֤Ҥޤ</p>
<pre style="color:navy">
#define add( x, y) ((x) + (y))
#define head add(
head a, b)
</pre>
<p>줬Ǥδ̯ʥޥƤӽФ ((a) + (b)) ŸޤȤStandard C ǤϤ줬ǧΤƤޤޤĤޤꡢΥޥ undefined ɤˡŪʤΤʤΤǤ</p>
<p>衢åץץåϤޤ֥ޥŸտޤƤȤϻפޤ֤Σåץץåμ嵭Τ褦ʤΤǤäˡޥۤäƤ餷Ÿ̤ȤʤꡢηռŪѤץޤǸ졢줬¾ɸͤȤʤäƤޤĤ Standard C Ǥ⤳ǧ뤳ȤˤʤäΤǤϤʤǤ礦ʤΣåץץåμΤʷ٤̯ de facto standard ͶƳStandard C ˤޤƤΤǤ줬IJIJ椨Ǥ</p>
<p>ơrescan ϺƵ֤Ȥäȡ§ŪʺƵǤꡢ֤ȸäƤ⤢ʤְ㤤ǤϤʤΤǤ롢ȤȤˤʤ뤫ȻפޤƵϺƵǤ̤κƵΤ褦оϰϤ˶Ƥ椯Ȥϸ¤餺षоϰϤ˸˥Ƥ椯Ȥ̯äƵʤΤǤϺƵǤʤƤ֤ⷫǼ¸뤳ȤǤޤƬη֤ǤϤʤ椫η֤ǡ˸ʬǤ椯ΤǤ</p>
<p>äơեΥȤץץǥ쥯ƥ֤٤ƽ줿ΥƥȤͤȡΥ쥺 rescan ǥƥȤκǽ餫Ǹޤ̤ƽƤޤȤǽǤºݡ"Software Tools" ǤϤˡȤäƤꡢߤΣåץץåΥˤƤΤޤʤrescan ȤϥޥŸexpandˤƱǤꡢϤޤƥΤΥޥŸȤƱʤΤǤ</p>
<p>Rescan оݤ˸˥Ƥ椯Ȥϡ¿ޤϤɤŸ٤ΤʥޥȤ C89 Rationale 3.8.3.4. (C99 Rationale 6.10.3.4) ˺ܤäƤΤǤνꤵʤäΤϡ֥ץץΤ quirksʵޤ졢ʡˤޤǤꤷƤⲿˤΩʤפȤƤޤϼŪǤϤषꤹ뤳ȤǤʤäΤǤ</p>
<pre style="color:navy">
#define f(a) a*g
#define g(a) f(a)
f(2)(9)
</pre>
<p>Ǥϡޤ f(2) 2*g ִޤָ³ȡפ rescan оݤȤʤСޥŸϤǤޤǡf(2)(9) 2*g(9) ȤȡȤʤޤȤָ³ȡפоݤȤ뤿ˡ g(9) ޥƤӽФƤޤf(9) ִޤǡ f(9) Ϥ 9*g ִ٤ȤƱ̾ޥκִػߤεŬѤִʤǤ٤ΤǤf(9) Ȥȡ f(2) κǽִ̤θ g ȡָ³ȡפǤ (9) ΤĤʤäΤ rescan ˤä줿ΤǤΤǡ줬 f(2) θƤӽФΥͥȤˤΤˤΤȽȤʤǤ</p>
<p>ˤĤƤ C90 Corrigendum 1 ԤޤAnnex G.2 Undefined behavior ˼ɲäȤΤǤ</p>
<p>-- A fully expanded macro replacement list contains a function-like macro name as its last preprocessing token (6.8.3).<br>
-- Ÿ줿ޥִꥹȤκǸ礬ؿޥ̾Ǥ (6.8.3)</p>
<p>ϺؤΤǤޤ</p>
<p>ޤ"fully expanded macro replacement list" Ȥʸ̣ǤϡְаΥޥŸ줿ִꥹȡפȲ᤹뤷ޤ f(2)(9) ǤϡƱ̾ޥκִˡf(2) 2*g ִ졢 g function-like ޥ̾ǤȤ狼äȤǤǤ undefined Ȥʤޤʤ f g ΥޥǤϡf θƤӽФɬ undefined ȤʤΤǤ</p>
<p>ΡפŬѤȡISO/IEC 9899:1990 6.8.3 Examples ˤ뼡Τ褦ʥޥ㼨⤽ undefined ȤʤäƤޤޤ</p>
<pre style="color:navy">
#define f(a) f(x * (a))
#define x 2
#define g f
#define w 0,1
#define t(a) a
t(t(g)(0) + t)(1); /* f(2 * (0)) + t(1); */
g(x+(3,4)-w) /* f(2 * (2+(3,4)-0,1)) */
</pre>
<p>ʽϤΥޥƤӽФϥȤ˽褦ŸȤƤޤCorrigendum ŬѤȤϤʤޤ f g ΥޥǤϡg Ȥ identifier ФƤɬ undefined Ȥʤޤg ִꥹȤǤ function-like ޥ̾Ǥ f ͣǺǸ pp-token Ǥ顣</p>
<pre style="color:navy">
t(t(g)(0) + t)(1)
</pre>
<p>Ϥޤ t θƤӽФΰŸޤ</p>
<pre style="color:navy">
t(g)(0) + t
</pre>
<p>ˤޤ t(g) ȤޥƤӽФΤǡ줬ŸޤΤˤϤޤŸʤФʤޤ</p>
<pre style="color:navy">
g
</pre>
<p>Ƥ줬 f ִȡ undefined ȤʤΤǤ</p>
<p>⤷Τޤޤˤơִ³Ƥ⡢</p>
<pre style="color:navy">
t(f)
f
</pre>
<p>Ȥʤꡢt(f) Ÿ̤κǸ pp-token f ǤΤǡƤ undefined Ǥִ³ȡʤޤ</p>
<pre style="color:navy">
f(0) + t
f(x * (0))
f(2 * (0))
f(2 * (0)) + t
t(f(2 * (0)) + t)
f(2 * (0)) + t
</pre>
<p>ǽ t θƤӽФŸޤִꥹȤκǸ夬Ϥ t Ȥ function-like ޥ̾ǤΤǡ undefined Ȥʤޤ</p>
<p>ǤϡϤɤǤ礦</p>
<pre style="color:navy">
g(x+(3,4)-w)
</pre>
<p> g f ִ줿ȤǤǤ undefined Ǥ</p>
<p>Examples G.2 Ȥ̷⤹Ȥ˴٤äƤޤäƤޤ
</p>
<p>⤷ Examples Τ㤬ä줿ȤƤ⡢ Corrigendum ǤϷ褷ƺϲäޤˡG.2 ϵʸǤϤʤɲäʸ˺ʤΤǤʸǤϡָ³ȡפ rescan оݤȤȤƤʤΤǤˡ⤷ Corrigendum ʸ˼ȤƤ⡢</p>
<pre style="color:navy">
#define head add(
</pre>
<p> add ִꥹȤκǸǤϤʤΤ</p>
<pre style="color:navy">
#define head add
</pre>
<p> undefined ȤΤǤϡޤˤ⥢ХǤ"fully expanded" Ȥʸ̣ǤȤ⤢ޤ*1, *2</p>
<p>줬ָ³ȡפ rescan оݤȤȤˤäƤ⤿餵줿 quirks Ǥ뤳ȤϡޤǤ⤢ޤĤĤޤ碌褦ȤФۤɡ𤷤ƤޤΤǤʽˤƱ̾ޥִػߤε꤬ʸϤǽƤޤΰ⤳ˤޤ</p>
<p>¾ Standard C function-like ޥθƤӽФ˺ݤƤϡΥޥŸϤΰǹԤȵꤷƤޤΥޥŸθΥƥȤޤǿäƤޤäΤǤ纮Ǥ顢εȸǤ</p>
<p>η̡ƱޥǤˤȤǤʤȤǰä̤ˤʤȤХȯޤ</p>
<pre style="color:navy">
#define add( x, y) ((x) + (y))
#define head add(
#define quirk1( w, x, y) w x, y)
#define quirk2( x, y) head x, y)
head a, b);
quirk1( head, a, b);
quirk2( a, b);
</pre>
<p> quirk1() θƤӽФǤϡ裱Ǥ head add( ִ줿塢 rescan Ǵ뤷ʤޥƤӽФȤ violation of constraintʿХ顼ȤʤϤǤquirk2() head a, b) ϥ顼ˤʤ餺</p>
<pre style="color:navy">
((a) + (b))
</pre>
<p>Ÿ뤳Ȥˤʤޤ</p>
<p>Ĥ褦ǤХȤϤ٤ơ̤˥ޥ re- scan ǡָ³ΥȡפޤǤоݤȤʤäƤޤȤȯƤΤǤϡŸ¾ΥƥʬΩƹԤ뤿ˤϡȤִꥹȤϤ֤ˡǤäƤ⡢ɤΥͥȥ٥Ǥ뤫ȤղäɬפޤȤа̤ˤָ³Υȡפ rescan оݤ˼ޤʤ褦ˤ뤳Ȥưפ˼¸ǤϤǤषߤȾüʵǤϡȤǤʤȤǽѤɬפꡢˤ;פô̤ˤʤäƤޤ</p>
<p>äΥޥŸŪ˥ǥͤʸִκפȤɤƤޤǥͤʸִü˹ⵡǽʣΤ pre-Standard ΥޥŸȸǤ礦</p>
<p>Ф Standard C ǤϡĤޥˤ虜虜 function-like ޥȤ̾ޤդơθƤӽФιʸؿƤӽФ˶դ褦ȤȹͤޤΥޥϴŸƤѥ֤Ȥ⡢ŸϰǹԤȤ⡢θ§˹äΤǤȤ̤˥ޥ rescan ϸ³ΥȡȤ꤬θ§֥亮Ƥޤƥִη֤ȤĤΰʪǤ</p>
<p>³Υȡ rescan оݤƤޤСޥŸϴ˺ƵŪˡʤоϰϤˤˤƵΤӤ˶Ƥ椯褦ˡʾʤȤ뤳ȤϤʤ褦ˡ˵ꤹ뤳ȤǤΤǤơfunction-like ޥϤ̾ˤդ路ޥȤơʤΤˤʤäȤǤ礦ƤϺȤϤäˤȤϻפʤΤǡʤʤäΤñ ANSI C ѰĤѤIJڤȤǤĤʤäȤͤޤ*3</p>
<p>C99 ǤϤåѥڤȤƤ餤äΤǤޤ䤳IJĤäƤޤޤ</p>
<p>:</p>
<p>*1 ԤΤ褦 function-like ޥ̾Ÿ object-like ޥȤΤϡºݤΥץǤܤˤΤǤ롣Τ褦ʤΤǤ롣</p>
<pre style="color:navy">
#define add( x, y) ((x) + (y))
#define sub( x, y) ((x) - (y))
#define OP add
OP( x, y);
</pre>
<p>ԤΤ褦 function-like ޥθƤӽФȾʬŸΤۤŪʤΤǤϤʤʤФʤʤͳϲʤFunction-like ޥΥͥȤϼΤ褦 function-like ޥǤΤɤ</p>
<pre style="color:navy">
#define OP( x, y) add( x, y)
</pre>
<p>*2 Corrigendum ˤФƤͳϡC90 ISO C ѰSC 22 / WG 14ˤ "Record of Responses to Defect Reports" ȤʸǤ狼#017 / Question 19ˡANSI C Rationale 3.8.3.4 f(2)(9) ΥޥŸ˴ؤǾ֤줿ΤǤ롣ľܤϡƱ̾ޥִػߡפεŬϰϤäϤǤ뤬ѰƱ̾ޥ˸¤ʤŪȤƲƤޤäΤǤ롣β Examples Ȥδ̷֤ȯ뤳Ȥˤϵդʤä褦Ǥ롣</p>
<p>ˡ "fully expanded" Ȥʸ̯Ǥ롣f(2) 2*g ִ졢g ޤǺ줿 fully expanded ʤΤǤ</p>
<p>⤷ʤ顢ʾִϵʤ顢undefined ˤʤʤϤǤ롣⤷ޤ fully expanded Ǥʤʤ顢g ³ (9) ȤȤ˺졢f(9) ִ롣⤷줬 fully expanded Ǥʤ顢2*f(9) κǸ pp-token function-like ޥ̾ǤϤʤ顢βϤƤϤޤʤ</p>
<p>ʤޥŸϤĽΤȤʤäƤȤǡ֥ޥŸäפȸäƤΤǤ롣Ͻ۴ˡǤ롣ơޥŸϤĽΤޤޤ狼ʤʤäƤޤäΤǤ롣</p>
<p>C99 1997/11 draft Ǥ Corrigendum Τιܤ Annex K.2 Undefined behavior ˼ޤƤ1998/08 draft ǤϺơؤä Annex J.1 Unspecified behavior ˼Τ褦ʰɲä줿ơɤ줬 C99 ˺Ѥ줿</p>
<blockquote>
<p>When a fully expanded macro replacement list contains a function-like macro name as its last preprocessing token and the next preprocessing token from the source file is a (, and the fully expanded replacement of that macro ends with the name of the first macro and the next preprocessing token from the source file is again a (, whether that is considered a nested replacement.</p>
</blockquote>
<p>ѰϤ褦䤯 Corrigendum ̷˵Ť褦Ǥ롣ʸκŪϤΤޤޤǤ롣ޤޥŸĽΤ⡢ɤ unspecified Ǥ롣⡢'(' ˤ뤫ɤǶ̤ȤΤǤϡƱޥˤ¾ΥޥִꥹˤȤǷ̤äƤȤȤǤꡢӤʤͤǤ롣</p>
<p>ˤĤƤϡ<a href="#3.4.26">3.4.26</a> ⻲ȤΤȡ
</p>
<p>ʤC++ Standard ǤϥޥŸ˴ؤ뵬 C90 ƱǤꡢC90 Corrigendum 1 Τ C99 Annex J.1 ɲä줿ʤ</p>
<p>*3 Ƥ⡢ FUNC2( x, y) Ϥ⤷줬¾ΥޥƤӽФΰˤäϡŸ FUNC1 ( x, y) Ȥʤꡢ˸Υޥ rescan ((x) + (y)) Ÿ뤳Ȥˤʤ롣ʤˤȤǤʤȤǺǽŪŸ̤ۤʤ롣Ϥޤ̤μǤꡢԹǤϤʤǤ</p>
<h3><a name="2.7.7" href="#toc.2.7.7">2.7.7. C90 Corrigendum 1, 2, Amendment 1 Ǥɲ</a></h3>
<p>ISO/IEC 9899:1990 ˤĤƤϡ1994 Corrigendum 1ˤ1995 Amendment 1ˤФ졢 1996 Corrigendum 2 Фޤ</p>
<p>Corrigendum 1 ΤۤϤʸۤȤɤǤĤץץ˱ƶͿΤޤޤƤޤΣĤ <a href="2.7.6">2.7.6</a> Υޥκ˴ؤΤǤ</p>
<p>⤦ĤϥޥΥޥ̾ $ ޤޤƤˤĤƤΡüʵǤ</p>
<p>Standard C Ǥ identifier ʸȤ $ ǧƤޤǧϤŪ¸ߤƤޤtest-t/e_18_4.t ˤ 18.9 ϡStandard C Ǥ $ ʸǣĤ pp-token ȲᤵΤǡޥ̾ THIS $ ʹߤ object-like ޥִꥹȤȤʤꡢTHIS$AND$THAT Ȥ̾ function-like ޥȤץΰտޤȤϤޤää̤ˤʤޤ</p>
<p>Corrigendum 1 Ǥϡ˴ؤ㳰Ū꤬ɲäޤʤobject-like ޥִꥹȤ non-basic character ǻϤޤϡޥִ̾ꥹȤȤ white-space ʬΥƤʤФʤʤפȤΤǤ 18.9 ФƤ Standard C ϿǥåФʤФʤʤΤǤˤäơ$ @ ޥ̾˻ȤƤ륽ۤäưտޤʤ̤˥ץץ֤ɤȤ櫓Ǥ쿴εǤ㳰ΤϺäΤǤ$ @ identifier ǧʤϤǤϡޥϤȤץץǥ顼ȤʤʤƤ⡢ѥեɬ顼ˤʤϤʤΤǡ㳰ɬפϤʤȻפޤ*1</p>
<p>ΤۤISO 9899:1990 Ǥ header-name Ȥ pp-token #include directive ˤƤϤʤʤȤ̣ constraint ޤCorrigendum 1 ǡheader-name #include directive Ǥǧʤޤ</p>
<p>Amendment 1 multi-byte character, wide character Ӥʸ饤֥ؿɲä濴ǡȼä <wchar.h>, <wctype.h> ȤɸإåɲäޤޤISO 646 ʸåȤ˴ޤޤʤʸ䤽Ȥä token, pp-token ɽˡȤơtrigraph ¤֤⤦ĤȤ <iso646.h> Ȥɸإå digraph ε꤬ɲäޤ<iso646.h> ϤĤ operator ޥ뤴ñʥإåǡäϤޤ*2</p>
<p> digraph Ǥ trigraph Ȥ褯ƤơӤϤۤȤƱʤΤǤץץǤΰ֤ŤϤޤääƤޤTrigraph character Ǥꡢtranslation phase 1 ̾ character ѴΤФơdigraph token, pp-token ʤΤǤDigraph sequence # 黻ҤˤäʸϡѴˤΤޤʸʤФʤޤʤ # ΤΤ digraph Ǥ %: ȽΤǤ뤬ˡΤᡢƤΤˡϤϾʤȤ phase 4 ޤǤϤ pp-token ȤݤäƤɬפޤѴȤСθǤʸƥ digraph ǤϤʤtoken ȤƻĤä digraph sequence Ѵˡ</p>
<p>ϽϤ̵ѤôΤǤTrigraph Ʊͤ character Ȥǧphase 1 ѴƤޤۤˤʤޤ pp-token Ȥݤϲ⤢ޤAmendment ⡢digraph ̾ token Ȥΰ㤤ʸˤȯʤƤޤPhase 1 Ѵ褦ˤ "%:" ȤäʸƥΤ˺Ȥ뤫⤷ޤ trigraph ǤƱͤǤꡢ夲ˤϤޤˤüǤɤƤ "%" ":" ȤФߤޤDigraph trigraph alternative Ȥ phase 1 Ѵ褦˰֤Ťʤ٤Ǥ礦</p>
<p>:</p>
<p>*1 C99, C++ Standard ǤϤεϾäƤ롣</p>
<p>C99 ǤϤΤˡ6.10.3 Macro replacement / Constraints ˼ΰ̲꤬դä줿</p>
<blockquote>
<p>There shall be white-space between the identifier and the replacement list in the definition of an object-like macro.</p>
</blockquote>
<p> tokenization 㳰ǤΤǡʤ</p>
<p>*2 C++ Standard Ǥϡ identifier operator ϥޥǤϤʤ token Ǥ롣ʤΤʥץץ٤Ȥϸ餹ȤȯۤˡȤˤϤˤȤäƤϤäʤȤǤ롣</p>
<h3><a name="2.7.8" href="#toc.2.7.8">2.7.8. Ĺʵ</a></h3>
<p>C90 5.1.1.2, C99 5.1.1.2 Translation phasesեˤ 3 ˤϡ³ϤʤΤξĹʵ꤬ޤ</p>
<blockquote>A source file shall not end in a partial preprocessing token or comment.</blockquote>
<p>Translation phase 2 ǡե <newline> ̵Ǥޤ <backslash> <newline> ǽäƤϤʤʤȤΤǡphase 2 ̤äեɬ <backslash> Τʤ <newline> ǽޤPartial preprocessing token ǽ뤳ȤϷ褷ƤޤPartial preprocessing token षΤȤƤϡ " ' <, > бΤȤƤʤΤޤ C90 6.1 Lexical Elementsʻǡ/ Semanticsʰ̣§ˤ undefined ȤƤΤǤꡢޤ˸¤äǤϤޤ"partial preprocessing token or" פʸǤ</p>
<p>C90 6.8.1, C99 6.10.1 Conditional inclusionʾդߡ/ Constraintsˤˤϸɽޤ</p>
<blockquote>it shall not contain a cast; identifiers (including those lexically identical to keywords) are interpreted as described below;</blockquote>
<p> "it shall not contain a cast; " ϼǤ³ʬ Semanticsʰ̣§ˤǡkeyword Ʊ identifier ޤह٤Ƥ identifier ϥޥǤŸ졢Ĥä identifier 0 ɾ뤳Ȥ餫ˤƤޤCast ̤˼夲ɬפϤޤ(type) ȤʸǤ type ñʤ identifier Ȥư뤳Ȥ餫Ǥ</p>
<p>դˡ줬 constraint ˤȡϤ cast ιʸǧơФǥåФʤФʤʤȤ⡢ᤵޤϵʽΰտޤǤϤʤǤ礦Translation phase 4 Ǥ keyword ¸ߤʤΤǡcast ǧΤ褦ʤΤǤsizeof ⤳ǤƱǤ sizeof ˸ڤcast 夲ƤΤ̯ʤȤǤʸּפȸޤ</p>
<br>
<h2><a name="2.8" href="#toc.2.8">2.8. C99 Υץץ</a></h2>
<p>C99 Ǥϡץץ˴ؤƤϼλͤɲäƤޤ</p>
<ol>
<li>̻ҡʸƥ롢ʸpp-number \uxxxx, \Uxxxxxxxx η 16 sequence UCN (universal-character-name) ȸUnicode ʸ̣ͤ롣 basic source character set ˴ޤޤʤ extended character ꤹΤǤʤФʤʤ# 黻Ҥˤä UCN ʸ줿 \ Ťͤ뤫ɤ implementation-defined Ȥ롣<br>
<br>
<li>̻ implementation-defined ʸȤȤǤ롣äơΤ褦 multi-byte-characters ̻˻Ȥ imple-mentation ǽȤʤä<br>
<br>
<li>// ޤǤȤȤư<br>
<br>
<li>Pp-number e+, E+, e-, E- Ʊͤ p+, P+, p-, P- Ȥ sequence ǧ롣 0x1.FFFFFEp+128 ȤդˡưΥӥåȥѥʤɽ뤿ΤΤǤ롣<br>
<br>
<li>#if ηϤνϤκȤ롣long long / unsigned long long ɬܤǤΤǡ#if η long long ޤϤʾΥȤʤ롣<br>
<br>
<li>ѸĤΥޥȤ롣<br>
<br>
<li>ޥƤӽФΥͭʰȤ롣<br>
<br>
<li>ޥ <tt>__STDC_HOSTED__</tt> ɲä롣 hosted implementation Ǥ 1 ˡǤʤ 0 롣ޥ <tt>__STDC_VERSION__</tt> 199901L 롣<br>
<br>
<li>ޥ <tt>__STDC_ISO_10646__</tt>, <tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX__</tt> ץȤɲä롣<br>
<br>
<li>_Pragma operator ߤ롣<br>
<br>
<li>#pragma STDC ǻϤޤǥ쥯ƥ̾ʤȽѤͽư黻ɽĤ #pragma STDC ǥ쥯ƥ֤ɲä롣#pragma STDC ǻϤޤǥ쥯ƥ֤ϥޥŸоݤȤʤǤʤ #pragma ԤϥޥŸоݤȤ뤫ɤ implementation-defined Ǥ롣<br>
<br>
<li>Wide-character-string-literal character-string-literal ȤܤƤΤ C90 Ǥ undefined Ǥä Wide-character-string-literal ȤϢ뤹롣<br>
<br>
<li>#line ΰȤƻȤֹϰϤ [1,2147483647] ˳礹롣<br>
<br>
<li>Translation limits Τ褦˰夲롣<br>
<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>ΥåΥͥ </th><td>63 ٥</td></tr>
<tr><th>ޥΥѥο </th><td>127 </td></tr>
<tr><th>Ǥޥο </th><td>4095 </td></tr>
</table>
</blockquote>
<li>Header name ϣʸ + . + ʸޤǤݾڤƤʸ + . + ʸޤǤѹ롣<br>
</ol>
<p>ѰޥȤΤϡΤ褦ʤΤǤ</p>
<pre style="color:navy">
#define debug(...) fprintf(stderr, __VA_ARGS__)
</pre>
<p>Ȥޥȡ
</p>
<pre style="color:navy">
debug( "X = %d\n", x);
</pre>
<p>ȤޥƤӽФϼΤ褦Ÿޤ
</p>
<pre style="color:navy">
fprintf(stderr, "X = %d\n", x);
</pre>
<p>ʤѥꥹ ... İʾΥѥִ̣ꥹ __VA_ARGS__ бޤơޥƤӽФˤ ... бʣäƤ⡢ , ޤϢ뤷ΤĤΰΤ褦˰ޤ</p>
<p>C90 undefined behavior ȤƤΤˤϡʬ̣ΤβǽʤΤޤޥƤӽФΥʤɤǡ 0 Ĥ pp-token Ȳ᤹뤳ȤͭѤʾ礬ޤC99 Ǥϡ줬ͭʰȤޤ</p>
<p>_Pragma( "foo bar") Ƚ #pragma foo bar Ѵ _Pragma Ȥĥ黻Ҥ C99 Ǽ夲Ƥޤ#pragma Ԥΰ C90 ǤϥޥŸ줺ޥŸη̤Ȥ #pragma ǥ쥯ƥιԤϥǥ쥯ƥ֤Ȥư줺ޥִꥹ #pragma ȤǤʤΤФơ_Pragma ϥޥִꥹ˽ȤǤη̤Ȥ #pragma ϥǥ쥯ƥ֤ȤưȤĥܤȤǡˤ #pragma portability 夵褦ȤΤǤ</p>
<p>§ŪʳĥʤƤ⡢#pragma ԤΰϥޥŸоݤȤȤѹäۤǤꡢ portability ΰտޤϤʤãǤϤǤξϥޥ #pragma ȤǤʤȤĤꡢޥŸƤϤʤ #pragma ΰϥ桼֤̾ڤΥ __ ǻϤޤ̾ѹʤФʤʤȤ꤬ФƤޤ_Pragma() operator §ŪǤϤΤΡݤȤۤɤǤʤʻͤȻפޤ</p>
<p>Unicode Ƴˤ꤬ꤹޤޤϤ multi-byte character Unicode ȤѴΤ˵ɽѰդʤФʤ餺礭 overhead ޤ16 ӥåȰʲΥƥǤϻ¾塢ԲǽǤUnicode äƤʤƥ¸ߤޤޤUnicode multi-byte character ȤǤϰа mapping Ǥʤ礬¿ޤץιݲȤ̾ܤ Unicode øɸϰ̤֤ΤϡȻפޤ</p>
<p>C99 Ǥ 1997/11 draft C++ Standard ٤ UCN ΰ˸षץץåôŪʤޤΤᡢ<b>mcpp</b> Ǥμǽˤʤޤ*1</p>
<p>ѥΤôϰ礭ΤޤޤΤʤɽǤΤǡtrigraph ƱͤˡޤȤʤǽ뤳Ȥͽۤޤ*2</p>
<p>:</p>
<p>*1 1997/11 draft Ǥ C++ Standard ȤۤƱͤˡtranslation phase 1 basic source character set ˴ޤޤʤ extended character Ϥ٤ UCN Ѵphase 5 execution character set ʸ˺Ѵ뤳ȤˤʤäƤ</p>
<p>⤷ϡץץȸˤѴġƤӽФȤȤˤʤȻפ롣Ѵ OS ˰¸ΤʤΤǡ̤ΥġˤۤŪǤ롣</p>
<p>*2 C99 Rationale 5.2.1 Character sets ˤȡλͤϽ°Υġ multi-byte character ΥȤδ֤ߤѴƻȤȤꤷΤȤƤ롣Multi-byte character ʸƥʬڤΥ̥եˤޤȤƤƽȤȤǤɤޤǼѤˤʤΤǤ</p>
<br>
<h2><a name="2.9" href="#toc.2.9">2.9. ʥץץ</a></h2>
<p>ʾ˽Ҥ٤Ƥ Standard C ץץȻ䤬ͤΤϡΤޤ Standard C ؤ˾Ǥ⤢ޤޤȤȡΤ褦ʤȤˤʤޤ</p>
<ol>
<li><stdio.h> η header-name obsolescent featureѻͽ굡ǽˤȤ롣Ǥ header-name ʸƥΤΤˤ롣<br>
<li>Token-based ʥץץθ§Ӥ# 黻Ҥϰ token separator ̵ͭ˺ʤ褦ˡtoken separator ʤƤ pp-token ֤ˤϤ٤ single space ʸ뤳Ȥˤ롣<br>
<li>Ʊͤˡޥκ˺ݤƤϡִꥹ token separator ̵ͭΰ㤤ˤʤȤˤ롣<br>
<li>ޥκ˺ݤƥѥ̾ΰ㤤å뤳ȤϡϤΥСإåɤ䤹ǤۤȤͭʤΤǡΰ㤤ˤʤȤˤ롣<br>
<li>ʸɾϼ¹ԻĶؤ䤤碌ɬפȤΤǤꡢ#if ǤͭۤȤɤʤΤǡ #if оݤ롣<br>
<li>ؿͥޥδؿͤΰŰ줷ޥƤӽФˤäƤִꥹˤäƤ⸶§ȤƱ pp-token sequence 褦ˡޥ rescanning ִꥹȤоݤȤޥƤӽФ³ pp-token sequence оݤȤʤȤˤ롣<br>
<li>Digraph token ǤϤʤtrigraph Ʊͤ character spelling Ȥtranslation phase 1 Ѵ뤳Ȥˤ롣<br>
<li>Translation phase 3 εΤ"partial preprocessing token or" Ϻ롣<br>
<li>#if ˴ؤ "it shall not contain a cast; " Ȥܤ con-straint C99 footnote 140 ˵ۼ롣<br>
<li>Trigraphs ϥ衼åΦǤϼºݤ˻ȤƤΤǤ ⤷ʤȤƤΤǤлĤʤǤʤѻߤ<br>
</ol>
<p>Ϥ⡢Ե§ʵ§ץץñˤ褦ȤΤǤˤäƥץץ狼䤹ʤ뤳Ȥϴְ㤤ʤǤ礦դ˺뤳ȤϤۤȤɤʤϤǤ</p>
<p><b>mcpp</b> ǤϡStandard ⡼ɤǤ Standard C εʤȤޤ Standard C Υץץ˼ƤĤǤpost-Standard Ȥ⡼ɤǤϰʾѹäץץ¸ƤޤʤΤۤUCN, identifier multi-byte characters λѤƤˡ</p>
<p>C90 Amendment 1, Corrigendum 1 ǤϡץץˤĤƤԵ§ʵ§Ե§䤹ưƤޤޤ</p>
<p>C99 Ǥ⡢ǽɲä줿Фǡ嵭Τ褦κ𤬤ɤʤäΤϻǰǤ*1</p>
<p>C99 ɲä줿ͤˤĤƤϡᤷȻפޤ</p>
<ol>
<li>Unicode (UCN) ƳϥץˤȤɤ롣
</ol>
<p>ʤ嵭Τۤˡ#if ŬѤα黻§ˤĤƤ⤦꤬ޤ</p>
<ol>
<li>α黻̤ϤηɽǤϰϤˤʤФʤʤȤ constraint 뤬Ϥ٤ƤŬѤΤʤΤɤǤ롣㳰ϵܤƤʤȤߤȡʸξǤϤ٤ƤŬѤȲ᤹뤷ʤStandard C ΰտޤϡɬפʤȤǤϡפȤȤǤΤˤ٤Ǥ롣ޤ¾ǡʤϷ褷 overflow ʤפȤ⤢ꡢʤ黻ϰϤĶ˿ǥåФ٤ɤϡȤˤޤǤϥѥɾǤΤǤΤǡǥåФΤŬȻפˡ
</ol>
<p>ϥץץͭǤϤʤΤǡʾޤ</p>
<p>ޤC90 Ǥ /, % 黻Ҥˤγ껻ˤĤơʬ졦ʬҤޤξη̤ implementation-defined ȤҤɤ꤬ޤC99 Ǥ div(), ldiv() ƱͤεȤʤޤ</p>
<p>:</p>
<p>*1 C99 ؤγƼ defect report 䤽Ф response corrigendum draft ϼ ftp site ˤ롣 ISO/SC22/WG14 official ftp server ȤʤäƤꡢʤȤ⺣ΤȤ anonymous ftp ǤSC ȤΤ steering committee άǡWG working group Ǥ롣SC22 ȤΤϥץεʤĤȤǡWG14 C εʤôƤˡ</p>
<blockquote>
<p><a href="http://www.open-std.org/jtc1/sc22/wg14/">http://www.open-std.org/jtc1/sc22/wg14/</a></p>
</blockquote>
<br>
<h1><a name="3" href="#toc.3">3. Validation Suite </a></h1>
<h2><a name="3.1" href="#toc.3.1">3.1. Validation Suite for Conformance of Preprocessing</a></h2>
<p>test-t, test-c, test-l, tool, cpp-test Ȥǥ쥯ȥäƤΡӤ cpp-test.html ΤΤκä "Validation Suite for Standard C Conformance of Preprocessing" ʡ֥ץץɸŬѥȥ켰סˤǤǤդνϤΥץץ Standard C (ISO C) ٤ܺ٤˥ƥȤΤǤStandard C/C++ ǵꤵƤ뤹٤ƤΥץץͤ夷ƤĤǤˡ곰λ˴ؤ뤪ޤ⤿ޤ</p>
<p>Standard C ȤƤϡϤư뤳ȤϤǤǤʤɥȤɬפʻबΤ˵ܤƤ뤳ȤɬפǤˤĤƤ <a href="#3.5">3.5</a> ޤ</p>
<h3>3.1.1. test-t ǥ쥯ȥΥƥѥץ</h3>
<p>test-t Ȥǥ쥯ȥˤ 183 ܤΥץƥȤäƤޤΤ 30 ܤϥإåե롢145 ܤϺڤΥץƥȤǡ8 ܤϺڤΥץƥȤޤȤեǤإåեʳϰ *.cc Ȥ̾ǤȤϤ٤ *.t Ȥ̾ĤƤޤϥѥեȤϴطʤץץեƥȤΤǤäơɬäץηˤϤʤäƤޤץץƥѤΥץƥȤȸ٤ΤǤ</p>
<p>Standard C νϤϥץץȥѥȤ̤ƽ뤳ȤǤΤǡϤˤäƤϥץץڤΥƥƥȤ뤳ȤǤޤ *.t Υץ뤽ΤΤ Standard C ˽äƤʤȤޤץץڤΥƥƥȤǤϤ¿ꡢǤʤڤΥƥƥȤۤͤΤˤʤޤ *.t ΥץϤΤΤΤǤ</p>
<p>C++ ΥץϡϤˤäƤ *.c, *.t Ȥ̾Ǥ C++ ΥȤưʤΤ⤢Τǡ*.cc Ȥ̾ΤΤѰդƤޤƤб *.t ƱǤ</p>
<p>ץƥȤΥեˤ̾ n_ ǻϤޤΡnormal ΰաˡi_ ǻϤޤΡimplementation-dependent ΰաˡm_ ǻϤޤΡmultibyte character ΰաˡe_ ǻϤޤΡerroneous ΰաˤޤ</p>
<p>n_ ǻϤޤΤϡץץ˴ؤƤϴְ㤤 undefined ưΤ implementation-defined ʬޤޤʤץǤStandard C Υץץåϡ顼ˤǤʤФʤޤ</p>
<p>i_ ǻϤޤΤϡʸåȤ˴ؤ implementation-defined ʻͤ˰¸륵ץǡASCII ʸåȤȤƤޤASCII ʸåȤ Standard C νϤΥץץåϡ顼ˤǤʤФʤޤ</p>
<p>e_ ǻϤޤΤϡ餫 violation of syntax rule or constraintʤ顼ޤॵץǤStandard C ΥץץåϡƨȤʤǤǤʤФʤޤ</p>
<p>n_, i_, m_, e_ θ˿³Τ C90 Υץץ, C90 C99 ζ̤ΥץץͤƥȤ륵ץǤإåեΤpragmas.h, ifdef15.h, ifdef31.h, ifdef63.h, long4095.h nest9.h nest15.h ޤǤ C99 ΥץץͤƥȤ륵ץǡ¾Υإåե C90 C99 ζ̤ΤΤǤ</p>
<p>n_, i_, e_, u_ std, post ʳΥե٥åȤ³Τ C99 C++ ΥץǤn_dslcom.t, n_ucn1.t, e_ucn.t, u_concat.t C99 C++98 ζ̤Ρn_bool.t, n_cnvucn.t, n_cplus.t, e_operat.t, u_cplus.t C++ Ρ¾ C99 ΥץץͤƥȤ륵ץǤ</p>
<p>?_std.t Ȥ̾Υե C90 κڤեޤȤΤǤ?_std99.t Ϥ C99 ǤǤ?_post.t, ?_post99.t Ȥ̾Υեϥޥǡ<b>mcpp</b> post-Standard ⡼ɤΥƥȤΤΤΤǤ</p>
<p>u_*.t Ȥ̾Υեϥޥǡundefined behavior ΥƥȤڤΥեǤundefs.t ϤܤˤޤȤΤǤunbal?.h ϤǻȤإåեǤunspcs.t unspecified behavior ΥƥȤΤǡwarns.t ϰʾΤɤˤƤϤޤʤϤ˥ФΤ˾ޤƥȤܤեǤunspcs.t, warns.t ⥪ޥǤm_ ǻϤޤΤϡmulti-byte character, wide character Ȥƿ encoding ĤΤѰդƤޤǤС¿ encoding 뤳Ȥ˾ޤޤm_* ϵʽΥƥȤǤϤʤu_* Ʊͤʼɾܤ°Ƥޤ</p>
<p>misc.t, recurs.t, trad.t ϥޥΥޥǤΣĤϥץץåɾоݤȤϤޤmisc.t ϵʽ䤽¾νҤ˺ܤäƤΡɽˤäƷ̤ۤʤƥȡtranslation phase 5, 6 ˴ؤƥȡĥǽΥƥȡΤǤrecurs.t üʺƵŪޥΥץǡtrad.t ϸŤ "Reiser model cpp" ΤΥץǤ</p>
<h3>3.1.2. test-c ǥ쥯ȥΥƥѥץ</h3>
<p>test-c Ȥǥ쥯ȥˤ 133 ܤΥե뤬äƤꡢΤ 26 ܤϥإåե24 ܤ test-t ΤΤƱˡ102 ܤϺڤΥץ륽ǡ3 ܤϺڤΥץ륽ޤȤե롢¾ 2 ܤϼưƥȤ˻ȤեǤΤ 32 ܤϥޥΥץ륽ǤإåեʳΥϤ٤ *.c Ȥ̾ĤƤޤϣäΥץηˤʤäƤޤ</p>
<p>Ϥꡢn_, i_, m_, e_ ǻϤޤ̾ĤƤޤn_ ǻϤޤΤϡStandard C Ǹ strictly conforming program ʴְ㤤ϰ¸ʬʤץˤǤϤϤ顼ˤѥ뤷¹ԤǤʤФʤޤ¹ԤǤϤ줾</p>
<pre style="color:navy">
started
success
</pre>
<p>ȤåФޤn_std.c ˸¤äƤϡΥåϽФ</p>
<pre style="color:navy">
<End of "n_std.c">
</pre>
<p>ȤäλΥåФޤǤʤϲ餫μԤΥåФޤi_ ǻϤޤΤ ASCII ȤʸΥץǡASCII ʸåȤĽϤϡ n_ ǻϤޤΤƱͤѥ뤷¹ԤǤʤФʤޤe_ ǻϤޤΤˤĤƤϡϤϥѥʥץץ˻ǤǤʤФʤޤ</p>
<p>ѥ뤢뤤ϼ¹ԤˤƥȤϺǤΥƥˡǤˡǤϽϤ˴ְ㤤뤳ȤϤ狼äƤ⡢ɤ˴ְ㤤ΤΤˤʤʤ礬ޤ *.c եץץåˤ̤ơη̤ܤǸƥƥȤ뤳ȤǤΤǡϤ¤ꤽۤΤɾǤޤ*.t եΤۤüŪǤˡ<br>
?_std.c Ȥ̾ΥեϺڤեޤȤΤǤ<br>
u_*.c Ȥ̾Υեϥޥǡundefined behavior ΥƥȤڤΥեǤundefs.c ϤܤˤޤȤΤǤunspcs.c unspecified behavior ΥƥȤΤǡwarns.c ϰʾΤɤˤƤϤޤʤϤ˥ФΤ˾ޤƥȤܤեǤunspcs.c, warns.c ⥪ޥǤm_ ǻϤޤ륵ץˤϿ multi-byte character encoding бΤޤ<br>
test-c ǥ쥯ȥˤ C99 ΥƥȤϴޤޤƤޤޤC99 ˽ʬбƤ륳ѥΤʤǤC++ ΥƥȤ test-t ǥ쥯ȥˤޤ</p>
<h3>3.1.3. test-l ǥ쥯ȥΥƥѥץ</h3>
<p>test-l ǥ쥯ȥäƤΤϡ translation limits ΥƥȤ뤿ΥץǤ144 ܤΤ٤ƤޥǤ*.c, *.t, *.h ե뤬äƤޤ</p>
<p>*.h ե test-t, test-c, test-l γƥǥ쥯ȥ˽ʣƴޤޤƤΤʤꤢޤʣإåեĤΥǥ쥯ȥˤޤȤȡ㤨</p>
<pre style="color:navy">
#include "../test-t/nest1.h"
</pre>
<p>Ȥä롼ɤΤɬפˤʤޤѥꥹȤηեõˡʴǥ쥯ȥɤ֤ˤ٤ implementation-defined ǤꡢߴݾڤƤʤΤǡ뤿˽ʣȤ鷺ƥǥ쥯ȥ˥إåե֤Ƥޤʤ⤽֥ǥ쥯ȥפȤǰ C Standard ϽƤˡ</p>
<h3>3.1.4. tool ǥ쥯ȥΥġ</h3>
<p>tool Ȥǥ쥯ȥˤϡưƥԤΤɬפʥġ뤬äƤޤ</p>
<h3>3.1.5. cpp-test ǥ쥯ȥ GCC/testsuite ѥץ</h3>
<p>cpp-test Ȥǥ쥯ȥˤΤϡGCC / testsuite ǻȤΥץǤtest-t, test-l ǥ쥯ȥΤΤ testsuite Ѥ˽ľǤ֤Ƥޤ</p>
<br>
<h2><a name="3.2" href="#toc.3.2">3.2. ƥˡ</a></h2>
<p>Validation Suite ǥƥȤˤϡϤ Standard C ˶դ뤿Υץϡ٤ƻꤷޤʶ <a href="#6.1">6.1</a> ȡˡ</p>
<h3><a name="3.2.1" href="#toc.3.2.1">3.2.1. ưƥ</a></h3>
<p>test-t, test-c γƥǥ쥯ȥȤ⡢礭ޤȤեȤʤڤΥեȡΥץ뤬ޤץץå Standard C ٤⤱СʤȤ n_* ˤĤƤϤޤȤեǥƥȤǤޤۤɹ⤯ʤϤΥեǤ椫ץץå˴٤äơʹߤιܤΥƥȤǤʤʤäƤޤȤΤǡڤΥեѰդƤޤޤڤˤȥեο䤿ƥƥȤμ֤ΤǡøʤȤŶƤޤϤˤäƤϡκڤΥץǤǸޤǽǤʤȤޤξϤΥץʬ䤷ƥƥȤƤ</p>
<p>ޤ#error directive ϽϤˤäƤϽλΤǡ#error ΥƥȤ륵ץϤޤȤեƤޤ#include Υ顼ǽλ뤳Ȥ¿ΤǡޤȤեˤƤޤ</p>
<h4>3.2.1.1. ܻƥ</h4>
<p>*.t ΥץϡץץåΩץˤʤäƤ硢ޤϥѥ˥ץץΥƥȤϤ륪ץ˻ȤޤΥեץץ̤ľܡܤǸơ˽Ƥ̤Ȱפ뤫ɤΤޤץץη̤ľܸ뤳ȤǤΤǡϤ¤ꤳǥƥȤۤΤȽǤǤޤ</p>
<p>*.c Υץ¿ "defs.h" Ȥإåե include Ƥޤ "defs.h" ˤϣ assert ޥƤΤǡΤΤɤ줫ĤϤǤ #if 0 0 1 ˤޤܤΤΤ <assert.h> include ǤܤΤΤ assertion ԤƤ abort ʤ assert ޥǤϤ assert ޥǤϤޤΥƥȤǤϤषΤۤǤ礦</p>
<p>Multi-byte character νϼ¹ԻĶˤäƽϤưͤѤ礬Τǡm_* ΥƥȤˤդɬפǤ<a href="#4.1">4.1</a> ȡˡ</p>
<h4>3.2.1.2. ƥȤ륿å</h4>
<p>ƥȤˤ꤬ޤ
ƥȤ褦ȤȡϤ¾η٤ˤҤääƤޤȤ뤫Ǥ㤨 <limits.h> ְäƤ硢 include #if ΥƥȤ褦Ȥȡ<limits.h> ΥƥȤƤΤ #if ΥƥȤƤΤ狼ʤʤäƤޤޤ*.c եѥ뤷¹ԤƥȤǤϡ*.t եץץƥȤäȤäˤʤޤǽŪʷְ̤äƤСϤ˲餫η٤뤳ȤϤϤäꤷޤƥȤ褦Ȥ˷٤Τɤϡɬ餫ǤϤޤ</p>
<p> Validation Suite ǤϥåȤȤŪʤ褦ˤפĤǤValidation Suite Τ portable ǤʤФʤʤȤꡢޤƥȤ뤿ˤ¾θͤƤ뤳ȤȤޤäơΡפȤƻȤץץλϡλåȤȤƥȹܰʳΤȤǤۤΤ˥ƥȤ뤳Ȥˤʤޤ˽Ҥ٤פˤĤƤ⡢ۤ뤳ȤαդƤޤϤ륵ץν˼Ԥ硢ˤΥץ뤬åȤȤƥȹܤǼԤΤȤ¾װǼԤΤϡ¾ΥƥȤȤʻƸʤȽǤǤʤȤޤ</p>
<h4>3.2.1.3. </h4>
<p>ƥƥȹܤˤĤƤϡ줾ƤޤδƤޤStandard C ˤϥ֥åȤȤΤϤʤΤǡܤ˹פƤʤи̩ˤ Standard C Ȥϸޤ¤ˤϤϤϤʤʤʤΤǡϤɾˤ Standard C ٤ȤʪȤ虜ޤơܤν٤ˤ礭ʺΤǡʹܤο櫓ˤϤ椫٤˱ޤ</p>
<p>ˤϵҴŪʴϤޤ Validation Suite ϻ䤬˷Τǡ礷ϤޤǤ⡢Ϥεʹ٤ҴŪɾ뤿ܰ¤ˤϤʤǤ礦</p>
<p>n_*, i_*, e_*, d_* ϵʽ٤˴ؤƥȤǡϸ§Ȥ 2 ñ̤ޤʳΥƥȤʼɾǤϡq_* 2 ñ̤ǡ¾ 1 ñ̤ޤǥåФ٤ȤǤϡФˤϽФʤΤǤϡϤʤȤˤޤޤäְ㤤ǤϤʤΤΤʤԥȤΤ줿ǥåξϡȾʬ뤳ȤޤޤץǿǥåФȤϽϤμͳǤְäǥåФϸоݤȤޤ</p>
<h3><a name="3.2.2" href="#toc.3.2.2">3.2.2. cpp_test ˤ뼫ưƥ</a></h3>
<p>tool ǥ쥯ȥˤ cpp_test.c Ȥץѥ뤷 test-c ǥ쥯ȥưȡC90 n_*.c, i_*.c ΥƥȤưŪ˹ԤȤǤޤϡߤĤǡܺ٤Τ뤳ȤϤǤޤe_*.? ΥƥȤޤޤƤޤץץå C90 ٤ˤĤƴñ˸Ĥ뤿ΤΤǤC99 ˤĤƤΥƥȤޤޤƤޤߤϤޤѥ¿ C99 ˤϹ⡹ȾʬбƤʤǤ*1, *2, *3</p>
<p>cpp_test λȤ Visual C++ 2005 ˤȤȡ̤Ǥ</p>
<pre style="color:navy">
cpp_test VC2005 "cl -Za -TC -Fe%s %s.c" "del %s.exe" < n_i_.lst
</pre>
<p>ʲϤ줾 " " ǰϤɬפޤshell ", " ϤƤޤϡǸΰޤǤΤ ' ' Ǥ˰Ϥкɬסˡ%s n_*, i_* ץץ̾ .c Τ֤ޤ</p>
<p> Ϥ̾ꤷޤϣХȰǡ'.' ޤޤʤΤǤʤФʤޤ̾ .out, .err, .sum Ĥ̾Υե뤬ޤ<br>
ѥ뤹뤿Υޥɤޤ<br>
軰ʲ ѤΤե륳ޥɤޤʣäƤޤޤ</p>
<p>n_i_.lst test-c ǥ쥯ȥˤޤn_*.c, i_*.c γƥե̾ .c ΤΥꥹȤƤޤ<br>
ϤˤäƤϡɤ줫Υν˽ϤΤ⤢ޤξϡn_i_.lst ΤΥ̾㤨 none Ȥä¸ߤʤե̾˽ؤơƼ¹Ԥޤ</p>
<p> cpp_test ¹Ԥȡn_*.c, i_*.c 缡ѥ뤵졢¹ԤƤ椭ޤn_*.err, i_*.err Ȥեˡץץ stderr ؤνϤϿޤơVC2005.sum ˤκ̤ģ˽ޤޤȸäƤ⡢Σκޤ</p>
<blockquote>
*: <br>
o: ѥϤǤ¹Է̤Թ<br>
-: ѥǤʤä
</blockquote>
<p>VC2005.out cpp_test θƤӽФޥɥ饤Ͽ졢Ϥ stdout ˽ФåФ⤽˵ϿޤVC2005.err ˤϡϤ stderr ˽ФåС줬Ͽޤ뤳Ȥˤäơ⤦Τ뤳ȤǤǤ礦</p>
<p>ˡΤ褦ˤޤ</p>
<pre style="color:navy">
paste -d'\0' side_cpp *.sum > cpp_test.sum
</pre>
<p>ȡƽϤΥƥȷ̤Ǥ *.sum ե뤬Ϣ뤵ƣĤɽ졢cpp_test.sum ˽ޤޤside_cpp ϥƥȹܤΥȥɽ¦ʬǡtest-c ǥ쥯ȥˤޤ</p>
<p>䤬ƺä cpp_test.sum doc ǥȥ֤Ƥޤʤ<a href=#6>6</a> ˤϼưˤܺ٥ƥȤη̤ƤޤǤ cpp_test.sum ¿ΥץץåƥȤƤޤΥץץåˤϤɤνϤΥѥɥ饤ФˤбƤʤΤꡢץץåˤĤƤ cpp_test ˤ뼫ưƥȤϤǤޤ</p>
<p>:</p>
<p>*1 cpp_test.c "Plum-Hall Validation Sampler" runtest.c summtest.c ȤץߤˤƽΤǤ롣</p>
<p>*2 cpp_test.c Borland C / bcc32 ǥѥ뤹ȴ̤ưʤcpp_test stdout, stderr 쥯Ȥ system() ƤӽФƤ뤬bcc32 ǤɸϤ¹Υץ˷Ѿʤ褦Ǥ롣Visual C, LCC-Win32 ǥѥ뤷Τʤư</p>
<p>*3 m_36_*.c 0x5c ('\\') ͤΥХȤ encoding ΥƥȤǤ뤬 encoding ̾ϻȤʤƥ⤢ΤǡǤϽ롣</p>
<h3><a name="3.2.3" href="#toc.3.2.3">3.2.3. GCC / testsuite ˤ뼫ưƥ</a></h3>
<h4><a name="3.2.3.1" href="#toc.3.2.3.1">3.2.3.1. TestSuite Ȥ</a></h4>
<p>GCC ˤ testsuite ȤΤޤGCC Υѥ뤷ǡmake check Ȥȡ testsuite Υץ뤬ȥå졢̤𤵤ޤ<br>
θڥåȤ V.1.3 ϡGCC testsuite ȤƤȤ˽ľ edition ɲäޤ testsuite Ƥȡmake check ǼưŪ˥åޤ<a href="#3.2.2">3.2.2</a> cpp_test ȤġǤ n_*, i_* Ȥ̾Υץ뤷ƥȤǤޤtestsuite Ǥ e_*, w_*, u_* οǥåפ륵ץ⼫ưŪ˥ƥȤǤޤǤ GCC 2.9x ʹߤ cpp0 (cc1, cc1plus) <b>mcpp</b> ΥƥȤ뤳ȤǤޤ<br>
ǤϡGCC / testsuite ǤθڥåȤλȤޤ</p>
<p>ڥåȤ cpp-test ǥ쥯ȥ test-t, test-l ǥ쥯ȥ GCC / testsuite бƽľΤǡcpp-test test-t, test-l γƥǥ쥯ȥ꤬ޤ<br>
m_*, u_1_7_* multi-byte character γƼ encoding бΤǤGCC 3.3 ޤǤΥСǤϴĶѿ encoding ˱Ѥ뤳ȤɬפǡѥδĶѤ뤳Ȥ testsuite ǤϤǤʤΤǡcpp-test ˤϴޤƤޤ*1<br>
GCC / cpp λͤѹ testsuite λͤѹޤǤˤꡢ줫⤢ͽۤޤˤäƤϸڥåȤΰɬפˤʤޤȤ˿ǥåɲä줿ѹ줿ꤷϡtestcase ˤɬפޤΤȤ GCC ΥСҤɤŤʤ¤ꡢʽɬפʤȻפޤcpp-test testcases GCC 2.95.3, 3.2, 3.3.2, 3.4.3, 4.0.2, 4.1.1 γ cpp (cpp0, cc1, cc1plus) <b>mcpp</b> ưΤƤޤ<br>
testsuite Ǥϼ¹ԻץϤˤäѤ뤳ȤϤǤޤʣεʤ¾ʻ¸Ƥ븽ߤξǤ std= ȤץǵʤΥСɬפޤΥץ GCC θŤСˤ¸ߤޤäơ testsuite ŬϰϤ GCC 2.9x ʹߤ <b>mcpp</b> V.2.3 ʹߤȤȤˤʤޤ</p>
<p>Testsuite ϥץץ˽줿Τ褦ʷΥȤᤷƼ¹ԤޤϥȤʤΤǡ¾νϤΥƥȤˤϱƶޤ</p>
<pre style="color:navy">
/* { dg-do preprocess } */
/* { dg-error "out of range" } */
</pre>
<p>dg-error Ȥ dg-warning ȤȤν줿ץǤϡǥåƥȤޤʣνϤΥƥȤ뤳Ȥ⡢줾νϤοǥå '|' (OR) Ϥ¤٤ƽȤǡǽˤʤޤ<br>
¹ԤΤ DejaGnu Ȥġǡľܤˤ runtest Ȥ shell-script ǤDejaGnu *.exp Ȥ̾ΤĤΥե˽Ƥޤ*.exp expect ȤġΤ script Ǥơ expect Tcl Ȥޥɸǽ줿ץʤΤǤ<br>
äơtestsuite Ȥˤϡ testsuite ˱ơ¿ΥġŬڤʥСΤΤäƤʤФʤޤϻθڥåȤȤǤ⡢ȤʤƱǤ</p>
<p>:</p>
<p>*1 ºݤˤϴĶѿꤷƤ GCC ưʤ</p>
<h4><a name="3.2.3.2" href="#toc.3.2.3.2">3.2.3.2. TestSuite ؤΥȡȥƥ</a></h4>
<p>GCC / testsuite ǻθڥåȤȤˤϡΤ褦ˤޤ<br>
ޤ cpp-test ǥ쥯ȥ GCC testsuite Ŭʥǥ쥯ȥ˥ԡޤ<br>
cpp-test ǥ쥯ȥϡtest-t, test-l γƥǥ쥯ȥɬפʥեľcpp-test.exp ȤƥѤեäΤǤ*.t Ȥ̾Υե suffix .c ѤƤޤC++ Υե *.C Ȥ̾ˤƤޤ<br>
ȾΥץϥץץåƥȤΤǤĤ DejaGnu, Tcl Ǥ줬ǤʤΤǡcompile & run 뤿ΥץˤʤäƤޤ*_run.c Ȥ̾ΤΡˡΣĤΥץˤ { dg-options "-ansi -no-integrated-cpp" } ȤԤޤ-no-integrated-cpp ȤΤ GCC 3, 4 ΤΥץǤGCC 2 ˤϤΥץϤʤΤǡGCC 2 ǥƥȤϤΥץϤʤФʤޤΤˡΣĤ testcase ˤĤƤ *_run.c.gcc2, *_run.c.gcc3 ȤΥեѰդƤޤŬʤۤ *_run.c ˥ƻȤäƤ</p>
<p>ʲǤϡΤȤ Linux Ǥ GCC 3.4.3 ˤȤäޤGCC 3.4.3 Υ /usr/local/gcc-3.4.3-src ֤ƤȤޤޤGCC Υѥ /usr/local/gcc-3.4.3-objs ǹԤȤޤ</p>
<pre style="color:navy">
cp -r cpp-test /usr/local/gcc-3.4.3-src/gcc/testsuite/gcc.dg
</pre>
<p>ǡgcc.dg ǥ쥯ȥ cpp-test ʲΥե뤬ԡޤ<br>
Ƥȡ/usr/local/gcc-3.4.3-objs </p>
<pre style="color:navy">
make bootstrap
</pre>
<p>Ȥ GCC Υѥ뤷ǡ</p>
<pre style="color:navy">
make -k check
</pre>
<p>Ȥȡcpp-test testcases ޤ٤Ƥ testsuite ƥȤޤ</p>
<p>ޤcpp-test ȤäƥƥȤˤϡ/usr/local/gcc-3.4.3-objs/gcc ǥ쥯ȥǼΤ褦ˤޤ</p>
<pre style="color:navy">
make check-gcc RUNTESTFLAGS=cpp-test.exp
</pre>
<p>Testsuite log ./testsuite ǥ쥯ȥ gcc.log, gcc.sum ˵Ͽޤ<br>
make check ϡĶˤäƤ GCC Υ INSTALL/test.html 褦ˡDEJAGNULIBS, TCL_LIBRARY ȤĶѿ꤬ɬפǤ<br>
ޤGCC 3 ǤϴĶѿ LANG, LC_ALL C ȤƱѸĶˤʤФʤޤ<br>
GCC Υѥ make check ǻȤΤϡǤ˥ȡ뤵Ƥ gcc, cc1 ǤϤʤgcc ǥ쥯ȥ줿 xgcc, cc1, cc1plus, cpp0 Ǥ뤳ȤդƤ<br>
cpp-test ˤƥȤϼΤ褦ˤƤǤޤ</p>
<pre style="color:navy">
runtest --tool gcc --srcdir /usr/local/gcc-3.4.3-src/gcc/testsuite cpp-test.exp
</pre>
<p>ξϡ¹Ԥǥ쥯ȥǤդǤϥȥǥ쥯ȥ˽ϤޤƥȤΤϡǤ˥ȡ뤵Ƥ gcc, cc1, cpp0 Ǥcpp-test testsuite ɬפʤΤϡGCC ѤγƼե (config.*, *.exp) ˤ뤫Ǥ</p>
<p> runtest --tool gcc ǻꤹ 'gcc' Ȥ̾ϤΤȤǤʤФʤޤ⤷ºݤ˻Ȥѥ餬Ȥ cc, gcc-3.4.3 gcc ʳ̾ξϡܥåä gcc Ȥ̾ǸƤӽФ褦ˤƤޤ<br>
ʤcpp-test ˤϥץץå˥ФΤ˾ޤȹͤ륱ˤĤƤΥ˥ testcases ¿ޤޤƤޤGCC ΥץץåϤȾʬʲ PASS ޤ̤ʤȤäơưְäƤȤץץåѥ뤵ƤʤȤȤȤǤϤޤְäƤ뤫ǤϤʤץץåΡʼפʤΤǤ</p>
<h4><a name="3.2.3.3" href="#toc.3.2.3.3">3.2.3.3. <b>mcpp</b> μưƥ</a></h4>
<p> cpp-test Ǥɸ⡼ɤ <b>mcpp</b> ΥƥȤǤ褦ˤʤäƤޤäơGCC Υץץ <b>mcpp</b> ֤ơgcc ǥ쥯ȥ</p>
<pre style="color:navy">
make check-gcc RUNTESTFLAGS=cpp-test.exp
</pre>
<p>Ȥȡ<b>mcpp</b> μưåޤǤդΥǥ쥯ȥ runtest ľܸƤӽФƼ¹Ԥ뤳ȤǤޤ</p>
<pre style="color:navy">
runtest --tool gcc --srcdir /usr/local/gcc-3.4.3-src/gcc/testsuite cpp-test.exp
</pre>
<p><b>mcpp</b> GCC 3, 4 Ǽ¹Ԥ硢cpp-test testcases Ƥ٤Ƥ PASS ϤǤGCC 2 Ǽ¹ԤϤ⤦̤ʤΤޤ gcc -D__cplusplus=1 Ȥץդ <b>mcpp</b> ƤӽФǤꡢ<b>mcpp</b> ΤǤϤޤ<br>
ץץ <b>mcpp</b> ֤ˡˤĤƤϡ<a href="mcpp-manual.html#3.9.5">mcpp-manual.html#3.9.5</a>, <a href="mcpp-manual.html#3.9.7">mcpp-manual.html#3.9.7</a> Ƥ
Testsuite ŬѤϡ<b>mcpp</b> εư -23j Ȥץդ褦ꤹɬפޤ-2 digraph-3 trigraph ͭˤ륪ץǤ-j ϿǥåνϤ˥ξղäʤΥץǤ¾ΥץꤷʤǤޤtestsuite ǥƥȤǤΤɸ⡼ɤ <b>mcpp</b> ǡ¾Υ⡼ɤ <b>mcpp</b> ΥƥȤϤǤޤ</p>
<p>ʾ GCC make θǹԤˡǤGCC / testsuite ȡ뤵ƤƼ¹ԤǤ֤ˤʤäƤС<b>mcpp</b> Ȥ configure make <b>mcpp</b> μưƥȤ뤳ȤǤޤξϡɬפ٤ make check ưŪˤäƤΤǡǤñǤˡˤĤƤϡ<b>mcpp</b> INSTALL Ƥ</p>
<h4><a name="3.2.3.4" href="#toc.3.2.3.4">3.2.3.4. TestSuite ȸڥå</a></h4>
<p>GCC ˤ testsuite Ť餢ޤץץ˴ؤƤ V.2.9x ޤǤϤ鷺Υץ뤷ޤǤ˥ץץڻ뤵Ƥ狼ޤΥץץ testcases V.3.x Ǥϥ㤤ޤץץåΥȥɥȤ쿷졢up-to-date ʤΤˤʤäȤȼΤǡץץŻ뤵褦ˤʤäȤ狼ޤ<br>
testcases ϰȤƤʤҴäΤˤʤäƤޤθϡtestsuite μΤ褦ʤͳ褹ΤȻפޤ</p>
<ol>
<li>桼 bug report νѤǤ뤳ȡʤºݤȯ줿ХȯɤΤΤ濴Ǥ롣<br>
<li>ˡȯԤǽˡΥǥХåΤ˽ΤɲäƤ롣<br>
</ol>
<p>ϥץʤǤϤΥǥХåˡǡGCC ¿ͥ줿ץޤ˻ȤƤȤDzǽȤʤäΤǤˡƱˡtestcases ΥҴ⤿餷Ƥȹͤޤ<br>
ޤ testcases ˤ GCC ǤѤʤץ뤬¿¾νϤˤŬѤǤޤɤGCC 3 testcases ˤ GCC 2 / cpp ˤŬѤǤʤΤ¿ޤޤƤޤץץϤ spacing ΰ㤤ǥåΰ㤤뤿Ǥ<br>
ФƻθڥåȤϡϻΥץץåΥǥХåΤ˻䤬ͤǽΤǤǹͤѤơץץͤƥȤ褦˽ľޤ¿Υץ뤬ΤȤƥƥޥƥå˹Ƥޤƥޥƥå testcases GCC / testsuite ɲä뤳Ȥϡʤʤ̣ĤȻפޤ<br>
ޤ testsuite ǸڥåȤ GCC 2.9x / cpp0, GCC 3.x, 4.x / cc1, <b>mcpp</b> ȤĤΥץץåΥƥȤǤ褦˽ƤޤʤDejaGnu, Tcl ɽεǽѤСϤˤץץϤ spacing κۤǥåκۤۼ뤳ȤǤΤǤ*1</p>
<p>Testsuite ڥåȤΣĤΥץץåŬѤ̤ʲ˺ܤƤޤ<b>mcpp</b> 2007/03 Ρ¾ 2006/10 Υƥȡˡ<br>
GCC 4.1.1 ǥץץå <b>mcpp</b> V.2.6.3 ֤Ƽ¹ԤϤʤޤ</p>
<pre style="color:navy">
=== gcc Summary ===
# of expected passes 264
# of unexpected failures 1
# of expected failures 4
/usr/local/bin/gcc version 4.1.1
</pre>
<p>Ĥ FAIL ΤϡC++98 Ǥ universal-character-name <=> multi-byte character ѴƤʤȤˤΤǤ<br>
GCC 3.2 / cc1 ǤϤʤޤ</p>
<pre style="color:navy">
=== gcc Summary ===
# of expected passes 216
# of unexpected failures 51
# of unexpected successes 2
# of expected failures 2
/usr/local/bin/gcc version 3.2
</pre>
<p>FAIL ¿ϡ˥ФƤۤȤǽФƤʤȤΤǤ<br>
GCC 4.1.1 / cc1 ۤȤѤޤ</p>
<pre style="color:navy">
=== gcc Summary ===
# of expected passes 214
# of unexpected failures 53
# of unexpected successes 2
# of expected failures 2
/usr/local/bin/gcc version 4.1.1
</pre>
<p>GCC 2.95.3 / cpp0 ǤϤʤޤ</p>
<pre style="color:navy">
=== gcc Summary ===
# of expected passes 181
# of unexpected failures 87
# of unexpected successes 3
# of expected failures 1
gcc version 2.95.3 20010315 (release)
</pre>
<p>GCC 3, 4 / cc1 ⤵˥˥ʤԥȤγ줿ǥå⤤ĤޤC99, C++98 οͤȾʬ̤Ǥ<br>
GCC ΥСˤäƷ㤦ΤϡĤ testcase ʣ FAIL ȯ뤳Ȥ뤫Ǥ</p>
<p>:</p>
<p>*1 Τˡ testcases dg script Ϥ䤿 \ 䵭¿ unreadable ʤΤˤʤäƤ롣DejaGnu, Tcl ɽνˤϤʤʤ٤ꡢȤˤϼιפɬפǤ뤬פʣνϤˤĤư̤μưƥȤǽǤ뤳Ȥ狼äǤϡνϤμ¹ԻץΤ testcases ǻȤ륪ץ̤Ǥ뤳ȤǤ롣</p>
<br>
<h2><a name="3.3" href="#toc.3.3">3.3. Violation of syntax rule or constraint ȿǥå</a></h2>
<p>Standard C νϤʤФʤʤΤϤǤְäФƤϿǥåФʤФʤޤޤStandard C ˤϡưͤϤˤޤƤʬ䡢ɤư뤫ꤵƤʤʬ⤢ޤΤȤޤȤƼȡΤ褦ˤʤޤ*1</p>
<ol>
<li>ץǡǡɤνϤǤƱ̤ˤʤΡ<br>
<li>ץȥǡǤäƤ⡢νˡϵꤵʤΡϥɥȤ˵ܤʤƤɤ unspecified behavior̤ưˤȸƤ֡<br>
<li>ץȥǡǤäƤ⡢νϽϤˤޤƤΡλͤϳƽϤɥȤ˵ܤʤФʤʤ implementation-defined behaviorʽưˤȸƤ֡<br>
<li>ְä뤤ϰܿΤʤץޤϥǡǤ뤬νˤĤƤϲꤵʤΡϤϤ˿ǥåФƤɤФʤƤɤ餫ץȤƤνƤɤ undefined behavior̤ưˤȸƤ֡<br>
<li>ְäץޤϥǡǡФƽϤ diagnostic messageʿǥåˤФʤФʤʤΡˤ violation of syntax ruleʹʸ§ȿˤ violation of constraint ȿˤȤ롣*2<br>
</ol>
<p>Τ 1 ΥץȥǡΤΤ strictly conforming program ʵʸ̩ץץˤȸƤӤޤ2, 3 ⡢ϤˤäƷ̤˰㤤νФʤΤǤСޤޤƤƤɤȲᤵˡ<br>
1, 2, 3 ΥץȥǡΤΤ conforming program ʵʹץץˤȸƤӤޤ</p>
<p>ǥåνФ implementation-defined Ǥ餫 violation of syntax rule or constraint ޤ translation unit ĤˤĤƣİʾβ餫οǥåФʤФʤʤȤƤޤViolation of syntax rule or constraint ޤޤʤץФơǥåФȤϽϤμͳǤ strictly conforming program 䡢νϤ implementation-defined, unspecified λͤ˹פ conforming program ϺǸޤǤʤФʤޤ<br>
ΥɥȤǤϡviolation of syntax rule or constraint ֥顼פȸƤ֤Ȥˤޤ</p>
<p> Validation Suite e_* եˤϡʣΥ顼ޤΤޤʲκǤϡϤĤΥ顼ˤĤƣİʾοǥåФȤԤƤޤĥ顼äƤ⣱Ĥ translation unit ˤĤƣĤοǥå"violation of syntax rule or constraint" ȤäˤФʤϤ⤢뤫⤷ޤޤ顼Ȥθν𤹤Ϥ⤢뤫⤷ޤμϽϤΡʼפǤʽ٤ǤϤޤɬפʾϥץХ餷ƺƥƥȤƤʼ <a href="#4">4</a> ̤ˤȤꤢޤ</p>
<p>:</p>
<pre>
*1 C90 3 Definitions of Terms Ѹڤӵ
C90 4 Compliance ʹ
C90 5.1.1.3 Diagnostics ǥå
C99 3 Terms, definitions, and symbols
C99 4 Conformance
C99 5.1.1.3 Diagnostics
</pre>
<p>*2 C++98 Ǥ C90, C99 ȤѸ줬ʤäƤ뤬ݤä˰ʤ</p>
<br>
<h2><a name="3.4" href="#toc.3.4">3.4. ܺ</a></h2>
<p>ʲˡƥƥȹܤˤĤƣĤIJ⤷ޤ
Standard C ץץΤΤβȤʤΤǤK&R 1st. ȶ̤λͤˤĤƤϡ餿ƲϤޤܤֹ *.t ե *.c եȤǶ̤Ǥ</p>
<h3><a name="3.4.1" href="#toc.3.4.1">3.4.1. Trigraphs</a></h3>
<h4>n.1.1. Ĥ trigraph sequences</h4>
<p>äδʸåȤˤ ISO 646:1983 Invariant Code Set ˴ޤޤʤʸĤΤǡϼΣʸ sequence Ǥ⥽˽ȤǤ褦ˤʤޤ C90 ǿߤ줿Ǥ*1</p>
<blockquote>
<table>
<tr><th>??=</th><td>#</td></tr>
<tr><th>??(</th><td>[</td></tr>
<tr><th>??/</th><td>\</td></tr>
<tr><th>??)</th><td>]</td></tr>
<tr><th>??'</th><td>^</td></tr>
<tr><th>??<</th><td>{</td></tr>
<tr><th>??!</th><td>|</td></tr>
<tr><th>??></th><td>}</td></tr>
<tr><th>??-</th><td>~</td></tr>
</table>
</blockquote>
<p>ΣĤ trigraph sequence translation phase 1 бʸ֤ޤĤʸܡɤϤ뤳ȤΤǤ륷ƥǤϡ trigraph ȤɬפϤޤƥǤ Standard C ˹פץץ trigraph ѴǤɬפޤ</p>
<p> : 6ĤȤǤ 6 Ǥʤ trigraph Ĥ뤴Ȥ 2 0 ¤Ȥ롣</p>
<p>:</p>
<pre>
*1 C90 5.2.1.1 Trigraph sequences ʸɽ
C90 5.1.1.2 Translation phases ե
C99 5.2.1.1 Trigraph sequences
C99 5.1.1.2 Translation phases
</pre>
<h4>n.1.2. ȥ trigraph sequence</h4>
<p>Trigraphs Ѵ translation phase 3 Ǥ tokenization phase 4 ǤΥȥԤνΩäƹԤΤǡȥԤǤɤǤ trigraphs ȤǤޤ</p>
<p> : 2</p>
<h4>n.1.3. Trigraphs ϣĤ¸ߤʤ</h4>
<p>Trigraphs Ͼ嵭ΣĤʤΤǡʳ ?? ǻϤޤ sequence ¾ʸѴ뤳ȤϤʤ?? åפ뤳Ȥ⤢ޤTrigraph ȤǤʤ ? ޤ sequence ߤƤ⡢ץץǤɬפޤ</p>
<p> : 2</p>
<h3><a name="3.4.2" href="#toc.3.4.2">3.4.2. <backslash><newline> ˤ³</a></h3>
<p> \ äƤľ˲Ԥ³ƤФϡ <backslash><newline> sequence translation phase 2 ̵˺ޤη̡ĤιԤ³ޤʽǤϡեιԤ physical lineʪԡˡ<backslash><newline> ʤС˺³줿ιԤ logical lineԡˤȸƤǶ̤ƤޤTranslation phase 3 νϤԤоݤȤƹԤޤ*1<br>
K&R 1st. Ǥ #define Ԥʸ <backslash><newline> ǼΥԤ³뤳ȤǤȤƤޤΰʳξˤĤƤϿƤޤºݤνϤǤϤޤޤǤȥԤ #define ˸¤餺³ǤΤ¿ä褦Ǥ</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
</pre>
<h4>n.2.1. #define ԤΥѥꥹȤִꥹȤȤδ</h4>
<p>#define Ԥ³ K&R 1st. ǤǧƤΤǤꡢۤȤɤνϤDzǽǤ</p>
<p> : 4ʤǤ 4 Ǥʤ 0 </p>
<h4>n.2.2. #define ԤΥѥꥹȤ</h4>
<p>#define ԤǤäƤѥꥹȤΤ褦ʤޤ̤ǤϤʤȤ <backslash><newline> ȡǤʤϤ⤢ޤ</p>
<p> : 2</p>
<h4>n.2.3. ʸƥ</h4>
<p>ʸƥ <backslash><newline> K&R 1st. ΤΤǤ</p>
<p> : 2
</p>
<h4>n.2.4. ̻Ҥ</h4>
<p>Standard C Ǥϡ̻ҤǤȤɤǤȡ<backslash><newline> ̵ǺʤФʤޤ</p>
<p> : 2</p>
<h4>n.2.5. Trigraph ˤ <backslash></h4>
<p><backslash> \ Ǥʤtrigraph ˤ ??/ ⤢ޤ ??/ translation phase 1 \ ѴƤޤ顢phase 2 Ǥ \ ΤΤǤ</p>
<p> : 2</p>
<h3><a name="3.4.3" href="#toc.3.4.3">3.4.3. </a></h3>
<p>Translation phase 3 ǤԤ pp-token white spaces ʬޤκݡȤϣĤ space Ѵޤ*1<br>
ǽϤϡϢ³ white spacesʥȤޤˤĤ space Ѵ뤫⤷ޤɤˤƤ <newline> ѴΤޤĤޤϡ phase 4 Ǥ preprocessing directive νΡֹԡפоݤȤ뤫Ǥ<br>
ȤԤޤäƤϡȤˤ¾ι³Ԥޤ</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
</pre>
<h4>n.3.1. One space Ѵ</h4>
<p> Reiser θŤ cpp ǤϥȤϡcpp Ǥ token separator ȤƵǽϤޤǤδ֤ˤϺƤޤΤȤѤơȡϢ˥ȤȤˡޤλͤ K&R 1st. ⳰줿ΤǤꡢStandard C ǤΤꤵޤStandard C ǤϥȡϢˤ ## 黻ҤȤޤ</p>
<p> : 6</p>
<h4>n.dslcom. // </h4>
<p>K&R 1st. C90 ˻ޤǡȤ /* ǻϤޤ */ ǽΤǤ*1<br>
C99 Ǥ C++ // ⥳ȤȤưȤˤʤޤ*2</p>
<p> : 4
<br>
C90 ǤϤϥȤǤϤʤñʤ / Ȥ pp-token Ĥ sequence Ȥƽ٤ΤǤ뤬C99 // ȤȤƽϤŪǤä<b>mcpp</b> Ǥ C90 ⡼ɤǤ⤳ȤȤƽǥ˥Ф</p>
<p>:</p>
<pre>
*1 C90 6.1.9 Comments
</pre>
<pre>
*2 C99 6.4.9 Comments
</pre>
<h4>n.3.3. Ȥ pp-directive νΩäƽ</h4>
<p># ǻϤޤ preprocessing directive ϡֹԡפоݤȤޤΡֹԡפϥʪԤȤϸ¤ޤ<backslash><newline> ˤä³줿ԤǤ뤳Ȥ⤢СʪԤޤȤˤäʣʪԤˤޤֹԡפǤ뤳Ȥ⤢ޤ translation phase 1 4 νͤƤߤСΤȤǤ</p>
<p> : 4</p>
<h4>n.3.4. Ȥ <backslash><newline></h4>
<p><backslash><newline> ȥȤˤäƤĤʪԤˤޤ pp-directive Ԥ¸ߤޤTranslation phase ƤʤץץåǤϡ뤳ȤǤޤ</p>
<p> : 2</p>
<h3><a name="3.4.4" href="#toc.3.4.4">3.4.4. üʥȡ (digraphs) ʸ (UCN)</a></h3>
<p>C90 / Amendment 1 (1994) ǤϡĤ operator, punctuator ˤĤ digraph Ȥ spelling ɲäޤ*1<br>
C99 Ǥ UCN (universal character sequence) Ȥʸɽɲäޤ*2<br>
e.4.? Ǥϥȡ顼夲ޤ</p>
<p>
:</p>
<pre>
*1 Amendment 1 / 3.1 Operators, 3.2 Punctuators ISO 9899 / 6.1.5, 6.1.6 ؤɲá
C99 6.4.6 Punctuators
*2 C99 6.4.3 Universal character names
</pre>
<h4>n.4.1. Preprocessing directive digraph spelling</h4>
<p>Digraph token (pp-token) Ȥưޤ
%: # spelling Ǥpreprocessing directive ԤƬ pp-token ȤƤ⡢ʸ黻ҤȤƤȤޤ</p>
<p> : 6</p>
<h4>n.4.2. Digraph spelling ʸ</h4>
<p>Digraph trigraph Ȱä token (pp-token) ʤΤǡʸ˺ݤƤѴ줺ˤΤޤޤ spelling ʸޤ̵̣ʻͤǤˡ</p>
<p> : 2</p>
<h4>n.ucn1. UCN ǧ 1</h4>
<p>UCN ʸƥ롢ʸ̻Ҥǧޤ
</p>
<p> : 8ʸƥ UCN ץץΤޤ̲᤹ 4 ʸidentifier UCN г 2 UCN Ǥ뤳ȤǧۤäƤΤޤϤΤԲġ</p>
<h4>n.ucn2. UCN ǧ 2</h4>
<p>UCN pp-number ǤȤޤץץνޤǤ number-token ϾǤƤʤФʤޤ C99 εǡC++ ˤϤޤ</p>
<p> : 2</p>
<h4>e.ucn. UCN θ</h4>
<p>UCN \U ǻϤޤΤϣ\u ǻϤޤΤϣΣʿǤʤФʤޤ<br>
UCN [0..9F], [D800..DFFF] ϰϤˤäƤϤʤޤ24($), 40(@), 60(`) ͭǤ</p>
<p> : 4ĤΥץΤ줾ˤĤơǤǤг 1 </p>
<h4>e.4.3. ʸ</h4>
<p>äΥȡηƤʤ sequence Ǥ⤿Ƥ pp-token Ȥǧޤäơץץ tokenization ǥ顼Ȥʤϡޤꤢޤ<br>
Τۤ undefined behavior Ȥʤ礬Ĥޤ<a href="#4.2">4.2</a> ȡˡ<br>
ʸϥץץ #if ԤǤ⥳ѥǤ⡢violation of syntax rule Ǥ*1</p>
<p> : 2
</p>
<p>
:</p>
<pre>
*1 C90 6.1.3.4 Character constants ʸ -- Syntax ʸ§
C99 6.4.4.4 Character constants -- Syntax
</pre>
<h3><a name="3.4.5" href="#toc.3.4.5">3.4.5. Preprocessing directive line space tab</a></h3>
<p>Space, tab, vertical-tab, form-feed, carriage-return, new-line white space Ȥư礵ޤʸƥ롦ʸإå̾Ȥˤʤ white space ̾ token separator ȤƤΰ̣äƤޤtranslation phase 4 ޤǻĤä newline ̤ʤΤǡpp-directive ζڤȤʤޤơpp-directive line ǤϻȤ white space ˼㴳¤ޤ</p>
<h4>n.5.1. # space tab</h4>
<p>Standard C ǤϡPreprocessing directive line κǽ pp-token Ǥ # space, tab ϡäƤʤƤƱ̤ˤʤ뤳ȤݾڤƤޤ(*1)K&R 1st. ǤϤ줬ΤǤϤʤºݤˤ # space, tab ǧʤϤޤ<br>
ιԤΤʹߤ space, tab ϡK&R 1st. Ǥ Standard C Ʊͤˡñʤ token separator ȤǧƤȲᤵޤ<br>
pp-directive line space, tab ʳ white space ä undefined Ǥ4.2 <a href="#u.1.6">u.1.6</a> ȡˡ</p>
<p> : 6</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Description , Constraints
C99 6.10 Preprocesssing directives -- Description, Constraints
</pre>
<h3><a name="3.4.6" href="#toc.3.4.6">3.4.6. #include</a></h3>
<p>#include K&R 1st. κǤŪ pp-directive ǤStandard C Τ directive εˤ undefined ʬ implementation-defined ʬȤ¿ʤäƤޤ(*1)ͳϼˤޤ</p>
<ol>
<li> directive ΰǤ header-name Ȥ pp-token ϣϣӤΥե륷ƥ˰¸ΤǤꡢɸಽ<br>
<li>եɸפξϽϤ˰¸롣<br>
<li>", "
ǰϤޤ줿ʸƥη header-name Ǥ⡢\ escape ʸǤϤʤʸƥȤ̤ pp-token Ǥꡢ <, > ǰϤޤ줿 header-name ˤäƤϺǤ§Ū pp-token Ǥ롣<br>
</ol>
<p>n.6.* ǤϡΤ褦ʺǤŪʥƥȤϡܤʬƹԤȤϤޤ¾ΥƥȹܤȤƴޤޤƤꡢ줬ǤʤΤǤ¿ΥƥȤ»ܤǤʤΤǡǤ</p>
<pre style="color:navy">
#include <ctype.h>
#include "header.h"
</pre>
<p>:</p>
<pre>
*1 C90 6.8.2 Source file inclusion ե
C99 6.10.2 Source file inclusion
</pre>
<h4>n.6.1. Ĥηˤɸإå include</h4>
<p>Header-name ˤϣĤηޤ
ΰ㤤ϡ<, > ǰϤޤ줿ǤϽξʣǤɤˤ餽 header ", " ǰϤޤ줿ǤϤΥեޤˡǤơ줬Ԥ <, > ǰϤޤ줿Ʊͤν롢ȤȤˤޤäơ", " ǰϤޤ줿ɸإå include 뤳ȤǤޤ K&R 1st. ǤƱͤǤ<br>
ʤStandard C ǤϡƱɸإåʣ include Ƥ⤫ޤʤȤˤʤäƤޤϤɤˤƤץץåǤϤʤɸإåνǤ<a href=#4.1.1>4.1.1</a> ȡˡ</p>
<p> : 10ĤΥץʤΤ 4 </p>
<h4>n.6.2. ޥˤ header-nameΣ</h4>
<p>K&R 1st. Ǥ #include Ԥ˥ޥȤȤϤƤޤǤStandard C Ǥϥޥǧޤ#include ΰĤΤɤηȤפʤϡ˴ޤޤޥŸޤη̤ϣĤηΤɤ餫˰פɬפޤ<br>
εˤ̯ʤȤ⤢ޤ㤨СΤ褦ʥϤɤ٤Ǥ礦</p>
<pre style="color:navy">
#define MACRO header.h>
#include <MACRO
</pre>
<p>ϡMACRO ޤŸ</p>
<pre style="color:navy">
#include <header.h>
</pre>
<p>Ȥ٤Ǥ礦Ȥ⡢ޥŸ < б > ʤȤƥ顼Ȥ٤Ǥ礦</p>
<p>ʤϤȤޤǰռƽƤȤϹͤޤ
äơ<, > ", " Ʊͤ quotation delimiter ȤưΤʤȻפޤ˥ޥŸΤ⡢ʰȿȤϸޤ Validation Suite ˤϡʤηĤĤƥȤϴޤޤƤޤ</p>
<p> : 6</p>
<h4>n.6.3. ޥˤ header-nameΣ</h4>
<p>ĤޤʤȤǤޥɬ⣱ĤǤɬפϤޤ
</p>
<p> : 2
</p>
<h3><a name="3.4.7" href="#toc.3.4.7">3.4.7. #line</a></h3>
<p>#line Ȥ pp-directive ϥ桼ȤȤ̤ϤʤΤǤ¾βΥġǡʣäȤϸ¤ʤ˥ pre-preprocess ʤɤˡΥΥե̾Ȥλιֹ뤿˻ȤΤΤ褦ǤK&R 1st. 褢ȤȡŪˤʤӤΤǤ礦<br>
ޤץץåνϤˤ̤ #line ޤϤѷե̾ȹֹѥΤ뤿˻ȤޤϵꤵƤ뤳ȤǤϤޤ<br>
#line ǻꤵ줿ե̾ȹֹϻޥ <tt>__FILE__</tt>, <tt>__LINE__</tt> ͤȤʤޤ<tt>__LINE__</tt> ϤʪԣԤȤ˥ȤƤ椯ˡ*1</p>
<pre>
*1 C90 6.8.4 Line control
C99 6.10.4 Line control
C90 6.8.8 Predefined macro names 餫줿ޥ̾
C99 6.10.8 Predefined macro names
</pre>
<h4>n.7.1. ֹȥե̾λ</h4>
<p>Line number filename ꤷ #line K&R 1st. ˤ⤢ޤK&R 1st. Ǥ filename ", " ǰϤߤޤǤ<br>
Standard C Ǥ filename ʸƥǤ #include header-name ȤϰäȡǤꡢ̩˹ͤ \ ΰ̯ޤǤޤǤʤǤ礦#line filename <stdio.h> ηΤΤʤΤϹǤˡ</p>
<p> : 6</p>
<h4>n.7.2. ե̵̾Ƥɤ</h4>
<p>Filename ΰϥץǤꡢʤƤ⤫ޤޤ
K&R 1st. ƱǤline number λΤʤΤ undefinedˡ</p>
<p> : 4</p>
<h4>n.7.3. ޥˤֹȥե̾λ</h4>
<p>K&R 1st. Ǥ #line ΰ˥ޥȤȤϤƤޤǤStandard C ǤϻȤ뤳Ȥݾڤޤ</p>
<p> : 4</p>
<h4>n.line ֹϰ</h4>
<p>#line ǥ쥯ƥ֤ line number ϰϤ C90 Ǥ [1..32767] ǤC99 Ǥ [1..2147483647] ˳礵ޤ</p>
<p> : 2</p>
<h4>e.7.4. ե̾磻ʸƥ</h4>
<p>Filename ΰʸƥǤʤФʤ餺ĤޤʤȤǤ磻ʸƥǤ violation of constraint Ȥʤޤʤʳ pp-token ǤϤʤ undefinedХʵǤˡ</p>
<p> : 2</p>
<h3><a name="3.4.8" href="#toc.3.4.8">3.4.8. #error</a></h3>
<p>#error C90 ǿߤ줿 directive Ǥ
ץץˡΰȤƴޤ२顼åɽޤŤϤǤ #assert directive ĤΤ⤢ޤɸŪʤΤϤޤǤ<br>
ʤ#error ǤϽλ٤ɤϵꤵƤޤRationale ˤȡʤǤϤޤǤʤΤǵꤷʤäǡߤΤ ANSI C ѰΰտޤǤȤΤȤǤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.5 Error directive ɽ
ANSI C Rationale 3.8.5
C99 6.10.5 Error directive
C99 Rationale 6.10.5
</pre>
<h4>n.8.1. ޥŸʤ</h4>
<p>#error ΥޥŸޤ
ȥԤǥޥŸΤϡ#if (#elif), #include, #line Ǥ*1</p>
<p> : 8ޥŸƽΤ 2 λ뤫ɤʤ</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Semantics ̣§
C99 6.10 Preprocessing directives -- Semantics
</pre>
<h4>n.8.2. å̵Ƥɤ</h4>
<p>ĤޤʤȤǤ#error ԤΰϥץǤꡢʤƤ⤫ޤޤ</p>
<p> : 2
</p>
<h3><a name="3.4.9" href="#toc.3.4.9">3.4.9. #pragma, _Pragma()</a></h3>
<p>#pragma C90 ǿߤ줿ΤǤȼγĥ directive Ϥ٤ #pragma sub-directive Ǽ¸뤳ȤˤʤäƤޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.6 Pragma directive ץ饰
C99 6.10.6 Pragma directive
</pre>
<h4>n.9.1. ǧǤʤ #pragma ⥨顼ˤϤʤʤ</h4>
<p>äơϤȤǧǤ #pragma sub-directive ۤʤޤǧǤʤ #pragma 顼ˤʤäΤǤ portable ʥץबʤΤǡϤǧǤʤ #pragma ̵뤹뤳ȤˤʤäƤޤץץǤϼʬǧǤץץ˴ؤ #pragma ơ¾ #pragma Ϥ٤ƤΤޤޥѥΤϤȤˤʤޤ</p>
<p> : 10#pragma 顼ˤƤϤʤ˥ФȤϤޤʤ</p>
<h4>n.pragma. _Pragma() operater</h4>
<p>C99 Ǥϡ#pragma Ʊ̤#pragma ȰäƥޥˤȤΤǤ _Pragma() operator ɲäޤ<br>
ޤpragma ³ pp-token STDC Ǥеꤵ줿ɸεǽξϥޥŸػߤ뤬¾ξϥޥŸоݤȤ뤫ɤ implementation-defined ȤƤޤ</p>
<p> : 6</p>
<h4>e.pragma _Pragma() ΰʸƥ</h4>
<p>_Pragma() operator ΰʸƥǤʤФʤޤ</p>
<p> : 2
</p>
<h3><a name="3.4.10" href="#toc.3.4.10">3.4.10. #if, #elif, #else, #endif</a></h3>
<p>#if, #else, #endif K&R 1st. 褢ΤǤ
*1<br>
#if ȤʤϤǤϡn.10.1, n.11.*, n.12.*, n.13.*, e.12.*, e.14.* ɤǤʤФǤʤ¾¿ΥƥȤ⼺Ԥ뤳Ȥˤʤޤ</p>
<p>:</p>
<pre>
*1 C90 6.8.1 Conditional inclusion դ
C99 6.10.1 Conditional inclusion
</pre>
<h4>n.10.1. #elif Ȥ</h4>
<p>C90 Ǥ #elif ɲäޤˤäơ#if ŤˤͥȤɤߤˤ褦ˤʤޤ<br>
#if ˤϥޥȤȤǤޤޥȤƤʤ identifier 0 ɾޤ</p>
<p>ʤʽǤϡ#if 餽б #endif ޤǤ #if section #if (#ifdef, #ifndef), #elif, #else, #endif Ƕڤ줿֥å #if group ȸƤǤޤ#if, #elif Ԥμ #if ȸƤӤޤ</p>
<p> : 10</p>
<h4>n.10.2. åפ #if group Ǥ pp-token </h4>
<p>åפ #if group Ǥϡ#if group бطȥ졼뤿 #if, #ifdef, #ifndef, #elif, #else, #endif Ĵ٤ʳ preprocessing directive Ͻ줺ޥŸޤ</p>
<p>tokenization ϹԤޤˡäΥϽᤫ齪ޤǥȤ pp-token sequence Ǥꡢˡ#if бطĴ٤뤿ˤϾʤȤ⥳Ȥνɬפǡ/* ȵǤ뤳ȤΤ뤿ˤϤ줬ʸƥʸˤΤǤϤʤȤΤʤФʤʤǤ</p>
<p> : 6</p>
<h3><a name="3.4.11" href="#toc.3.4.11">3.4.11. #if defined</a></h3>
<p>C90 Ǥ #if defined Ȥ黻Ҥߤޤ
#ifdef, #ifndef #if (#elif) 礹Τǡˤäơ#ifdef ŤˤͥȤ줿ɤߤˤ褦ˤʤޤ</p>
<h4>n.11.1. #if defined</h4>
<p>defined 黻Ҥ operand ϼ̻ҤǤ (, ) ǰϤȰϤޤʤǧƤޤɤ̣Ʊǡoperand ޥȤƤ 1Ǥʤ 0 ɾޤ</p>
<p> : 8Ĥ #if section ǤʤΤ 2 </p>
<h4>n.11.2. defined ñ黻</h4>
<p>defined ϱ黻ҤΣĤǤꡢ1 0 Τɤ餫ͤͿΤǡη̤¾μȱ黻뤳ȤǤޤ</p>
<p> : 2</p>
<h3><a name="3.4.12" href="#toc.3.4.12">3.4.12. #if η</a></h3>
<p>#if ˤĤƤ K&R 1st. ǤȤƤǡηϤäꤷƤޤǤC90 Ǥ #if Ǥꡢint long ȡunsigned int unsigned long ƱɽäƤ뤫Τ褦˰ȤΤˤޤʤ#if ϤޤƤ٤ long unsigned long ɾޤСȡˤϤ٤ L ޤ UL ҤդƤΤƱ褦˰ޤ*1</p>
<p>ˡC99 Ǥ #if ηϤ줾νϤκȤޤη <stdint.h> Ȥɸإå intmax_t, uintmax_t Ȥ̾ typedef ޤC99 Ǥ long long ɬܤȤƤΤǡ#if η long long ޤϤʾΥȤȤˤʤޤlong long / unsigned long long ɽˤ LL (ll) / ULL (ull) ȤҤȤޤ*2<br>
long long / unsigned long long ͤ printf() ɽˤϡ%ll Ȥ length modifier Ŭ conversion specifier Ȥޤ%lld, %llu, %llx ˡintmax_t, uintmax_t ͤɽ length modifier %j Ǥ%jd, %ju, %jx ˡ*3</p>
<p>:</p>
<pre>
*1 C90 6.8.1 Conditional inclusion դ -- Semantics ̣§
</pre>
<pre>
*2 C99 6.10.1 Conditional inclusion -- Semantics
</pre>
<pre>
*3 C99 7.19.6.1 The fprintf function -- Description
</pre>
<h4>n.12.1. long #if </h4>
<p>C90 #if Ǥ long ɾǤʤФʤޤ</p>
<p> : 6
</p>
<h4>n.12.2. unsigned long #if </h4>
<p>C90 #if Ǥ unsigned long ɾǤʤФʤޤ</p>
<p> : 4
</p>
<h4>n.12.3. ʿ</h4>
<p>#if ǤϣɾǤʤФʤޤK&R 1st. ǤƱͤǤlong κͤۤ K&R 1st. Ǥ long ͤɾ줿ΤФơC90 Ǥ unsigned long ɾȤäƤޤ*1</p>
<p> : 4ʿǧ뤬ɾꥪСեꤹΤ 2 ʿǧʤΤ 0 </p>
<pre>
*1 C90 6.1.3.2 Integer constants
C99 6.4.4.1 Integer constants
</pre>
<h4>n.12.4. ʿ</h4>
<p>#if
ǤϣɾǤʤФʤޤK&R 1st. ǤƱͤǤlong κͤۤ K&R 1st. Ǥ long ͤɾ줿ΤФơC90 Ǥ unsigned long ɾȤäƤޤ</p>
<p> : 4ʿǧ뤬ɾꥪСեꤹΤ 2 ʿǧʤΤ 0 </p>
<h4>n.12.5. L, l</h4>
<p>#if Ǥ L, l դȡɾǤʤФʤޤK&R 1st. Ǥ long κͤۤʤˤĤƤƱǤץץǤϤҤϤäƤʤƤɾƱǤ</p>
<p> : 2</p>
<h4>n.12.6. U, u</h4>
<p>#if Ǥ U, u դȡɾǤʤФʤޤ K&R 1st. ˤϤʤC90 Ǹǧ줿ˡǤ</p>
<p> : 6</p>
<h4>n.12.7. </h4>
<p>#if ǤοⰷʤФʤޤK&R 1st. λͤǤ</p>
<p> : 4
</p>
<h4>e.12.8. ȡͤɽǤϰϤˤʤ</h4>
<p>C90 Ǥϡ#if ˸ȡͤ long ޤ unsigned long ɽǤϰϤˤʤ violation of constraintʿХ顼Ȥʤޤ #if ˤĤľܵꤵƤ뤳ȤǤϤޤ̤ˤĤƤε꤬ꡢ#if 㳰ǤϤʤȹͤޤ*1<br>
ʤʸ overflow ˤĤƤϡe.32.5., e.33.2, e.35.2 ǥƥȤޤ</p>
<p> : 2</p>
<p>
:</p>
<pre>
*1 C90 6.4 Constant expressions -- Constraints
C99 6.6 Constant expressions -- Constraints
</pre>
<h4>n.llong. long long / unsigned long long ɾ</h4>
<p>C99 #if ǤϾʤȤ long long / unsigned long long ɾǤʤФʤޤ<br>
long long κͤۤ unsigned long long ɾޤ<br>
C99 Ǥ LL, ll, ULL, ull ȤҤɲäޤ*1</p>
<p> : 10ĤΥץˤĤơǤФ줾 2 </p>
<p>:</p>
<pre>
*1 C99 6.4.4.1 Integer constants
C99 6.6 Constant expressions -- Constraints
</pre>
<h4>e.intmax. 黻η̤ intmax_t ϰϳ</h4>
<p>C99 #if Ǥϡintmax_t, uintmax_t ϰϤۤ violation of constraint Ȥʤޤ</p>
<p> : 2 <stdint.h> ʤϥޥŬ˽Ƥ⤫ޤʤ</p>
<h3><a name="3.4.13" href="#toc.3.4.13">3.4.13. #if α黻</a></h3>
<p>#if ΰǤ
̤٤ȼΤ褦ʰ㤤Ǥ</p>
<ol>
<li>C90 Ǥ int longunsigned int unsigned long ƱɽĤΤ褦ɾ롣C99 Ǥ int, long intmax_tunsigned int, unsigned long uintmax_t ƱɽĤΤ褦ɾ롣<br>
<li>defined 黻ҤȤ롣<br>
<li>ޥŸ˻Ĥä identifier Ϥ٤ 0 ɾ롣*1<br>
<li>ץץǤ keyword ¸ߤʤΤǡkeyword Ʊ̾ identifier ñʤ identifier Ȥư롣äơ㥹Ȥ sizeof ϻȤʤ<br>
</ol>
<p>ؿƤӽФޱ黻Ҥϡ̤ǤȤޤѿǤϤʤΤǡȡǥȡȤޤ<br>
n.13 Ǥϰ̤ȶ̤ɾ롼ˤĤƥƥȤޤΤ n.13.5 K&R 1st. ȤѤäȤǡn.13.6. pre-Standard #if ǤϤޤޤäȤǡn.13.13., n.13.14 K&R 1st. ǤΤǤʤäΤǤ¾ K&R 1st. ޤäѤäƤޤ*2<br>
ʤ#if int ͤɾǤʤϤˤĤƤ⤳Υ롼ΥƥȤǤ褦ˡn.13. ǤϤ٤ƾͤȤäƤޤޤ黻 defined, >= n.13 ˽ФƤޤ¾Τɤ˽ФƤƤޤ</p>
<p>:</p>
<p>*1 C++ Standard Ǥ true, false ̰졢줾 1, 0 ɾ롣ϥޥǤϤʤ keyword Ǥ뤬ץץǤ boolean literal Ȥư뤳ȤˤʤäƤ롣</p>
<pre>
*2 C90 6.3 Expressions
C90 6.4 Constant expressions
C99 6.5 Expressions
C99 6.6 Constant expressions
</pre>
<h4>n.13.1. <<, >></h4>
<p>ӥåȥեȱ黻ϾʤȤ˴ؤƤϡݤϲ⤢ޤ</p>
<p> : 2
</p>
<h4>n.13.2. ^, |, &</h4>
<p>ϤηϰϤˤޤäƤ¤ꡢƱͤΥӥåȥѥ CPU ϤΤˤ餺ƱʤΤǡ^, |, & Ȥ츫 CPU λͤ˰¸ʱ黻⡢ϰϤǤϤɤνϤǤޤäƱ̤ˤʤޤ</p>
<p> : 2</p>
<h4>n.13.3. ||, &&</h4>
<p>ǤʤϤϤʤǤ礦
</p>
<p> : 4
</p>
<h4>n.13.4. ? :</h4>
<p>ǤʤϤϤʤǤ礦ʤȻפ줿ºݤˤϤʤʤˡ
</p>
<p> : 2
</p>
<h4>n.13.5. <<, >> Ǥ̾λѴϹԤʤ</h4>
<p>¿Σ黻ҤǤξդη뤿 usual arithmetic conversion ̾λѴˤԤޤK&R 1st. Ǥϥեȱ黻ҤǤ⤳줬Ԥ뤳ȤˤʤäƤޤStandard C ǤϹԤʤȤˤʤޤդͤϾ˾Ǥ뤳ȡʳɽǤϡѴ줿ΤǤϥӥåȥѥѤäƤޤäƤΤ狼ʤʤäƤޤȤͤȡʵǤ礦*1</p>
<p> : 2</p>
<p>
:</p>
<pre>
*1 C90 6.3.7 Bitwise shift operators ӥåñ̤Υեȱ黻 -- Semantics ̣§
C99 6.5.7 Bitwise shift operators -- Semantics
</pre>
¿Σ黻Ҥ˴ؤƤϡξդѷǤСФ̾λѴԤפȤƤ뤬<<, >> ˴ؤƤϤεܤʤC89 Rationale 3.3.7 (C99 Rationale 6.5.7) ˤˤĤƤβ⤬롣</p>
<h4>n.13.6. ̾λѴˤؤѴ</h4>
<p>黻 *, /, %, +, -, <, >, <=, >=, ==, !=, &, ^, |, ˴ؤƤϡξդη뤿ᡢξդ operand Ф̾λѴԤޤ黻 ? : 裲裳 operand ˤĤƤƱͤǤäơʤǤȡ¾ʤѴ졢ˤʤäƤޤޤ<br>
ʤ̤Ǥ̾λѴˡ operand int ûǤäϤФ integer promotion ĥˤԤޤ#if ǤϤ٤Ƥ operand ƱηȤưΤǡintegral promotion ȯޤ</p>
<p> : 6ĤΥƥȤǤ뤴Ȥ 2 <br>
ɾ§ K&R 1st. ǤƱʤΤǤ뤬Υץ 0U Ȥȡ U ҤȤäƤΤǡK&R 1st. νϤǤϽǤʤ</p>
<h4>n.13.7. ||, &&, ? : ǤɾǤڤ</h4>
<p>||, && 黻ҤǤɾޤäƤꡢդɾǷ̤ꤹбդɾޤ? : Ǥ operand ɾ̤ˤä軰Τɤ餫ɾ졢¾ɾޤ*1<br>
äơɾʤˤϤȤ 0 ˤäƤ⥨顼ˤϤʤޤ</p>
<p> : 6ĤΥץΤԤĤ뤴Ȥ 2 İʲʤΤ 0 ְäǥåФΤ 2 </p>
<p>:</p>
<p>*1 ? : 黻ҤǤϤ operand 軰 operand Ȥδ֤̾λѴϹԤ뤳ȤˤʤäƤ롣ɾʤΤѴȤ̯ʤȤǤ롣Ȥ #if ǻȤȡͤɾʤȷޤʤΤǡʤȸäƤդ̵Ǥ뤬ˤȽꤹ뤿ˤϡͤɾʤ0 ˤϤƤϤʤΤǤ롣äʤȤǤ롣</p>
<h4>n.13.8. ñ黻 -, +, !, ~ Υ롼ײ</h4>
<p>n.13.8 n.13.12 ޤǤ #if Υ롼ײΥƥȤǤϱ黻Ҥ̤ͥȷ絬§˽äƥ롼ײޤ̤Ǥ̤ͥ˹ʸǷޤʬޤ#if ϥ롼ԥ (, ) ʳˤϹʸȤʤȤϤޤn.13.8. n.13.10 ޤǤϷ絬§ΥƥȤǡn.13.8. ñ黻 -, +, !, ~ η絬§ΥƥȤǤñ黻ҤϤⱦ麸ط礵ޤ</p>
<p> : 2</p>
<h4>n.13.9. ? : Υ롼ײ</h4>
<p>黻 ? : ϱ麸ط礵ޤ</p>
<p> : 2
</p>
<h4>n.13.10. <<, >> Υ롼ײ</h4>
<p>黻ҤϤ⺸鱦ط礵ޤn.13.10. Ǥ <<, >> ΥƥȤޤ</p>
<p> : 2
</p>
<h4>n.13.11. ̤ͥΰۤʤ黻ҤΥ롼ײΣ</h4>
<p>ñ黻 -, +, ! ȣ黻 *, /, >> Ȥ̤ͥ絬§ۤʤ黻Ҥδޤޤ뼰ΥƥȤޤ</p>
<p> : 2</p>
<h4>n.13.12. ̤ͥΰۤʤ黻ҤΥ롼ײΣ</h4>
<p>ñ黻 -, +, ~, ! ȣ黻 -, *, %, >>, &, | ^, ==, !=ˣ黻 ? : ޤवʣʼΥ롼ײΥƥȤޤ</p>
<p> : 2</p>
<h4>n.13.13. 黻ҤŸޥ</h4>
<p>#if ˤϥޥޤळȤǤޤ
Υޥ̾ŸΤǤˤĤƤ n.10.1, n.12.1, n_12.2, n.13.7 ΥƥȤ˴ޤޤƤΤǡǤϤ餿ƥƥȤޤ<br>
黻ҤŸޥȤΤϿҾʤΤǤϤޤϤ긶§ȤƱ黻ҤȤư٤Ǥ礦ISO C 1990 / Amendment 1 Ǥ <iso646.h> ȤɸإåꤵޤϤĤα黻ҤޥΤǤ (*1)&, |, !, ^, ~ ȤäʸȤʤƤ⥽ȤǤ褦ˡȤݤΤ褦Ǥץץ #if ǤϤΥޥŸʤ顢黻ҤȤưȤޤ<br>
¾ #if Υޥ defined Ÿ undefined Ȥ꤬ޤdefined identifier ʶ路Τ̰ˤʤäΤǤ礦<a href="#u.1.19">u.1.19</a> ȡˡ</p>
<p> : 4</p>
<p>:</p>
<p>*1 C++ Standard Ǥϡʤ identifier ͱ黻ҤϥޥǤϤʤ token Ǥ롣</p>
<h4>n.13.14. ĤΥȡŸޥ</h4>
<p>ĤΥȡŸޥޤ #if ҾʤΤǤϤޤϤϤꤽΥޥȤŸ˾ɾ٤Ǥ礦</p>
<p> : 2</p>
<h3><a name="3.4.14" href="#toc.3.4.14">3.4.14. #if Υ顼</a></h3>
<p>e.14.1 e.14.10 ޤǤ #if Ǥ violation of syntax rule violation of constraint ΥƥȤǤϤϤΤɤ줫Ĥޤह٤ƤΥФơǥåФɬפޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.1 Conditional inclusion դ
C90 6.4 Constant expressions
C99 6.10.1 Conditional inclusion
C99 6.6 Constant expressions
</pre>
<h4>e.14.1. ʸƥ</h4>
<p>#if ǤꡢݥϻȤʤΤǡʸƥϻȤޤ</p>
<p> : 2</p>
<h4>e.14.2. 黻 =, ++, --, . </h4>
<p>#if ǤΤǡѤı黻ҤѿϻȤޤ
A --B A - -B Ȥϰä violation of constraint Ǥ</p>
<p> : 4ĤΥץΤǤǤʤΤУĤ 2 İʾ夢 0 </p>
<h4>e.14.3. 뤷ʤ</h4>
<p>黻Ҥ operand ʤäꡢäбȤʤäꤹΤϡ violation of syntax rule Ǥ</p>
<p> : 2</p>
<h4>e.14.4. #if defined Υå</h4>
<p>#if Ԥ defined Ȥ黻Ҥΰ (, ) ǰϤǤϤޤʤƤ⤫ޤޤåΤ violation of constraint Ǥ</p>
<p> : 2</p>
<h4>e.14.5. ʤ</h4>
<p>#if ǼʤΤϤ violation of syntax rule Ǥ</p>
<p> : 2
</p>
<h4>e.14.6. ޥŸȼʤʤ</h4>
<p>ޥȤƤʤ identifier 0 ɾޤޥŸȲʤʤäƤޤ #if ԤΰϤ violation of syntax rule Ǥ</p>
<p> : 2</p>
<h4>e.14.7. Keyword ǧʤsizeof</h4>
<p>sizeof Ȥ pp-token ϥץץǤñʤ identifier Ȥư졢#if ǤϡޥȤƤʤ 0 ɾޤint Ȥ pp-token ƱͤǤäơsizeof (int) 0 (0) Ȥʤꡢviolation of syntax rule Ȥʤޤ</p>
<p> : 2</p>
<h4>e.14.8. Keyword ǧʤ̾</h4>
<p>e.14.7 Ʊͤˡ(int)0x8000 (0)0x8000 ȤʤꡢϤ violation of syntax rule Ȥʤޤ</p>
<p> : 2
</p>
<h4>e.14.9. 0 ˤ</h4>
<p> e.14.9 ȼ e.14.10 ˤĤƤϡǥåФ٤ɤĤβ;Ϥꡢ꤬ޤǤʽˤϼΤ褦ʵ꤬ޤ</p>
<ul>
<li><samp>C90 6.4 Constant expressions -- Constraint </samp><br>
<li><samp>C99 6.6 Constant expressions -- Constraint</samp><br>
Each constant expression shall evaluate to a constant that is in the range of representable values for its type.<br>
ɾ̤ϡηɽǽͤϰˤǤʤФʤʤ<br>
</ul>
<p>εŬϰϤ餫ǤϤޤʤȤɬפʤȤˤŬѤ뤳ȤϼǤ#if ϤǤʤФʤޤ¾ǼΤ褦ʵ⤢ޤ</p>
<ul>
<li><samp>C90 6.3.5 Multiplicative operators 黻 -- Semantics ̣§</samp><br>
<li><samp>C99 6.5.5 Multiplicative operators -- Semantics</samp><br>
if the value of the second operand is zero, the behavior is undefined.<br>
2ڥɤͤ0ξ硢ư̤Ȥ롣<br>
<br>
<li><samp>C90 6.1.2.5 Types </samp><br>
<li><samp>C99 6.2.5 Types</samp><br>
A computation involving unsigned operands can never overflow,<br>
̵ڥɤޤϡ褷ƥСեʤ<br>
</ul>
<p>0 ˤʤ黻ǤϡɤεŬѤ٤Ǥ礦 ɤβ⤢ꤦ褦˻פޤ</p>
<p>ǤϤ᤹뤳Ȥˤޤ</p>
<blockquote>ᤵȤǤ 0 ˤޤơηϰϤˤޤʤ̤Ȥʤϸ§ȤƿǥåФʤФʤʤ</blockquote>
<p>Ǥ̤ˤʤȤΤϥץδְ㤤ͤ줺ϼ¹ԻǤϤʤѥɾΤʤΤǡ˿ǥåФΤȻפ뤫Ǥޤ0 ˤ㳰ΤԼǤ̵黻η̤ϰϳȤʤˤĤƤϵΤޤŤˤʤΤǡˤϴޤ᤺undefined Ȳ᤹뤳Ȥˤޤ</p>
<p>ISO 9899:1990 / Corrigendum 1 ǤϡViolation of syntax rule or constraint СȤ¾ΤȤ undefined or implementation-defined Ū˵ꤵƤƤ⡢ϤϿǥåФʤФʤʤפȤ꤬ɲäޤ C99 ˤѤƤޤ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C99 5.1.1.3 Diagnostics
</pre>
<h4>e.14.10. 黻η̤ɽǤϰϤˤʤ</h4>
<p>C90 Ǥϡ#if ͤ long / unsigned long ɽǤϰϤˤʤФʤޤ</p>
<p> : 4
ĤΥƥȤ٤ǤǤ 4 ĤǤǤ 2 İʲǤǤʤ 0 </p>
<h3><a name="3.4.15" href="#toc.3.4.15">3.4.15. #ifdef, #ifndef</a></h3>
<p>n.15 #ifdef, #ifndef ˴ؤƥȤǤ K&R 1st. Ǥ Standard C ǤޤäƱǤe.15 Ϥ violation of syntax rule ΥƥȤǤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Syntax ʸ§
C90 6.8.1 Conditional inclusion դ
C99 6.10 Preprocessing directives -- Syntax
C99 6.10.1 Conditional inclusion
</pre>
<h4>n.15.1. #ifdef ˤޥΥƥ</h4>
<p> : 6</p>
<h4>n.15.2. #ifndef ˤޥΥƥ</h4>
<p> : 6</p>
<h4>e.15.3. ̻ҤǤʤ</h4>
<p>#ifdef, #ifndef Ԥΰ identifier ǤʤФʤޤ</p>
<p> : 2</p>
<h4>e.15.4. ;פʰ</h4>
<p>#ifdef, #ifndef Ԥΰ identifier ʳ;פʥȡäƤϤޤ</p>
<p> : 2</p>
<h4>e.15.5. ʤ</h4>
<p>ʤΤ⡢ violation of syntax rule Ǥ</p>
<p> : 2</p>
<h3><a name="3.4.16" href="#toc.3.4.16">3.4.16. #else, #endif Υ顼</a></h3>
<p> #else, #endif violation of syntax rule ΥƥȤǤ
syntax K&R 1st. ѤäƤޤʤviolation of syntax rule or constraint ФƿǥåФʤФʤʤȤΤϡC90 ǽƵꤵ줿ȤǤˡ*1</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Syntax ʸ§
C99 6.10 Preprocessing directives -- Syntax
</pre>
<h4>e.16.1. #else ;פʥȡ</h4>
<p>#else ιԤˤ¾Τɤʥȡ⤢äƤϤޤ</p>
<p> : 2</p>
<h4>e.16.2. #endif ;פʥȡ</h4>
<p>#endif ιԤˤ¾ΤɤʥȡäƤ⤤ޤ</p>
<pre style="color:navy">
#if MACRO
#else ! MACRO
#endif MACRO
</pre>
<p>ǤϤʤ</p>
<pre style="color:navy">
#if MACRO
#else /* ! MACRO */
#endif /* MACRO */
</pre>
<p>Ƚޤ礦</p>
<p> : 2</p>
<h3><a name="3.4.17" href="#toc.3.4.17">3.4.17. #if, #elif, #else, #endif бطΥ顼</a></h3>
<p> #if (#ifdef, #ifndef), #elif, #else, #endif б˴ؤ violation of syntax rule ΥƥȤǤ syntax ۤ K&R 1st. ƱǤ#elif C90 ǿä줿ΤǤޤбϥեñ̤ΩäƤʤФʤʤȤϡK&R 1st. ǤΤǤϤʤäȤǤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Syntax ʸ§
C99 6.10 Preprocessing directives -- Syntax
</pre>
<h4>e.17.1. #if Τʤ #endif</h4>
<p>Ԥ #if ʤΤ #endif ФƤΤϡ violation of syntax rule Ǥ</p>
<p> : 2</p>
<h4>e.17.2. #if Τʤ #else</h4>
<p>б #if Τʤ #else ְ㤤Ǥ</p>
<p> : 2</p>
<h4>e.17.3. #else θˤޤ #else</h4>
<p>#else θˤޤ #else ФƤΤ⡢ޤ</p>
<p> : 2</p>
<h4>e.17.4. #else θ #elif</h4>
<p>#else θ #elif ФƤƤ⤤ޤ</p>
<p> : 2</p>
<h4>e.17.5. 롼ɤ줿ե #if Τʤ #endif</h4>
<p>#if, #else, #endif ϥեpreprocessing fileñ̤бȤƤʤФʤޤ롼ɤ줿ե뤬ᤫ鸵եˤäΤ褦˰ȽбȤ롢ȤΤǤϥǤ</p>
<p> : 2</p>
<h4>e.17.6. 롼ɤ줿ե #endif Τʤ #if</h4>
<p> : 2</p>
<h4>e.17.7. #endif Τʤ #if</h4>
<p>#endif ˺뤳Ȥϼºݤˤ褯ޤϤϤФƿǥåФʤФʤޤ</p>
<p> : 2</p>
<h3><a name="3.4.18" href="#toc.3.4.18">3.4.18. #define</a></h3>
<p>#define syntax K&R 1st. Ф C90 Ǥ #, ## 黻ҤɲäޤȤѤäƤޤ*1<br>
C99 ǤϤ˲Ѱޥɲäޤ<a href=#2.8>2.8</a> ȡˡ*2</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Syntax ʸ§
C90 6.8.3 Macro replacement ޥִ
*2 C99 6.10 Preprocessing directives -- Syntax
C99 6.10.3 Macro replacement
</pre>
<h4>n.18.1. Object-like ޥ</h4>
<p>#define ԤκǽΥȡϥޥ̾Ǥľ white spaces ȡ裲Υȡ ( ǤäƤ⡢ִꥹȤγϤȤߤʤ졢function-like ޥȤϤߤʤޤޤޥ̾θ˲ȡʤСΥޥϣĤΥȡޤ</p>
<p> : 30ĤΥޥΤΣĤǤʤ 10 </p>
<h4>n.18.2. Function-like ޥ</h4>
<p>ޥ̾ľ white spaces Ϥޤ ( ȡ function-like ޥΥѥꥹȤγϤȤߤʤޤε K&R 1st. ΤΤǡwhite spaces ̵ͭ˺ character-oriented ʥץץκפĤäƤޤޤȤʤäƤϤɤ褦⤢ޤ</p>
<p> : 20</p>
<h4>n.18.3. ʸƥִоݤˤʤʤ</h4>
<p> "Reiser" model ΥץץåǤϡִꥹʸƥޤʸ˥ѥƱʬȡʬޥŸˤäư֤ޤ Standard C ϤK&R 1st. ǤǧƤʤäΤǤִ character-oriented ʥץץħ褯ͤǤtoken-oriented ʥץץǤǤ</p>
<p> : 10</p>
<h4>n.vargs. Ѹİޥ</h4>
<p>C99 ǤϲѸİޥƳޤ</p>
<p> : 10
</p>
<h4>e.18.4. ̾ʤ</h4>
<p>#define ԤκǽΥȡϤ identifier ǤʤФʤޤ</p>
<p> : 2
</p>
<h4>e.18.5. ʤ</h4>
<p>#define Ԥ˥ȡĤʤΤ violation of syntax rule Ǥ</p>
<p> : 2
</p>
<h4>e.18.6. Υѥ</h4>
<p>Υѥ violation of syntax rule Ǥ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 6.5.4 Declarators -- Syntax ʸ§
C99 6.7.5 Declarators -- Syntax
</pre>
<h4>e.18.7. ѥ̾νʣ</h4>
<p>ĤΥޥΥѥꥹȤƱѥ̾ʣΤ violation of constraint Ǥ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Constraints
C99 6.10.3 Macro replacement -- Constraints
</pre>
<h4>e.18.8. ѥ̻ҤǤϤʤ</h4>
<p>ޥΥѥ identifier ǤʤФʤޤ *1</p>
<p> : 2</p>
<p>:</p>
<p>*1 C99 Ǥ ... Ȥѥɲä줿ִꥹ __VA_ARGS__ Ϥбüʥѥ̾Ǥ롣</p>
<h4>e.18.9. ޥִ̾ꥹȤüȤ߹碌</h4>
<p>Standard C Ǥ identifier ʸȤ $ ǧƤޤǧϤŪ¸ߤƤޤΥץϤϤǥѥ뤵륽˸ΤΤǤ Standard C Ǥ $ ʸǣĤ pp-token ȲᤵΤǡޥ̾ THIS $ ʹߤ object-like ޥִꥹȤȤʤꡢTHIS$AND$THAT Ȥ̾ function-like ޥȤץΰտޤȤϤޤää̤ˤʤޤ<br>
ISO 9899:1990 Corrigendum 1 Ǥϡ˴ؤ㳰Ū꤬ɲäޤФƤ Standard C νϤϿǥåФʤФʤʤΤǤ*1<br>
C99 ǤϤäơ̤ object-like macro Ǥϡޥִ̾ꥹȤδ֤ white spaces ʤФʤʤȤޤ*2</p>
<p> : 2</p>
<p>:</p>
<p>*1 Corrigendum 1 ˤ C90 6.8 Constraints ؤɲá<br>
C++ Standard ǤϤεϾäƤ롣</p>
<pre>
*2 C99 6.10.3 Macro replacement -- Constraints
</pre>
<h4>e.vargs1. ִꥹȤǤϤʤȤ __VA_ARGS__</h4>
<p>C99 βѰޥǤϡޥΥѥꥹ ... бѥȤִꥹǤ __VA_ARGS__ Ȥޤ identifier ϤʳΤȤ˻ȤäƤϤޤ</p>
<p> : 2ĤΥץǤǤ 2 ĤǤ 0 </p>
<h3><a name="3.4.19" href="#toc.3.4.19">3.4.19. ޥκ</a></h3>
<p>ޥκˤĤƤ K&R 1st. ǤϲƤ餺ޤޤǤStandard C ǤϡƱϵ뤬ۤʤǧʤȤˤʤޤޥϻ¾塢ʤȤˤʤޤ#undef Ǥääʤ¤ˡ*1, *2</p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Constraints
C99 6.10.3 Macro replacement -- Constraints
</pre>
<p>*2 ˥ФǺǧϤ¿<b>mcpp</b> ¸νϤȤθߴΤᡢV.2.4 Ϥ</p>
<h4>n.19.1. ִꥹȤ white spaces ΰ㤤</h4>
<p>White spaces οäƤϵޤ</p>
<p> :4</p>
<h4>n.19.2. ѥꥹ white spaces ΰ㤤ȹԤޤ white spaces ΰ㤤</h4>
<p>White spaces ˤϡ<backslash><newline> sequence 䥳ȤˤäƥԤޤΤޤޤޤ</p>
<p> : 4</p>
<h4>e.19.3. ִꥹȤΥȡ㤦</h4>
<p>ִꥹȤΥȡۤʤ violation of constraint Ǥ</p>
<p> : 4</p>
<h4>e.19.4. ִꥹ white space ̵ͭ㤦</h4>
<p>ִꥹ white space ̵ͭۤʤ violation of constraint Ǥˤ character-oriented ʥץץοĤäƤޤ</p>
<p> : 4</p>
<h4>e.19.5. ѥλȤ㤦</h4>
<p>ѥλȤΰ㤦ϼ¼ŪˤۤʤʤΤǡviolation of constraint Ǥ</p>
<p> : 4</p>
<h4>e.19.6. ѥ̾㤦</h4>
<p>ѥ̾㤦μ¼ŪƱ violation of constraint Ȥʤޤ constraint Ȼפޤ</p>
<p> : 2</p>
<h4>e.19.7. Function-like, object-like ޥ̾ζ</h4>
<p>ޥ̾ϰĤ֤̾°Τǡfunction-like ޥ object-like ޥȤƱ̾ȤȤϤǤޤ</p>
<p> : 2</p>
<h3><a name="3.4.20" href="#toc.3.4.20">3.4.20. Keyword Ʊ̾Υޥ</a></h3>
<p>ץץǤ keyword ¸ߤʤΤǡkeyword Ʊ̾ identifier ޥȤŸ뤳ȤǤޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.1 Lexical elements -- Syntax ʸ§
C99 6.4 Lexical elements -- Syntax
C89 Rationale 3.8.3 (C99 Rationale 6.10.3) Macro replacement
</pre>
<h4>n.20.1. ̾Ϥ٤ŸоݤȤʤ</h4>
<p> : 6</p>
<h3><a name="3.4.21" href="#toc.3.4.21">3.4.21. Pp-token ʬΥפޥŸ</a></h3>
<p>ե pp-token ؤʬ translation phase 3 ǹԤޤ
ơΤȤʣ pp-token Ĥ pp-token Ϣ뤵ȤΤϡ## 黻ҤȤä줿ޥŸϢ뤵硢# 黻ҤȤä줿ޥŸʸ硢ܤʸƥ뤬Ϣ뤵礷ꤵƤޤäơʣ pp-token ۤΤϢ뤵뤳ȤϡäƤϤʤʤȤȲᤵޤ token-oriented ʥץץθ§餹ȡΤȤǤ*1</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C90 6.8.3 Macro replacement ޥִ
C99 5.1.1.2 Translation phases
C99 6.10.3 Macro replacement
</pre>
<h4>n.21.1. Pp-token ۤΤϢ뤵뤳ȤϤʤ</h4>
<p>ץץΩץǹԤϡΥץνϤΣĤ - Ĥ̡ pp-token Ǥ뤳ȤѥΤˤ狼褦ˡ餫 token separator ʬΥϤɬפޤ</p>
<p> : 4</p>
<h4>n.21.2. ޥΥޥʬΥ</h4>
<p>ޥΰ˥ޥä⡢Ÿִ̤ꥹ pp-token ȤäĤƤޤäƤϤޤ</p>
<p> : 2</p>
<h3><a name="3.4.22" href="#toc.3.4.22">3.4.22. Pp-number Υޥ sequence</a></h3>
<p>Preprocessing-number Standard C ǽƵꤵ줿ΤǤ
ȡưȡ碌ΤϰϤidentifier ʬޤळȤ⤢ޤץץǤ tokenization ñˤ뤿˵ꤵ줿ΤǤޥʬ pp-number 硢ñ tokenization ̤ˤʤȡְ㤤ޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.1.8 Preprocessing numbers
C99 6.4.8 Preprocessing numbers
</pre>
<h4>n.22.1. Pp-number Υޥ sequenceΣ</h4>
<p>12E+EXP Ȥ sequence ϣĤ pp-number ʤΤǡȤ EXP ȤޥƤƤ⡢Ÿ뤳ȤϤޤ</p>
<p> : 4</p>
<h4>n.22.2. Pp-number Υޥ sequenceΣ</h4>
<p>Pp-number digit ޤ . ǻϤޤޤ
</p>
<p> : 2</p>
<h4>n.22.3. Pp-number γΥޥŸ</h4>
<p>C90 Ǥϡ+ ޤ - E ޤ e ˤ³ pp-number ˸뤳ȤǤޤ12+EXP 12E+EXP Ȱ㤤12 + EXP ȤĤ pp-token ʬޤϤ줾 pp-number, operator, identifier ǤEXP ޥǤСŸޤ</p>
<p> : 2</p>
<h4>n.ppnum [Pp][+-] sequence</h4>
<p>C99 Ǥϡưʤɽ뤿ˡpp-number P ޤ p + ޤ - ³ sequence ɲäޤ<br>
ʤprintf() ưʤɽˤ %a, %A Ȥ conversion specifier Ȥޤ*1</p>
<p> : 4</p>
<p>:</p>
<pre>
*1 C99 7.19.6.1 The fprintf function -- Description
</pre>
<h3><a name="3.4.23" href="#toc.3.4.23">3.4.23. ## 黻ҤȤäޥ</a></h3>
<p>## C90 ǿ줿黻Ҥǡ#define ԤִꥹǤȤޤ## pp-token ϥޥŸϢ뤵ƣĤ pp-token Ȥʤޤ## pp-token ѥξϡޥŸ˼°֤ƤϢ뤵ޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.3.3 The ## operator ##黻
C99 6.10.3.3 The ## operator
</pre>
<h4>n.23.1. ȡϢ</h4>
<p>## 黻ҤȤäǤñ function-like ޥǤ</p>
<p> : 6</p>
<h4>n.23.2. Pp-number </h4>
<p>## 黻Ҥ operand ϥޥŸʤΤǡ xglue() Τ褦ˤ⤦Ĥΰ츫̣ʤʥޥ֤ƻȤȤФйԤޤϰΥޥŸƤϢ뤹뤿ǤΥץΥޥƤӽФ줿 12e+2 Ȥ sequence ͭ pp-number Ǥ</p>
<p> : 2</p>
<h4>e.23.3. ## ˥ȡʤobject-like ޥ</h4>
<p>ִꥹ ## 黻Ҥˤɬ pp-token ʤФʤޤ object-like ޥǤObject-like ޥ ## ȤȤ̵̣ǤǤϥ顼ǤϤޤ</p>
<p> : 2</p>
<h4>e.23.4. ## ˥ȡʤfunction-like ޥ</h4>
<p> function-like ޥִꥹ ## 黻Ҥ pp-token ΤʤǤ</p>
<p> : 2</p>
<h3><a name="3.4.24" href="#toc.3.4.24">3.4.24. # 黻ҤȤäޥ</a></h3>
<p># 黻Ҥ C90 Ƴ줿ΤǤFunction-like ޥ #define ԤִꥹȤǤȤޤ# 黻Ҥ operand ϥѥǡΥޥŸб°ʸƥѴޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.3.2 The # operator #黻
C99 6.10.3.2 The # operator
</pre>
<h4>n.24.1. ʸ</h4>
<p># 黻Ҥ operand бξü " " ǰϤޤʸޤ</p>
<p> : 6"a + b" ȥȡ֤ space Τ 2 </p>
<h4>n.24.2. ȡ֤ white spaces ΰ</h4>
<p># 黻Ҥ operand бʣ pp-token sequence ΩäƤϡ pp-token ֤ white spaces a space ѴƤʸ졢white spaces ʤ space ޤʤwhite spaces οˤϱƶʤΤΡ̵ͭˤäƷ̤äƤޤʤ character-oriented ʥץץοĤäƤˡ white spaces Ϻޤ</p>
<p> : 4</p>
<h4>n.24.3. \ </h4>
<p># 黻Ҥ operand бʸƥޤʸϡˤ \, " ʸƥϤ " ʸľ \ ޤʸƥʸΤޤޤηɽ뤿ʸƥˡƱǤ</p>
<p> : 6</p>
<h4>n.24.4. <backslash><newline> ޤޥƤӽФ</h4>
<p><backslash><newline> sequence translation phase 2 Ǻޤ顢ޥŸˤϻĤäƤޤ</p>
<p> : 2</p>
<h4>n.24.5. ޥŸη̤ token separator Ĥʤ</h4>
<p>̤˥ޥŸǤϤη̤ pp-token ȤäĤƤޤʤ褦˲餫 token-separator 뤳ȤԤޤ<a href="#3.4.21">3.4.21</a> ȡˡޥŸη̤ʸϡϺʤФʤޤ<br>
ʤ token-based ʽ§Ȥʤ character-oriented ʬäƤ뤿ˡ䤳꤬ȯޤ</p>
<p> : 2</p>
<h4>e.24.6. # 黻Ҥ operand ѥ̾Ǥʤ</h4>
<p># 黻Ҥ operand ϥѥ̾ǤʤФʤޤ</p>
<p> : 2</p>
<h3><a name="3.4.25" href="#toc.3.4.25">3.4.25. ޥΥޥŸ</a></h3>
<p>Function-like ޥθƤӽФ˺ݤơ˥ޥޤޤƤˤŸ뤫ˤĤƤϡK&R 1st. ǤϿƤޤǤPre-C90 νϤǤμޤޤä褦ǤִꥹȤκŸΤ¿ä⤷ޤStandard C ǤϤϡƱꤷȡѥ֤ŸȵꤵޤؿƤӽФǤΰɾƱͤνǡ狼䤹ʤޤ #, ## 黻Ҥ operand ǤѥбΤξϡ˥ޥ̾ޤޤƤƤ⡢ϥޥƤӽФȤϤߤʤ줺Ÿޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.3.1 Argument substitution °ִ
C99 6.10.3.1 Argument substitution
</pre>
<h4>n.25.1. ΥޥŸ</h4>
<p>ΥޥϡƱꤵ줿ȤŸ졢줫ִꥹΥѥ֤ޤäơĤΰȤƱꤵ줿ΤϡȤŸʣΰΤ褦ʷˤʤäƤ⣱ĤΰǤ</p>
<p> : 4</p>
<h4>n.25.2. ĤΥȡŸ</h4>
<p>ƱͤˡŸȣĤΥȡˤʤäƤޤ⡢ˡŪʤΤǤ</p>
<p> : 2</p>
<h4>n.25.3. ## 黻ҤȤޥǸƤӽФ</h4>
<p>## 黻Ҥ operand ѥξ硢бϥޥŸʤΤǡޥŸϤ⤦ĤΥޥͥȤɬפޤ<br>
Ǥϡxglue() ## 黻ҤȤäƤʤΤǡΰǤ glue( a, b) ϥޥŸ ab Ȥʤꡢxglue() ִꥹȤ glue( ab, c) Ȥʤޤ줬 abc ǽ̤Ȥʤޤ</p>
<p> : 2</p>
<h4>n.25.4. ## 黻Ҥ operand Ÿʤ</h4>
<p> glue() ľܸƤӽФƤΤǡΰ˥ޥ̾äƤŸޤ</p>
<p> : 6</p>
<h4>n.25.5. # 黻Ҥ operand Ÿʤ</h4>
<p># 黻Ҥ operand Ǥѥб⡢ޥŸޤ</p>
<p> : 4</p>
<h4>e.25.6. ΥޥŸϰϤǴ뤷ʤ</h4>
<p>ΥޥŸϤΰǹԤޤ뤷ʤޥ violation of constraint ǤFunction-like ޥ̾ϤǤϥޥƤӽФǤϤޤ ( ³ȡ줬ޥƤӽФ sequence γϤȤʤޤϤ줿Ǹ塢 ( б ) ʤФʤޤ*1</p>
<p> : 4</p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Constraint
C99 6.10.3 Macro replacement -- Constraints
</pre>
<h3><a name="3.4.26" href="#toc.3.4.26">3.4.26. ޥƱ̾ޥ</a></h3>
<p>ޥƵŪˤʤäƤ硢ΥޥΤޤŸƤ椯̵ºƵˤʤäƤޤޤΤᡢK&R 1st. ǤϺƵŪʥޥȤȤǤޤǤStandard C Ǥ̵ºƵɤʤƵŪޥŸǽˤ뤿ᡢִޥ̾ϺִʤȤ꤬ߤޤεϤʤǤΤ褦˥ѥե졼Ǥޤ*1</p>
<ol>
<li>ޥ A ִꥹȤκˤޤ A Ȥ̾ĤäƤ⡢Ϻִʤ<br>
<li>ޥ A ִꥹ˥ޥ B θƤӽФꡢޥ B ִ A Ȥ̾ФƤͥȤ줿ִξ⡢ A Ϻִʤ<br>
<li>ޥ B ִǸΥޥ A ִꥹȤθΥȡޤ줿ϡμޤ줿ʬˤ A ִ롣ִΤϡ A ʲ餫ΥޥִꥹǤϤʤ˥ˤ˸¤롣<br>
<li>ޥ B ִˤĤƤ⡢飳ƵŪŬѤ롣ʤޥ B ִˤޤ B 졢줬 B ִꥹȤθΥΥȡˤΤǤʤС B Ϻִʤ<br>
<li>Υޥ A θƤӽФΰ˥ޥ C θƤӽФꡢִ˸줿 C 飳ŬѤƺִػߤ줿硢 C ϸΥޥ A ִꥹȤκǤִʤ<br>
</ol>
<p>ѥե졼ƤޤǤȤˣϡ³ΥȡμߤȤŪʥޥͤͳ褹Τǡ줬̵ѤѻˤƤޤˤĤƤϵʤ corrigendum ФꤷƤƤޤ餬Ǥޤ³ȡˤȤǤʤȤŸˡѤȤΤ⡢ΤʤͤǤ*2</p>
<p>³ȡޥŸȤΤ۾ʤΤǤˡʬˤäִػߤ줿ޥٸȤΤŤ˰۾ʥǤ Validation Suite ǤϡŤ˰۾ʥޥˤĤƤΥƥȹܤ n.27.6 ޤָ³ȡμߡפȤޥŸΰ۾ʵ꤬뤳ȤԤȻפޤ*3</p>
<p>:</p>
<pre>
*1 C90 6.8.3.4 Rescanning and further replacement Ⱥִ
C99 6.10.3.4 Rescanning and further replacement
</pre>
<p>*2 <a href="#2.7.6">2.7.6</a> ȡ</p>
<p>*3 ƵŪޥŸ˴ؤ뵬ʤλͤˤĤƤϡˣ̤βꡢ newsgroup comp.std.c 褬ԤƤ롣recurs.t ϤǺΣĤǤ롣recurs.t ΥȤȤ줿ΥץɾоݤȤϤʤ</p>
<p><b>mcpp</b> Standard ⡼ɤǤϡƵŪޥŸˤĤƤĤˡƤ롣ǥեȤǤƱ̾ޥִػߤϰϤ嵭 1-5 ΤȤ깭ȤꡢΥץ NIL(42) Ÿ롣-@compat ץꤹȺִػߤϰϤȤꡢ42 Ÿ롣λͤΰ㤤ФƤΤϡ嵭 3 Ǵؿޥ A θƤӽФȾʬ B ִꥹ˸Ǥ롣ǥեȤǤϡA ̾ B ִꥹ˸줿 A κִػߤ뤬-@compat ץǤϡA ̾ǤʤꥹȤȤϤ '(' ')' Τ٤Ƥ B ִꥹ˸줿ִػߤ롣ޤA ̾ˤ뤫ɤǶ̤ʤ</p>
<h4>n.26.1. ľܺƵ object-like ޥϺŸʤ</h4>
<p> object-like ޥľܺƵǤ</p>
<p> : 2</p>
<h4>n.26.2. ܺƵ object-like ޥŸʤ</h4>
<p>Object-like ޥδܺƵǤ</p>
<p> : 2</p>
<h4>n.26.3. ľܺƵ function-like ޥŸʤ</h4>
<p>Function-like ޥľܺƵǤ</p>
<p> : 2</p>
<h4>n.26.4. ܺƵ function-like ޥŸʤ</h4>
<p>Function-like ޥδܺƵǤ</p>
<p> : 2</p>
<h4>n.26.5. κƵŪޥ</h4>
<p>Standard C ˤϡְٺִػߤ줿ޥϡ̤ʸ̮ǺƤִʤפȤ̣ʵ꤬ޤŪˤ˳ΤϰΥޥοƥޥΰǤ˺ƵŪޥäϡ٤ִޤϿƥޥκǤִޤ</p>
<p> : 2</p>
<h3><a name="3.4.27" href="#toc.3.4.27">3.4.27. ޥκ</a></h3>
<p>ޥִꥹȤΤ K&R 1st. λͤǤȯ줿ޥϺƵŪޥǤʤ¤ꡢִޤˤäơͥȤ줿ޥޤStandard C Ǥäѹä櫓ǤϤޤK&R 1st. ǤΤǤʤäȤ餫ΤˤʤäƤޤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.3.4 Rescanning and further replacement Ⱥִ
C99 6.10.3.4 Rescanning and further replacement
</pre>
<h4>n.27.1. Object-like ޥΥͥ</h4>
<p> K&R 1st. ǤƱǤ</p>
<p> : 6</p>
<h4>n.27.2. Function-like ޥΥͥ</h4>
<p> K&R 1st. ǤƱǤ</p>
<p> : 4</p>
<h4>n.27.3. ## 黻Ҥ줿̾ŸоݤȤʤ</h4>
<p>## 黻Ҥ operand бϥޥŸޤpp-token Ϣˤä줿 pp-token ϡ˥ޥŸоݤȤʤޤ</p>
<p> : 2</p>
<h4>n.27.4. ִꥹ˷줿 function-like ޥ</h4>
<p>Function-like ޥ̾ФƤƤ⡢ ( ³ƤʤϡϥޥƤӽФȤϤߤʤޤ function-like ޥ̾졢ִꥹˤ̾Ȥä function-like ޥθƤӽФȡŸޤ</p>
<p> : 4</p>
<h4>n.27.5. Function-like ޥȾִꥹ</h4>
<p>ִꥹȤ function-like ޥθƤӽФȾȤ۾ʥޥϡpre-Standard ǤϰۤλͤǤStandard C ǤϸǧƤޤޤִꥹȤθ pp-token ޤơޥƤӽФ뤷ޤ</p>
<p> : 2</p>
<h4>n.27.6. ִƱ̾ޥ</h4>
<p>Ǥϰ̤Ʊ̾ΥޥϺִޤִ⤢ޤͥȤ줿ޥƤӽФǺִꥹȤθΥ pp-token ߡƱ̾ޥȤ۾ʾǤ<a href=#3.4.26>3.4.26</a> ȡˡ</p>
<p> : 2</p>
<h4>e.27.7. ˰οʤ</h4>
<p>Function-like ޥθƤӽФǤϰοѥοȰפƤʤФʤޤִꥹȤκȯ줿 function-like ޥǤ⡢ƱͤǤ , ǶڤΤʤΤǡȥåʥޥǤϰοľŪˤ狼ˤȤޤ</p>
<p> : 2</p>
<h3><a name="3.4.28" href="#toc.3.4.28">3.4.28. ޥ</a></h3>
<p>C90 ǤϣĤüʥޥϤ뤳Ȥˤʤޤ*1<br>
C90 / Amendment 1 Ǥϡ<tt>__STDC_VERSION__</tt> Ȥޥɲäޤ<br>
<tt>__FILE__</tt>, <tt>__LINE__</tt> ưŪѲƤ椯üʥޥǤassert() ޥǥХåѥġǤλȤƻޤ¾ɸޥϣĤ translation unit νѲޤ</p>
<p>:</p>
<pre>
*1 C90 6.8.8 Predefined macro names 餫줿ޥ̾
*2 C99 6.10.8 Predefined macro names
</pre>
<h4>n.28.1. __FILE__</h4>
<p>ץץΥե̾ɽʸƥޤ
#include ˤäƼޤ줿եǤϤΥե̾ˤʤΤǡƱ translation unit ǤѲޤ</p>
<p> : 4"n_28.t" ȤʸƥǤʤ n_28.t Ȥäñʤ̾ˤʤΤ 0 </p>
<h4>n.28.2. __LINE__</h4>
<p>ץץΥեιֹɽޤֹϣϤޤޤֹʪԤֹǤ</p>
<p> : 4ֹ椬 0 ϤޤΤ 2 </p>
<h4>n.28.3. __DATE__</h4>
<p>ץץιԤƤդɽʸƥޤ
asctime() ؿΤȤۤƱ "Mmm dd yyyy" ηǤ 10 ̤ξ dd Σܤ 0 ǤϤʤ space ˤʤȤäƤޤ</p>
<p> : 410 ̤ξ dd Σܤ 0 ȤʤΤ 2 </p>
<h4>n.28.4. __TIME__</h4>
<p>ץץιԤƤɽʸƥޤasctime() ؿΤƱ "hh:mm:ss" ηǤ</p>
<p> : 4</p>
<h4>n.28.5. __STDC__</h4>
<p>C90, C99 νϤǤ 1 ޤ</p>
<p> : 4</p>
<h4>n.28.6. __STDC_VERSION__</h4>
<p>C90 / Amendment 1:1995 бϤǤϡ줬 199409L ޤ*1</p>
<p> : 4</p>
<p>:</p>
<pre>
*1 Amendment 1 / 3.3 Version macroISO 9899:1990 / 6.8.8 ؤɲá
</pre>
<h4>n.stdmac. C99 λޥ</h4>
<p>C99 Ǥ <tt>__STDC_VERSION__</tt> ͤ 199901L Ǥ
<br>
ޤ<tt>__STDC_HOSTED__</tt> Ȥޥɲäޤ
ϽϤ hosted implementation Ǥ 1 ˡǤʤ 0 ޤ</p>
<p> : 4 2 </p>
<h4>n.28.7. 롼ɤ줿ե __LINE__ </h4>
<p><tt>__FILE__</tt>, <tt>__LINE__</tt> translation unit ǤϤʤեоݤȤΤǡinclude 줿ǤϤ include ե̾ȹֹˤʤޤ</p>
<p> : 4ֹ椬 0 ϤޤΤ 2 </p>
<h3><a name="3.4.29" href="#toc.3.4.29">3.4.29. #undef</a></h3>
<p>#undef K&R 1st. Τǡ礭ѲϤޤꤵ줿ޥäޤޥƱ translation unit ǡ#define Ƥ #undef ǼäޤǤδ֤ͭϰϤǤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.3.5 Scope of macro definitions ޥͭϰ
C99 6.10.3.5 Scope of macro definitions
</pre>
<h4>n.29.1. #undef ˤޥμä</h4>
<p>#undef 줿ǤϤΥޥ̾ϤϤޥǤϤޤ</p>
<p> : 10</p>
<h4>n.29.2. Ƥʤޥ #undef</h4>
<p>ޥȤƤʤ̾ #undef 뤳ȤϵƤޤ
ϤϤ顼ˤƤϤޤ</p>
<p> : 4 </p>
<h4>e.29.3. ̾ʤ</h4>
<p>#undef Ԥˤ identifier ɬפǤ</p>
<p> : 2</p>
<h4>e.29.4. ;פʥȡ</h4>
<p>#undef ԤˤϣĤ identifier ʳΤΤäƤϤޤ</p>
<p> : 2</p>
<h4>e.29.5. ʤ</h4>
<p>#undef Ԥ˰ʤΤ violation of syntax rule Ǥ</p>
<p> : 2</p>
<h3><a name="3.4.30" href="#toc.3.4.30">3.4.30. ޥƤӽФ</a></h3>
<p>ޥƤӽФ˺ݤƤϡԤñʤ white spaces ΣĤȤưޤ
äơޥƤӽФʣιԤˤޤ뤳ȤǤޤ K&R 1st. ǤΤǤϤޤǤ*1<br>
ؿͥޥƤӽФΰȤΤ , Ƕڤ줿ΤǤ( ) ΥڥäƤ , ϰڤΤȤϤߤʤޤΤȤϤǤľܤϥƥȤޤn.25. ᡢǰۤΤ˥ƥȤƤޤޤ*.c Υץ¿ assert() ޥȤäƤΤǡ˴ؤƤϤʤʣʥƥȤ뤳Ȥˤʤޤ</p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Semantics ̣§
C99 6.10.3 Macro replacement -- Semantics
</pre>
<h4>n.30.1. ޥƤӽФʣԤˤޤ뤳ȤǤ</h4>
<p> : 6</p>
<h4>n.nularg. ޥƤӽФΥ</h4>
<p>C99 ǤϥޥƤӽФǥǧޤ
ϰβᾯȤϰۤʤޤʬΥ ',' ϾάǤޤʥѥĤξϤξԤ̤Ǥʤˡ</p>
<p> : 6</p>
<h3><a name="3.4.31" href="#toc.3.4.31">3.4.31. ޥƤӽФΥ顼</a></h3>
<p>ϥޥƤӽФΤĤΥ顼Ǥ</p>
<h4>e.31.1. ¿</h4>
<p>οѥοȰäƤΤ violation of constraint ǤUndefined ǤϤޤ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Constraint
C99 6.10.3 Macro replacement -- Constraints
</pre>
<h4>e.31.2. ʤ</h4>
<p>οѥο꾯ʤΤ violation of constraint Ǥ<br>
C99 Ǥϥǧޤ
ϰβᾮȤϰۤʤޤʬΥ ',' ǡƤƤϤޤ</p>
<p> : 2</p>
<h4>e.31.3. ǥ쥯ƥֹԤǴ뤷ʤޥƤӽФ</h4>
<p>̤ˤϥޥƤӽФʣιԤˤޤ뤳ȤǤޤ# ǻϤޤ preprocessing directive line ϤιԡʥȤ a space ѴιԡˤǴ뤹ΤǡˤޥƤӽФ⤽ιԤǴ뤷ƤʤФʤޤ</p>
<p> : 2</p>
<h4>e.vargs2. Ѱޥΰʤ</h4>
<p>C99 βѰޥǤ __VA_ARGS__ б°ϡʤȤ⣱ĤɬפǤ</p>
<p> : 2</p>
<h3><a name="3.4.32" href="#toc.3.4.32">3.4.32. #if ʸ</a></h3>
<p>#if ǤʸȤȤǤޤɾϤۤȤ implementation-defined ǡݡӥƥϤޤꤢޤ32.? ǤϺǤñʣХȤʸsingle-byte character constantˤ夲ޤ*1<br>
Validation Suite i_* ΥץϤ٤ơ#if ǤδʸåȤ ASCII Ǥ뤳ȤȤƤޤ</p>
<p>:</p>
<pre>
*1 C90 6.1.3.4 Character constants ʸ
C90 6.8.1 Conditional inclusion դ -- Semantics ̣§
C99 6.4.4.4 Character constants
C99 6.10.1 Conditional inclusion -- Semantics
</pre>
<p>ʲ33, 34, 35 ΥƥȤŵƱǤ롣</p>
<h4>n.32.1. Character octal escape sequence</h4>
<p>ʸǤϣ escape sequence ȤȤǤޤ
˴ؤƤϤɤνϤǤƱǡimplementation-defined ʬϤޤ</p>
<p> : 2</p>
<h4>n.32.2. Character hexadecimal escape sequence</h4>
<p>ʸǤϣ escape sequence ȤȤǤޤ
implementation-defined ʬϤޤ escape sequence K&R 1st. ˤϤʤäΤǤ</p>
<p> : 2</p>
<h4>i.32.3. Single-byte character constant</h4>
<p>Escape sequence ǤϤʤХȤʸñʤΤǤʸåȤˤäͤۤʤޤѥȼ¹ԻȤǴʸåȤ㤦ѥǤϡ#if ɾǤϤΤɤȤäƤ⤫ޤʤȤˤʤäƤޤ<br>
ޤƱʸåȤǤäƤ⡢ΰ implementation-defined ǡ⥳ѥΡtranslation phase 7ˤȥץץphase 4ˤȤǰۤʤäƤƤ⤫ޤʤȤˤʤäƤޤ<br>
äơ#if ʸͤƴʸåȤȽꤹ뤳ȤϡݾڤƤˡǤϤޤ</p>
<p> : 2</p>
<h4>i.32.4. '\a', '\v'</h4>
<p>Standard C Ǥ '\a', '\v' Ȥ escape sequence ɲäޤ</p>
<p> : 2</p>
<h4>e.32.5. Escape sequence ͤ unsigned char ϰϳ</h4>
<p>ʸΣĤ escape sequence ϣĤ single-byte character ͤɽΤʤΤǡunsigned char ϰϤˤʤФʤޤ</p>
<p> : 2</p>
<h3><a name="3.4.33" href="#toc.3.4.33">3.4.33. #if Υ磻ʸ</a></h3>
<p>磻ʸ Standard C ǿߤ줿ΤǤ
ͤɾ single-byte character constant ˤ implementation-defined ǡХȤɾƤޤ<br>
磻ʸˤϳƼ encoding ޤ <a href="#4.1">4.1</a> ǤȤꤢޤ
Ǥ ASCII ʸб磻ʸȤꤢޤ</p>
<h4>e.33.2. 磻ʸͤϰϳ</h4>
<p>磻ʸǤ⣱ʤޤϣʤ escape sequence Ȥޤͤϥ磻ʸͤʤɽϰϤˤʤФʤޤ</p>
<p> : 2</p>
<h3><a name="3.4.35" href="#toc.3.4.35">3.4.35. #if multi-character ʸ</a></h3>
<p>ʸˤ multi-character character constant ȤΤ⤢ޤMulti-byte character constant ʶ路ѸǤ̤γǰǡʣ character ʤʸ̣ޤ character ˤϡsingle-byte character, multi-byte character, wide character ꡢ줾б multi-character character constant ΤǤʵʽǤ character ȤѸ single-byte character ΰ̣ǻȤƤ뤬ǤϣʸؤդȤƻȤˡ<br>
Multi-character character constant λȤƻä˲ʤǤ줬 K&R 1st. ǧƤΤñˡcharacter constant η int int ϰϤΤǤвǤ⤫ޤʤȤȤˤʤȻפޤ</p>
<h4>i.35.1. multi-character ʸɾ</h4>
<p>Single-byte character multi-character character constant ϡK&R 1st. 餢äΤǤA.16ˡɾΥХȥ K&R 1st. Ǥ Standard C ǤꤵƤޤ</p>
<p> : 2</p>
<h4>e.35.2. multi-character ʸͤϰϳ</h4>
<p>ʤޤϣ escape sequence ˤ multi-character character constant ͤ̾ int ޤ unsigned int ϰϤˤʤФʤʤȹͤޤC90 Ǥ #if Ǥ int / unsigned int long / unsigned long ƱɽĤΤ褦˰Τǡlong ޤ unsigned long ϰϤˤ뤫ɤåФȹͤޤϵʤΤǤϤޤͤɾλΤΤ implementation-defined ǤΤǡϰϥå implementation-defined ǤȤǤޤ<br>
ˤƤ⡢Υץ long ӥåȰʲνϤǤϤɤɾƤ unsigned long ϰϤĶΤǡǥåФΤŬǤ礦<br>
C99 Ǥ #if ηϤνϤκȤʤޤ</p>
<p> : 2</p>
<h4>i.35.3. Multi-character 磻ʸɾ</h4>
<p>磻ʸ multi-character constant ȤΤ¸ߤޤ
ɾλϤϤŪ implementation-defined Ǥб multi-byte character multi-character constant ȹäƤɬפޤ</p>
<p> : ʤ</p>
<h3><a name="3.4.37" href="#toc.3.4.37">3.4.37. Translation limits</a></h3>
<p>Standard C ǤϡϤȤΤǤƼ translation limits κ¤ꤵޤεϤʤˤ䤫ʤΤǤʤθ³ͤˤĤƤ줾졢İʾޤץǤ¹ԤǤʤФʤʤȤΤǤ Validation Suite ΥץФ狼褦ˡΥץϽϤˤȤäƺǤôʤʤ褦ˡñºŪ˽ȤǤޤ translation limits ݾڤ櫓ǤϤʤȤˡդƤTranslation limits εܰ¤ˤʤȸޤΥץϥץץδط룸 translation limits ΥƥȤΤǤ*1, *2, *3<br>
ʤΥƥȥץΰϲˤޤ褦˹Ԥޤ֤ƤޤϤˤäƤϡ³νԤʤˤΥƥȤ˼Ԥ뤳ȤޤBorland C ˡ³ΥƥȤǤŪǤϤʤΤǡԤϥǥǹԤĤʤǺƥƥȤƤ</p>
<p>:</p>
<pre>
*1 C90 5.2.4.1 Translation limits ³
*2 C99 5.2.4.1 Translation limits
</pre>
<p>C99 Ǥϡtranslation limits ˳礵Ƥ롣
C++ Standard ǤϤ礭<a href=#4.6>4.6</a> ȡˡ</p>
<h4>n.37.1. ޥΣĤΥѥ</h4>
<p>C90 ǤϡޥΥѥϣĤޤǤݾڤƤޤ</p>
<p> : 2</p>
<h4>n.37.2. ޥƤӽФΣĤΰ</h4>
<p>Ʊͤ C90 ǤϡޥƤӽФΰϣĤޤǤݾڤƤޤ</p>
<p>
: 2</p>
<h4>n.37.3. ʸμ̻̾</h4>
<p>C90 ǤϡTranslation unit Ū identifierʥޥ̾⤳˴ޤޤˤƬ 31 characters ͭդǤ뤳ȤݾڤƤޤץץϤ31 ХȤ̤̾ɬפޤ*1</p>
<p> : 4</p>
<p>:</p>
<pre>
*1 C90 6.1.2 Identifiers ̻ -- Implementation limits ϸ³
</pre>
<h4>n.37.4. Ťξ</h4>
<p>C90 Ǥϡ#if (#ifdef, #ifndef) section ΥͥȤϣŤޤǤݾڤƤޤ</p>
<p> : 2
</p>
<h4>n.37.5. Ť #include</h4>
<p>C90 Ǥϡ#include ΥͥȤϣŤޤǤݾڤƤޤ</p>
<p> : 4</p>
<h4>n.37.6. ŤΥåդ #if </h4>
<p>C90 Ǥϡ (, ) ΥͥȤϣŤޤǤݾڤƤޤ
#if ˤŬѤȹͤޤ#if Ǥϰ̤μȰäƤޤݾڤɬפϤʤȤפ롣#if long / unsigned long ɾ뤳Ȥȡ¹ԻĶؤ䤤碌ɬפȤ¹Ի phase 7 ƱɾλǤʤƤ褤ȤȤ㳰ȤƵꤵƤơ¾¦̤Ǥ̰ƤʤΤǡʵˤʤäƤȤ⤢ˡ</p>
<p> : 2</p>
<h4>n.37.7. 509 ХȤʸƥ</h4>
<p>C90 ǤϡʸƥĹ 509 ХȤޤǤݾڤƤޤĹϥȡĹǤꡢchar ǿǤϤޤξü " ޤߡ\n ϣХȤȿޤ磻ʸƥǤ L Ȥ prefix ޤߤޤ</p>
<p> : 2</p>
<h4>n.37.8. 509 ХȤ</h4>
<p>C90 ǤϡԤĹ 509 ХȤޤǤݾڤƤޤ</p>
<p> : 2</p>
<h4>n.37.9. 1024 ĤΥޥ</h4>
<p>C90 Ǥϡޥ 1024 ĤޤǤݾڤƤޤtranslation limits εǤ⤳줬Ǥ⤢ޤʤΤǤΥץΤ褦˺ǤñʥޥФξȡĹʥޥ¿ޤȤǡϤɬפȤ̤Ϥޤäۤʤޤޤ1024 Ĥ˻ޥޤफɤǤ⡢ƥȥץबäƤޤºݤΥץǤϡ桼ץǥޥˡɸإå¿ΥޥޤεϤޤ礶äѤܰ¤ˤޤºݤθ³ϥƥǤ̤ˤäƷޤǤ礦</p>
<p> : 4</p>
<h4>n.tlimit. C99 translation limits</h4>
<p>C99 Ǥ translation limits ˳礵ޤ</p>
<p> : ʲΤ줾ˤĤ 2</p>
<h4>n.37.1.L. ޥ 127 ĤΥѥ</h4>
<h4>n.37.2.L. ޥƤӽФ 127 Ĥΰ</h4>
<h4>n.37.3.L. 63 ʸμ̻̾</h4>
<h4>n.37.4.L. 63 Ťξ</h4>
<h4>n.37.5.L. 15 Ť #include</h4>
<h4>n.37.6.L. 63 ŤΥåդ #if </h4>
<h4>n.37.7.L. 4095 ХȤʸƥ</h4>
<h4>n.37.8.L. 4095 ХȤ</h4>
<h4>n.37.9.L. 4095 ĤΥޥ</h4>
<br>
<h2><a name="3.5" href="#toc.3.5">3.5. ʬΥɥ</a></h2>
<p>Standard C ˤ implementation-definedʽˤȸƤФʬޤ
ʬλͤϽϤˤäưۤʤޤϤϤλͤɥȤ˵ܤʤФʤʤȤƤޤ*1</p>
<p>Implementation-defined ȤΤˤϡϤΤΤΤΤۤˡCPU ϣӤˤäƷޤʬޤޤƤޤѥξ硢CPU ϣӤȼ¹ԻȤǰۤʤ⤢ޤ</p>
<p>ʲιܤϥץץ˴ؤ implementation-defined ʬˤĤơϤΥɥȤ˵ܤ뤫ɤåΤǤץץǤ顢CPU ϣӤϤΤΤǤd.1.* ϥץץͭλͤǤꡢd.2.* ϥѥΤλͤȤطΤΤǤ#if ǤμɾϡѥΤȤϻͤۤʤäƤ⤫ޤʤȤˤʤäƤޤ</p>
<p>ʲιܤΤۤˤ⡢#if ɾˤ implementation-defined ¦̤ĤޤޤʸåȤǤʴʸåȤ ASCII EBCDIC ˡޤ encodingʣ͡ˤ⤽Ǥˡ̾λѴˤäĤʤѴ줿̤⤽ǤϤޥȣϣӤǷޤΤǤΤǤΥɥȤꡢϤΥɥȤˤϵܤϤʤƤ⤫ޤʤȹͤޤäơǤϤɾоݤȤޤ</p>
<p>:</p>
<pre>
*1 C90 3 Definitions of Terms Ѹڤӵ
C99 3 Terms, definitions, and symbols
</pre>
<h4>d.1.1. Header-name ۤˡ</h4>
<p>Header-name ȤΤü pp-token Ǥ
<, > ޤ ", " ǰϤޤ줿 sequence ɤä header-name ȤĤ pp-token ˷礹Τ implementation-defined ȤʤäƤޤ ", " ǰϤޤ줿ΤʸƥȤ pp-token ȤưФΤǴñʤΤǤ<, > ǰϤޤ줿ΤϤüäƤޤ<stdio.h> translation phase 3 <, stdio, ., h, > ȤĤ pp-token ˤäʬ줿ǡphase 4 ǣĤ pp-token ˹뤳Ȥˤʤ뤫ǤʬޥǽƤϡ̯꤬ޤ*1</p>
<p> : 2ʤλͤϤΥɥȤ˵ܤƤ 2 ܤƤʤ 0 <br>
ʤheader-name ʸʸζ̵̤ͭե̾ε§ implementation-defined Ǥ뤬ϣϣӤǷޤ뤳ȤʤΤǡϤΥɥȤˤɬܤɬפϤʤȹͤ롣</p>
<p>:</p>
<pre>
*1 C90 6.8.2 Source file inclusion ե -- Semantics ̣§
C99 6.10.2 Source file inclusion
</pre>
<h4>d.1.2. #include ǥإåˡ</h4>
<p>#include Ԥ header-name Ф줿塢 header file ɤäƤΤ implementation-defined Ǥ", " ǰϤޤ줿 header-name ξϡޤ implementation-defined ˡǥե뤬졢Ĥʤä <, > ǰϤޤ줿 header-name Ʊͤ˥뤳ȤˤʤäƤޤȤθԤޤ implementation-defined ʤΤǤΤʤǤ Standard C ϣӤˤĤ֤ȤǤʤᡢɽˤʤ餶ʤΤǤ<br>
ǥ쥯ȥ깽¤äϣӤǤϡԤϥȥǥ쥯ȥ꤫ХѥԤϽϤδΥǥ쥯ȥȲޤԤǤ include Υե뤫ХѥϤ⤢ޤImplementation-defined Ǥ뤫ˤϡְ㤤ȤϸޤˤĤ Rationale ϡȥǥ쥯ȥ꤫ХѥǥͤѰΰտޤǤϤ뤬ϣӤˤĤ֤ȤǤʤΤʸǤʤäƤޤ*1<br>
ޤԤΥϥݡȤʤƤɤ", " ǰϤޤ줿 header-name <, > ȤޤäƱ˰äƤɤˤȤƤޤԤɬեǤʤƤ褤ȤƤޤϤȤ߹ߤ header ⤢ꤦȤȤǤ*2</p>
<p> : 4ʤ header ܤɥȤ˽ʬ˵ܤƤ 4 Խʬʵܤʤ 2 ۤȤɵܤƤʤ 0 </p>
<p>:</p>
<pre>
*1 ANSI C Rationale 3.8.2 Source file inclusion
*2 C90 6.8.2 Source file inclusion ե -- Semantics ̣§
C99 6.10.2 Source file inclusion
</pre>
<h4>d.1.3. #include ΥͥȤθ</h4>
<p>#include ΥͥȤɤǤ뤫 implementation-defined ǤʤȤ C90 Ǥϣ٥롢C99 Ǥ 15 ٥ݾڤʤФʤޤ*1, *2</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 5.2.4.1 Translation limits ³
C99 5.2.4.1 Translation limits
*2 C90 6.8.2 Source file inclusion ե -- Semantics ̣§
C99 6.10.2 Source file inclusion
</pre>
<h4>d.1.4. Ƥ #pragma sub-directive</h4>
<p>#pragma Ȥ preprocessing directive Ͻϸͭγĥǽꤹ뤿ѰդƤ directive ǤץץˤƤ⡢ĥǽϤ٤ #pragma sub-directive ȤƼʤФʤޤ*1</p>
<p> : 4νϤͭ #pragma sub-directive ˤĤơʥץץΥɥȤǤϾʤȤץץΤΤ٤Ƥ #pragma sub-directive ˤĤơ˥ɥȤ˽ʬʵܤ 4 Խʬʵܤʤ 2 ۤȤɵܤʤ 0 ޤ#pragma sub-directive ʳνϸͭ directive 2 ʤ0 ¡Standard C ˺Ǥᤤͤꤹ륪ץˤäƶػߤ directive ϴޤޤʤˡ</p>
<p>:</p>
<pre>
*1 C90 6.8.6 Pragma directive ץ饰
C99 6.10.6 Pragma directive
</pre>
<h4>d.pragma. #pragma ǤΥޥŸ</h4>
<p>C90 Ǥϡ #pragma Ԥ pp-token ϥޥŸоݤȤʤޤǤC99 Ǥ #pragma STDC Ȥ token ³ΤϥޥŸоݤȤʤޤʳ #pragma sub-directive ޥŸ뤫ɤ implementation-defined Ȥʤޤ</p>
<p> : 2</p>
<h4><a name="d.1.5">d.1.5. ޥ</a></h4>
<p><tt>__FILE__</tt>, <tt>__LINE__</tt>, <tt>__DATE__</tt>, <tt>__TIME__</tt>, <tt>__STDC__</tt>, <tt>__STDC_VERSION__</tt> C99 Ǥ <tt>__STDC_HOSTED__</tt> ˰ʳλޥ implementation-defined ǤϣĤ _ ʸ³̾ޤϣĤ _ ǻϤޤ̾ǤʤФʤޤ*1</p>
<p> : 4Խʬʵܤʤ 2 ¤ȿ̾λޥ 2 ʤ0 ¡Standard C ˺Ǥᤤͤꤹ륪ץˤäƶػߤޥɾоݤȤʤˡ</p>
<p>:</p>
<pre>
*1 C90 6.8.8 Predefined macro names 餫줿ޥ̾
C99 6.10.8 Predefined macro names
</pre>
<h4>d.predef. C99 λޥ</h4>
<p>C99 Ǥϡ<tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX__</tt>, <tt>__STDC_ISO_10646__</tt> ȤޥˤäƻΤȤɲäƤޤ<br>
<tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX__</tt> IEC 60559 ưʤ˹פǤϤ줾 1 ȤƤޤΣĤư黻Υ饤֥ˤäƷޤΤǡºݤˤ <fenv.h> ΤŬ⤷ޤɬץץåǻɬפϤʤȹͤޤ</p>
<p><tt>__STDC_ISO_10646__</tt> wchar_t ʸͤ٤ ISO/IEC 10646Unicode Ϥ Universal Character Setˤβ餫Υɲ줿Ǥϡ ISO/IEC 10646 amendment corrigendum ޤʤǯɽ 199712L ȤäȤƤޤ <wchar.h> 뤳Ȥͤ졢ץץåǻɬפϤʤǤ<br>
ɤˤƤɥȤƤ뤳ȤɬפǤ</p>
<p> : 6ĤΤ줾ˤĤƳ 2 </p>
<h4>d.1.6. Phase 3 white-spaces ̤뤫</h4>
<p>Standard C Ǥ translation phase 3 tokenization Ԥޤλ <newline> ʳ white-space sequence one space ˰̤뤫ʤ implementation-defined ȤƤޤ*1<br>
̾ϥѥ̤ˤϱƶͿʤϤͤʤΤǡ桼ΤɬפϤʤΤǤƬȹ white-spaces ˤäƤϡƤ⤫ޤޤ</p>
<p>ǤϤε̵ѤȸȡĤ⤽櫓ǤϤʤɬפʾ礬Ĥޤ preprocessing directive Ԥ [VT], [FF] ǤˤĤƤ Standard C Ϥ狼ˤλƤޤǤ violation of constraint Ȥ¾ǤϾ嵭εߤƤΤǤʤphase 3 [VT], [FF] space, tab ȹ碌 one space ˰̤뤳ȤǤξ phase 4 ˤ [VT], [FF] ϻĤʤ̤ʤäϤ줬Ĥä violation of constraint ȤʤΤǤ<br>
ɥȤˤϡ [VT], [FF] ΰƤнʬȹͤޤ</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե 3
C90 6.8 Preprocessing directive -- Constraints
C99 6.10 Preprocessing directive
</pre>
<h4>d.ucn. ʸ UCN \ Ťͤ뤫</h4>
<p>UCN ޤ pp-token # 黻Ҥˤäʸ硢UCN \ Ťͤ뤫ɤ implementation-defined Ǥ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C99 6.10.3.2 The # operator
</pre>
<h4>d.2.1. #if: Single-character character constant ɾ</h4>
<p>̤ʸͤɾ implementation-defined Ǥ
ˤϤĤμޤ</p>
<ol>
<li>ʸåȤϲ<br>
<li>¿Хʸ磻ʸ encoding ϲ<br>
<li>ΰϤɤ<br>
<li>ʣХȤʸɾΥХȥϤɤ<br>
</ol>
<p>Τ 1 ϥϡɥȣϣӤǷޤΤʤΤǡǤɾоݤȤޤ 2, 3, 4 Ǥ<br>
ХȤ single-character ʸǤ⡢ΰ implementation-defined ǤޤץץȥѥȤɾäƤƤɤȤˤʤäƤޤ*1</p>
<p> : 2ɥȤ˵ܤ硢ޤϥѥեǤɾˤĤƤεܤ #if ǤƱɾ 2 ܤʤ 0 </p>
<p>:</p>
<pre>
*1 C90 6.1.3.4 Character constants ʸ
C90 6.8.1 Conditional inclusion դ -- Semantics ̣§
C99 6.4.4.4 Character constants
C99 6.10.1 Conditional inclusion -- Semantics
</pre>
<h4>d.2.2. #if: Multi-character character constant ɾ</h4>
<p>'ab' Ȥä multi-character ʸɾˤϡХȥ꤬ޤ implementation-defined Ǥ</p>
<p> : 2ɾλ d.2.1 Ʊ͡</p>
<h4>d.2.3. #if: Multi-byte character constant ɾ</h4>
<p>¿Хʸɾ encoding ΰ㤤ΤۤˡΰХȥΰ㤤ꡢϤ implementation-defined Ǥ</p>
<p> : 2ɾλ d.2.1 Ʊ͡</p>
<h4>d.2.4. #if: 磻ʸ character constant ɾ</h4>
<p>磻ʸɾˤ encoding ΰ㤤ΤۤˡΰХȥΰ㤤ꡢϤ implementation-defined Ǥ</p>
<p> : 2ɾλ d.2.1 Ʊ͡</p>
<h4>d.2.5. #if: αե</h4>
<p>̤αӥåȥեȤӥåȤɤ뤫 implementation-defined Ǥ CPU λͤˤޤϤμˡˤȻפޤ*1</p>
<p> : 2ɾλ d.2.1 Ʊ͡</p>
<p>:</p>
<pre>
*1 C90 6.3.7 Bitwise shift operators ӥåñ̤Υեȱ黻 -- Semantics ̣§
C99 6.5.7 Bitwise shift operators -- Semantics
</pre>
<h4>d.2.6. #if: ν;</h4>
<p>̤˱դޤϺդޤǤΡȾ;η̤ implementation-defined Ǥ CPU λͤˤޤϤμˡˤȻפޤ*1, *2</p>
<p> : 2ɾλ d.2.1 Ʊ͡</p>
<p>:</p>
<pre>
*1 C90 6.3.5 Multiplicative operators 黻 -- Semantics ̣§
C99 6.5.5 Multiplicative operators -- Semantics
</pre>
<p>*2 C99 Ǥϡdiv(), ldiv() Ʊͤ˾ 0 ڤΤƤ뤳Ȥˤʤä</p>
<h4>d.2.7. ̻ҤͭĹ</h4>
<p>ޥ̾ޤ identifier Ƭ鲿ХȤޤǤͭդǤ뤫 implementation-defined Ǥޥ̾Ū̻ҤˤĤƤϡC90 Ǥ 31 ХȡC99 Ǥ 63 ХȤݾڤʤФʤޤ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 6.1.2 Identifiers ̻ -- Implementation limits ϸ³
C99 6.1.2 Identifiers -- General -- Implementation limits
</pre>
<h4>d.mbident. ̻ multi-byte character</h4>
<p>C99 Ǥϡidentifier multi-byte character Ȥ뤳Ȥˤʤޤ implementation-defined Ǥ*1</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C99 6.1.2 Identifiers -- General
</pre>
<br>
<h1><a name="4" href="#toc.4">4. ʤᤵƤʤ¦̤ɾ</a></h1>
<p>ʤϤФᤷƤʤȤǤäƤ⡢ϤΡʼפɾ뤿˽פʤȤޤξϤǤϡʼɾΥƥȤ⤷ޤ</p>
<br>
<h2><a name="4.1" href="#toc.4.1">4.1. Multi-byte character encoding</a></h2>
<p>Multi-byte character ˤϳƼ encoding ޤλͤ implementation-defined ǤǤϽϤɤ¿ͤ encoding ˤɤޤбƤ뤫ΥƥȤʼפȤƤȤꤢޤ<br>
Validation Suite Ǥϡm_33, m_34, m_36 ˤĤƤϿ encoding бץѰդƤޤϤϤΥƥǤɸ encoding бƤʤФʤʤΤϤǤ¿б뤿ˤϡ¿ encoding бƤɬפޤ*1<br>
ƥȤˡϥƥϤˤäưۤʤꡢñǤϤޤ</p>
<p>GCC ϴĶѿ LC_ALL, LC_CTYPE, LANG бưѤ뤳ȤˤʤäƤޤȾüǤƤˤǤޤޤGCC ǤεǽȤ뤫ɤ GCC Ȥѥ뤷 configuration ˤäưۤʤޤ<br>
GCC V.3.4 Ǥ multi-byte character νѤޤץץκǽˡtranslation phase 1 ˡ˥ե encoding UTF-8 ѴƤޤޤʤȡ#if ʸ UTF-8 ǤʤɾǤ encoding ȤϴطʤʤäƤޤޤ<br>
C++98 εʤˤƱ꤬ͤꡢtranslation phase 1 multi-byte character UCN ѴƤޤΤǡ#if ʸ UCN ȤƤǤʤɾǤʤȤˤʤޤ<br>
ʤȼΤ𤷤ȡ̤ #if ʸȤΤ portability ̵Ọ̵̇̄Ƨޤơ Validation Suite Ǥ V.1.5 #if multi-byte/wide character ʸΥƥȤɾоݤϤޤm.33, m.34, m.36.1ˡ</p>
<p>Visual C++ ˤ #pragma setlocale Ȥʥǥ쥯ƥ֤Τǡ줬ȤޤWindows ǤϡϰȸΥץפˤäƻѸѹǤ뤳ȤˤʤäƤޤȾüǤäǤ#pragma setlocale Windows 餺˻ȤΤǡץޤˤȤäƤʤΤǤVisual C++ ȤɤޤƤ뤫̤Ǥ뤬ˡ<br>
ΥƥȤ¾νϤǤϺΤȤνϤǤΥǥեȤ encoding ˤбƤʤ褦Ǥ饤֥ setlocale() δؿĽϤ¿ޤϥΥץץ䥳ѥˤϴطޤɬפʤΤϡϼȤ encoding ǧǽϤʤΤǤ</p>
<p>:</p>
<p>*1 C99 Ǥϡ\u, \U ǻϤޤ Unicode sequence Ƴ졢multi-byte / wide character ȤδطƤ狼ˤʤäƤޤäƤ롣C++ Standard ǤϤʣǤ롣</p>
<h4>m.33. 磻ʸɾ</h4>
<p>磻ʸˤĤƤϡ<a href="#3.4.33">3.4.33</a> ȤƤ</p>
<p> : ʤ</p>
<h4><a name="m.34">m.34. #if multi-byte ʸɾ</a></h4>
<p>#if ǤʣХȤ multi-byte character constant¿ХʸˤȤޤʵʽǤ multi-byte character ȤѸ single-byte character ޤΤȤƻȤƤ뤬ǤϺ𤷤ʤ褦ˡsingle-byte ǤϤʤ multi-byte character ؤȤˤˡɾ single-byte character constant ʾ implementation-defined Ǥ</p>
<p> : ʤΥƥȤϸҤ <a href="#u.1.7">u.1.7</a> ΥƥȤȹ碌ȽǤɬפ롣
ñʸͤɾǤǤϡ encoding ǧƤ뤳ȤˤϤʤʤu.1.7 multi-byte character encoding ǧϰϤ˼ޤäƤ뤫ɤΥƥȤǤ롣m.34. ʸͤɾǡ u.1.7 ŬڤʿǥåФƽƤ encoding ǧƤȸ롣</p>
<h4>m.36.1. Multi-byte character 0x5c escape ʸǤϤʤ</h4>
<p>(Multi-byte | wide) character encoding shift-JIS, Big-5, ISO-2022-* ξϡʸ '\\' Ʊ 0x5c ͤĥХȤФƤ뤳Ȥ뤿ᡢ鷺路꤬ޤϤϤ escape ʸȤƤ \ (backslash) ȲᤷƤϤޤĤ (multi-byte / wide) character ϣĤʸǤꡢĤ single-byte character ǤϤʤǤ<br>
Multi-byte character ͤ 0x5c ΥХȤäƤ⡢ escape sequence λϤޤȲᤷƤϤޤ</p>
<p> : ʤ</p>
<h4>m.36.2. # 黻Ҥ multi-byte character \ ʤ</h4>
<p># 黻Ҥ operand б 0x5c ͤΥХȤ multi-byte character ޤޤƤƤ⡢ \ ƤϤޤäȤ⡢ѥΤ multi-byte character бƤʤ˥ץץå \ 뤳ȤбȤˡޤϤޤ̤μΤȤǤ<br>
ޤ⤽⤳μ multi-byte character ޤʸʸƥ tokenization ˤ⡢¾ΥƥȤϰäݤ꤬ޤ<br>
ISO-2022-* encode 줿 multi-byte character ˤ '\\' ФǤʤ '\'', '"' ȰפͤΥХȤޤޤΤǡøʽ tokenization ˼Ԥޤ</p>
<p> : 7Shift-JIS, Big-5 encoding ˤĤƳ 2 ISO-2022-JP ˤĤƤϣĤΥץˤĤƳ 1 <br>
ʤιܤ m_36_*.t Ǥʤ m_36_*.c ƥȤɬפ롣ʸǤץץåassert() ޥ 0x5c ΥХȤĴޤʣʸƥȤƱꤹ뤳Ȥ˼Ԥ뤳Ȥ뤫Ǥ롣m_36_*.c ʸƥ tokenization ΥƥȤˤʤäƤ롣<br>
GCC 3.4-4.1 encoding UTF-8 ѴƤޤ encoding ᤹ȤؼȼԤ뤳Ȥ¿Ѵ;פʤäǤ뤬ǤϤޤǤϥƥȤʤ0x5c ΥХȤйʤȤʴŤƥȤǤˡ</p>
<br>
<h2><a name="4.2" href="#toc.4.2">4.2. Undefined behavior</a></h2>
<p>Standard C ˤ undefined behavior Ȥ꤬ޤUndefined behavior Τϡְäץޤϥǡ뤤ϾʤȤܿΤʤץǤviolation of syntax rule or constraint ȤϰäơϤϤФƿǥåФȤ̳դƤޤϡϤϤɤƤ⤫ޤʤΤǤץȤƲ餫 reasonable ʽƤɤǥåФƥ顼ˤƤɤǥåФ˽ߤ˽ꤷƤʰȿǤϤޤ</p>
<p>ϤΡʼפɾˤϡundefined behavior ŪˤɤΤǤ뤫ˤʤޤϤϲ餫οǥåФΤŬǤ礦顼ˤΤǤФΤȡץȤưǤ⥦˥ФȤץ˰ܿʤȤΤ餻뤿ͭѤǤ˽ΤǤ</p>
<p>ʲΥƥȤǤϡundefined behavior ФƽϤŬڤʿǥåФɤåޤǥåϥ顼Ǥ⥦˥Ǥ⤫ޤޤ˥ξϲ餫 reasonable ʽɬפޤ<br>
u.1.* ϥץץͭǡu.2.* ̤˶̤Ǥ</p>
<p> : ŬڤʿǥåФСʲγƹܤΤäǤΤʤܤˤĤƤ 1 ʿǥåǤǥåФʤ 0 </p>
<h4>u.1.1. ե뤬 <newline> ǽäƤʤ</h4>
<p>ǤʤեκǸ夬 <newline> ǤʤΤϡundefined behavior ޤʤäȤ⡢ϣӤˤäƤϥե˲ʸȤǡ¸ߤեɤ߹˽ϤˤäƼưŪղäΤǤˡ*1<br>
u.1.1, u.1.2, u.1.3, u.1.4 Ϥ⥽ե뤬뤷ƤʤΤǤtranslation unit ΥեǽäƤϡǥåФϤ¿ȻפޤϤǤ⡢Υե뤬 include 줿ΤǤ硢include ΥեϢ³ƽ뤳ȤǡʥȤưǽޤ undefined behavior ΰǤꡢְäǤϤޤϤǥåФΤŬǤ</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
</pre>
<h4>u.1.2. ե뤬 <backslash><newline> ǽ</h4>
<p>ե뤬 <backslash><newline> sequence ǽäƤΤϡundefined behavior ޤ*1</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
</pre>
<h4>u.1.3. ե뤬ȤǽäƤ</h4>
<p>ե뤬ȤǽäƤΤϡundefined behavior ޤϼºݤˤϥȤĤ˺ޤϥȤΥͥȤǤ*1</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
</pre>
<h4>u.1.4. ե뤬ޥƤӽФǽäƤ</h4>
<p>ե뤬뤷ʤޥƤӽФǽäƤΤϡundefined ȹͤޤ*1<br>
ϥޥΰĤ륫å˺줿ʤɤȯΤǡǥåϽפǤ</p>
<p>:</p>
<pre>
*1 C90 6.8.3.4 Rescanning and further replacement Ⱥִ
C99 6.10.3.4 Rescanning and further replacement
</pre>
<h4>u.1.5. ѤǤʤȤ character </h4>
<p>ʸƥ롢ʸheader-nameȰʳΤȤ˽ʸϤ¤ƤޤʸȾʸ alphabetε桢 white space characters ǤǤΤȤǤ*1<br>
Ǥϡwhite space ʳΥȥ륳ɤäΥƥȤޤȥ륳ɤϤȤʸƥǤäƤȹͤޤϥѥΤǥåϤǤꡢޤ̤ʸåȤˤ locale-specific ʤ implementation-defined ̤¿ϰϤɬΤǤϤʤΤǡǤϥƥȤޤޤ嵭ʳξǤ undefined ȹͤޤƱͤͳǥƥȤޤ</p>
<p>:</p>
<pre>
*1 C90 5.2.1 Character sets ʸ
C99 5.2.1 Character sets
</pre>
C99 Ǥ UCN ɲä줿
</p>
</blockquote>
<h4><a name="u.1.6">u.1.6. ȥ [VT][FF] </a></h4>
<p>White space characters ǤäƤ⡢# ǻϤޤ preprocessing directive ԤǤ [SPACE][TAB] ʳ violation of constraint Ȥʤޤ translation phase 4 Ǥäǡ phase 3 Ǥ <newline> ʳ sequence of white spaces ȤȤ one space ˰̤뤳ȤǤξ violation ȯޤ*1<br>
ϤǤϤꤳˤϿǥåФΤŬǤ礦ΥƥȤ undefined behavior ΥƥȤǤϤޤ¾ʬषüʤΤʤΤǡص夳Ƥޤ</p>
<p>:</p>
<pre>
*1 C90 5.1.1.2 Translation phases ե
C99 5.1.1.2 Translation phases
C90 6.8 Preprocessing directives -- Constraints
C99 6.10 Preprocessing directives -- Constraints
</pre>
<h4><a name="u.1.7">u.1.7. Ѥ multi-byte character sequence</a></h4>
<p>ʸƥ롢ʸheader-nameȤǤäƤ⡢multi-byte character Ȥǧʤ sequence undefined ǤMulti-byte character ХȤμΥХȤХȤȤƻȤʤΤǤǤ*1</p>
<p> : 9γ encoding Τ UTF-8 ʳΤΤˤĤƳ 1 UTF-8 ˤĤƤ 3
UTF-8 ˤĤƤϣĤΥƥȤ뤬ܤ encoding ǤȤΣĤ illegal encoding Ǥ롣
Ĥ illegal encoding ΤοǤǤȤ롣
encoding ˸ʿǤΤ 0
ʤ<a href="#m.34">m.34</a> ȤΤȡ</p>
<p>:</p>
<pre>
*1 C90 5.2.1.2 Multibyte characters ¿Хʸ
C99 5.2.1.2 Multibyte characters
</pre>
<h4>u.1.8. ԤʸǽäƤ</h4>
<p>ʸȤ pp-token ϤԤǴ뤷ƤʤФʤޤб ' ʤ ' undefined Ǥ*1<br>
#error ԤˤǤդΥåȤǤޤȤƤ pp-token ¤ӤˤʤäƤʤȤʤΤǡñȤ apostrophe ϤޤΥץǤϡȤΤĤΤȤʸν ' 뤿˿ƤޤǤ礦</p>
<p>:</p>
<pre>
*1 C90 6.1 Lexical elements -- Semantics ̣§
C99 6.4 Lexical elements -- Semantics
</pre>
<h4>u.1.9. ԤʸƥǽäƤ</h4>
<p>ʸƥ⤽ԤǴ뤷ƤʤФʤޤ
ñȤ " undefined Ǥ*1<br>
ĤƤ UNIX Ϥ¿νϤǤϡԤޤʸƥȤΤǧƤ褦ǤޤˤƤˤ˸ޤ</p>
<p>:</p>
<pre>
*1 C90 6.1 Lexical elements -- Semantics ̣§
C99 6.4 Lexical elements -- Semantics
</pre>
<h4>u.1.10. Ԥ header name ǽäƤ</h4>
<p>#include ԤǴ뤷ʤ header-name undefined Ǥ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.2 Source file inclusion ե -- Semantics ̣§
C99 6.10.2 Source file inclusion -- Semantics
</pre>
<h4>u.1.11. Header name ', ", /*, \ </h4>
<p>Header-name Ȥ pp-token ', /*, \ undefined Ǥ<, > ǰϤޤ header-name " ƱͤǤʸƥη header-name Ǥϡᤫ " pp-token νˤʤäƤޤΤǡ顼ˡ*1<br>
\ ʳϤ⡢ʸʸƥ롢Ȥʶ路ɤˤǤ뤫Ǥ</p>
<p>ޤ\ escape sequence ʶ路header-name ˤ escape sequence ¸ߤʤΤΡ줬 header-name Ȥ狼Τ translation phase 3 Ǥ tokenization ä phase 4 ˤʤäƤǤΤǡϤϤ϶̤˺ΤǤEscape sequence Τ phase 6 Ǥphase 3 Ǥ \" ʸƥνǤϤʤ escape sequence Ȳ᤹뤿 escape sequence ǧ뤳ȤɬפǤ</p>
<p>\ Windows ΣϣӤǤ path-delimiter ǡΣϣӾνϤʸȤưޤʸƥη header-name ǤκǸʸ \ Ǥ̤ȤơˡUndefined behavior ⤿餹Τ¿ξϴְäץǤˤȤ櫓ǤϤޤ/ ǤȤ虜虜 \ ȽΤϡportability ξǴޤϤϥ˥ФȤ˾ޤޤ¾ΣϣӤǤϥեץ褦Ȥƥ顼ˤʤǤ礦顢ɬץץ tokenization ǿǤɬפϤޤ</p>
<p>:</p>
<pre>
*1 C90 6.1.7 Header names إå̾ -- Semantics ̣§
C99 6.4.7 Header names -- Semantics
</pre>
<h4>u.1.12. #include ΰ header name Ǥʤ</h4>
<p>#include Ԥΰ header-name ǤʤΤ undefined ǤʤʸƥηǤʤ<, > ˰Ϥޤ줿ΤǤʤΤɤ餫ŸޥǤʤǤ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.2 Source file inclusion ե -- Semantics ̣§
C99 6.10.2 Source file inclusion -- Semantics
</pre>
<h4>u.1.13. #include ΰ;פʥȡ</h4>
<p>#include Ԥΰ header-name ĤǤ
ʳ;פ pp-token undefined Ǥ*1</p>
<p>:</p>
<pre>
*1 C90 6.8.2 Source file inclusion ե -- Semantics ̣§
C99 6.10.2 Source file inclusion -- Semantics
</pre>
<h4>u.1.14. #line ΰ˹ֹ椬ʤ</h4>
<p>#line ΰ˹ֹ椬ʤΤ undefined Ǥʥե̾ optionalֹǤʤФʤʤˡ*1</p>
<p>:</p>
<p>*1 ʲu.1.18 ޤǤŵϤƱ</p>
<pre>
C90 6.8.4 Line control -- Semantics ̣§
C99 6.10.4 Line control -- Semantics
</pre>
<h4>u.1.15. #line Υե̾ʸƥǤʤ</h4>
<p>#line Ǥե̾ʸƥǤʤФʤޤ<br>
줬磻ʸǤä violation of constraint ǡ¾ #line δְ㤤Ϥ٤ undefined ȤΤϡХ礤Ǥ</p>
<h4>u.1.16. #line ΰ;פʥȡ</h4>
<p>#line ԤˣİʾΰΤ undefined Ǥ</p>
<h4>u.1.17. #line ιֹΰ [1, 32767] ϰϤˤʤ</h4>
<p>C90 Ǥϡ#line ιֹ [1, 32767] ϰϤˤʤФʤޤʳǤ undefined Ǥ<br>
ΥץǤϡ#line ǤλϤϰϤˤΤΡθǥιֹ椬ĶƤޤäȤΥƥȤ⤷ƤޤϤˤäƤϡǹֹ椬ۤä wrap round ꤷޤϤꥦ˥ФΤŬǤ礦</p>
<p> : 2ĤΥץΤĤޤϣĿǤǤ 1 </p>
<h4>u.line C99: #line ιֹΰϰϳ</h4>
<p>C99 ǤϡϰϤ [1, 2147483647] Ǥ</p>
<p> : 2
ĤΥץΤĤޤϣĿǤǤ 1 </p>
<h4>u.1.18. #line ιֹΰʿǤʤ</h4>
<p>#line ιֹϣʿǤʤФʤޤʿʤɤ undefined Ǥ</p>
<h4><a name="u.1.19">u.1.19. #if defined Ÿޥ</a></h4>
<p>defined 黻ҤǤʤ identifier ʶ路Ƥ뤳ȤϡޤޤޤTranslation phase 3 ǤϤä identifier Ȥ tokenize 졢phase 4 Ǥ줬 #if ˤä˸¤äƱ黻ҤȤǧΤǡ#define Ԥ defined Ÿޥ뤳Ȥ⡢ꤨʤȤǤϤޤơ#if Ԥ˼ºݤˤΥޥ줿ϡundefined ǤŸ̤黻ҤȤưݾڤϤޤ*1</p>
<p>defined Ȥ̾Υޥ뤳ȤϤ켫Τ undefined Ǥ<a href="#u.1.21">u.1.21</a> ȡˡºݤˤϸݤޤִꥹ defined ȤȡΤޥϡ˸ݤޤϤˤäƤϡˤĤüʽƹˡŪʤΤȤưΤ⤢ޤŪʻͤǤϤޤ</p>
<p> : 2ĤΥץΤĤǤǤ 1 </p>
<p>:</p>
<pre>
*1 C90 6.8.1 Conditional inclusion դ -- Semantics ̣§
C99 6.10.1 Conditional inclusion -- Semantics
</pre>
<h4>u.1.20. #undef ΰ defined, __LINE__, etc. Ǥ</h4>
<p>#undef ΰ defined, <tt>__LINE__</tt>, <tt>__FILE__</tt>, <tt>__DATE__</tt>, <tt>__TIME__</tt>, <tt>__STDC__</tt>, <tt>__STDC_VERSION__</tt> Ǥ undefined Ǥ*1, *2, *3</p>
<p>:</p>
<pre>
*1 C90 6.8.8 Predefined macro names 餫줿ޥ̾
C99 6.10.8 Predefined macro names
*2 Amendment 1 / 3.3 Version macro
</pre>
<p>*3 C99 Ǥϡ<tt>__STDC_HOSTED__</tt>, <tt>__STDC_ISO_10646__</tt>, <tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX</tt> ɲä줿</p>
<h4><a name="u.1.21">u.1.21. #define Υޥ̾ defined, __LINE__, etc.</a></h4>
<p>#define ޥ̾ defined, <tt>__LINE__</tt>, <tt>__FILE__</tt>, <tt>__DATE__</tt>, <tt>__TIME__</tt>, <tt>__STDC__</tt>, <tt>__STDC_VERSION__</tt> Ǥ undefined Ǥ*1, *2, *3</p>
<p> : 2ĤΥץΤĿǤǤ 1 </p>
<p>:</p>
<pre>
*1 C90 6.8.8 Predefined macro names 餫줿ޥ̾
*2 Amendment 1 / 3.3 Version macro
</pre>
<p>*3 C99 Ǥϡ<tt>__STDC_HOSTED__</tt>, <tt>__STDC_ISO_10646__</tt>, <tt>__STDC_IEC_559__</tt>, <tt>__STDC_IEC_559_COMPLEX</tt> ɲä줿</p>
<h4>u.1.22. ## 黻Ҥˤä pp-token 줿</h4>
<p>## 黻Ҥˤä pp-token Ϣ뤵줿̤ͭʡñΡpp-token ˤʤʤФʤޤǤʤ undefined Ǥ*1<br>
ΥץǤ pp-number Ȥ Standard C ǿꤵ줿 pp-token ˤƤޤ</p>
<p>:</p>
<pre>
*1 C90 6.8.3.3 The ## operator ##黻 -- Semantics ̣§
C99 6.10.3.3 The ## operator -- Semantics
</pre>
<h4>u.concat. C99: ## 黻Ҥˤä pp-token 줿</h4>
<p>// C99, C++ ǤϥȥޡǤ pp-token ǤϤޤ## 黻ҤˤäƤ sequence 褦ȤƤ⡢η̤ undefined Ǥ<br>
⤽⥳Ȥϥޥ줿Ÿ줿ꤹ a space ѴƤΤǡޥˤäƥȤ뤳ȤϤǤޤ</p>
<h4>u.1.23. # 黻Ҥˤä pp-token 줿</h4>
<p># 黻Ҥˤִη̤ͭʡñΡʸƥˤʤʤФʤޤʤʤä undefined Ǥ*1<br>
Ϥäȯ뤳ȤΤʤǤΥץǤ狼褦ˡ\ ƥγˤȤ̯ʾΡΤޤüʾ˸¤ޤΥץ⡢ץץǿǤʤƤ⥳ѥեǿǤǤ礦ǽʬǤϤꡢۤä̤ƤޤäꤹΤϤޤ</p>
<p>:</p>
<pre>
*1 C90 6.8.3.2 The # operator #黻 -- Semantics ̣§
C99 6.10.3.2 The # operator -- Semantics
</pre>
<h4>u.1.24. ޥƤӽФ˶ΰ</h4>
<p>ؿͥޥθƤӽФ˶ΰΤ C90 Ǥ undefined Ǥ*1<br>
ΰĤΥȡȲᤷ reasonable ʥޥŸԤȤϡC99 ǹˡȤʤä褦˽ʬǽǰ̣Τ뤳ȤǤ*2<br>
undefined ʵ˽ϤͭյͿ뤳ȤΤǤ룱ĤǤϤǤäƤ⡢ʤȤ pre-C99 ǤϤˤϰܿʤΤǡ˥ФΤŬǤ礦</p>
<p> : 2ĤΥץΤĤޤϣĿǤǤ 1 </p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Semantics ̣§
*2 C99 6.10.3 Macro replacement -- Semantics
</pre>
<h4><a name="u.1.25">u.1.25. ޥƤӽФ˥ȥΰ</a></h4>
<p>ؿͥޥθƤӽФʣԤˤޤ뤳ȤǤޤ
äơ preprocessing directive ʶ路Ԥޤޤ뤳Ȥꤨޤη̤ undefined Ǥ*1<br>
ְפϡåפ #if group ˤ pre-processing directive ԤȲᤵǤ礦</p>
<p>:</p>
<pre>
*1 C90 6.8.3 Macro replacement ޥִ -- Semantics ̣§
C99 6.10.3 Macro replacement -- Semantics
</pre>
<h4><a name="u.1.26">u.1.26. Function-like ޥ̾ǽޥŸ</a></h4>
<p>C90 ǤϡޥŸη̤ function-like ޥ̾ǽΤ undefined ȤƤޤɲä줿Ǥ̣ʤΤǤ<a href="#2.7.6">2.7.6</a> ȤƤ*1<br>
Validation Suite Ǥ V.1.2 ޤǤϤƥȤ˴ޤƤޤV.1.3 ޤ</p>
<p>:</p>
<p>*1 ISO/IEC 9899:1990 / Corrigendum 1<br>
C99 ǤϤεϺ졢ʣʵ꤬ɲäƤ롣</p>
<h4><a name="u.1.27">u.1.27. ̵ʥǥ쥯ƥ</a></h4>
<p>Ԥκǽ pp-token # Ǥθˤ pp-token ϡ̾ # μ preprocessing directive ǤʤФʤޤ# ιԤϤʤǧƤޤ*1<br>
Ƭ # ̵ʥǥ쥯ƥ֤䤽¾ pp-token ³Ȥϡץץ violation of syntax or constraint ǤϤޤʤʤ顢<a href="#u.1.25">u.1.25</a> Ǥ狼褦ˡ# ǻϤޤԤ٤ƥץץǥ쥯ƥֹԤǤʤФʤʤ櫓ǤϤʤǤɤ줬ץץǥ쥯ƥֹԤǤΤϡʸ̮ˤäƷޤΤʤΤǤ</p>
<p>ʽϤ undefined ȤƤޤֵꤵƤʤפȤ̣Ǥ undefined ΰǤϤϲ餫οǥåФȤ˾ޤޤɬץץǤɬפϤޤץץιԤΤޤϤСѥեǥ顼ˤʤϤǤ顢Ǥ⤫ޤޤץץ #ifdefined #if defined Ȳᤷƥ顼ˤʤ餺ޤʤɤȤȤʤСϤޤ<br>
C99 Ǥ # non-directive Ȥ̣ʤΤɲäޤƤϲꤵƤ餺¾ undefined Ǥȸޤ*2</p>
<p>:</p>
<pre>
*1 C90 6.8 Preprocessing directives -- Syntax ʸ§
*2 C99 6.10 Preprocessing directives -- Syntax
</pre>
<h4>u.1.28. directive ̾˥ޥϻȤʤ</h4>
<p># ǻϤޤԤץץǥ쥯ƥ֤Ǥ뤿ˤϡ pp-token ȤƤ directive ̾ޤDirective ̾Ϸ褷ƥޥŸޤ<br>
# μ directive ̾ǤϤʤ identifier ơ줬ޥ̾Ǥäϡ¸ߤʤǥ쥯ƥ֤ȿǤ뤫̾ΥƥȤȤߤʤƥޥŸƽϤ뤫ΡĤνꤨޤԤǤⲿ餫οǤ˾ޤޤԤǤϥѥեǥ顼ˤʤϤǤ顢Ǥ⤫ޤޤޥŸΤˡץץץǥ쥯ƥ֤Ȥƽ뤳ȤϡäƤϺޤ</p>
<h4>u.2.1. #if ̤ character escape sequence </h4>
<p>ʸƥޤʸ character escape sequence \', \", \?, \\, \a, \b, \f, \n, \r, \t, \v ꤵƤޤʳ \ ǻϤޤ character sequence undefined ǤȤ \ ˾ʸ³ sequence ϡ escape sequence ɲä뤿ͽƤޤ*1<br>
οǤ¿ϥѥեˤޤФߤޤ#if ʸˤ줬äϡץץʳ˿ǤԤϤޤ</p>
<p>:</p>
<pre>
*1 C90 6.1.3.4 Character constants ʸ -- Description
C99 6.4.4.4 Character constants -- Description
C90 6.9.2 Character escape sequences ʸĥɽ
C99 6.11.4 Character escape sequences
</pre>
<p>C99 Ǥ \uxxxx, \Uxxxxxxxx η UCN (universal-character-name) Ȥ escape sequence ɲä줿</p>
<h4>u.2.2. #if ˥եȥȤʥӥåȥեȱ黻</h4>
<p>Υӥåȥեȱ黻Ǥϡ operandʥեȥȡˤͤǤä꺸 operand ηΥӥåȿʾǤäꤷ undefined Ǥ*1<br>
#if Ԥˤ줬äϥץץǤ٤Ǥ礦</p>
<p>:</p>
<pre>
*1 C90 6.3.7 Bitwise shift operators ӥåñ̤Υեȱ黻 -- Semantics ̣§
C99 6.5.7 Bitwise shift operators -- Semantics
</pre>
<br>
<h2><a name="4.3" href="#toc.4.3">4.3. Unspecified behavior</a></h2>
<p>Standard C ˤ unspecified ȤʡֵꤷʤפȤˤ⤢ޤϡץǤäƤ⡢νˡϵꤷʤϤϽˡɥȤ˽ɬפʤȤΤǤ<br>
Ϥޤ¿ϤޤǤ⡢ˡˤäƷ̤˰㤤ФΤϡüʾǤüǤäƤ⡢̤˰㤤νФ붲ΤΤФƤϥ˥ФΤ˾ޤȻפޤ<br>
Unspecified ư˰¸ץη̤ undefined Ǥ</p>
<p>ץץǤ unspecified ǡ⤽νˤäƷ̤äƤΤϡΣǤΣĤΥƥȤǤϤ줾졢 pp-token ƿǥåФ뤫ȤܿʤȤ˥Ф뤫ɤǤ 2 Ϳ뤳ȤˤޤޤԤξϡޥǤŸǤɤǤɤȤˤޤ<br>
ʤΤۤ #if Ǥα黻ɾ unspecified Ǥ#if ϤˤäƷ̤Ѥ뤳ȤϤʤΤǡƥȤ˴ޤƤޤ</p>
<h4>s.1.1. # 黻Ҥ ## 黻ҤɾϻꤵƤʤ</h4>
<p>ĤΥޥ # 黻Ҥ ## 黻Ҥä硢Τɤ餬ɾ뤫ϵꤵƤޤ*1<br>
Υץ # ## Τɤ餬ɾ뤫Ƿ̤äƤǤ⡢## ɾ # ϱ黻ҤǤϤʤñʤ pp-token Ȥư졢Ϣη̤ pp-token ƤޤޤޥˤϰܿʤΤǡϤϥ˥ФΤŬǤ</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 6.8.3.2 The # operator #黻 -- Semantics ̣§
C99 6.10.3.2 The # operator -- Semantics
</pre>
<h4>s.1.2. ʣ ## 黻ҤɾϻꤵƤʤ</h4>
<p>ĤΥޥʣ ## 黻Ҥ硢ɾϵꤵƤޤ*1<br>
ΥץǤϡɾˤäƤ pp-token ޤޥˤϰܿʤΤǡϤϥ˥ФΤŬǤ</p>
<p> : 2</p>
<p>:</p>
<pre>
*1 C90 6.8.3.3 The ## operator ##黻 -- Semantics ̣§
C99 6.10.3.3 The ## operator -- Semantics
</pre>
<br>
<h2><a name="4.4" href="#toc.4.4">4.4. ˥˾ޤ¾Υ</a></h2>
<p>Undefined, unspecified Τۤˤ⡢Ϥ˥ФȤ˾ޤĤޤ˽ޤ</p>
<p>w.1.*, w.2.* ϵʤǤϤޤäץǤºݤˤϲ餫δְ㤤Ǥ礬¿ǤפʤΤǤw.1.* ϥץץ˸ͭǡw.2.* ϥѥեǤα黻Ȥⶦ̤ #if ǤǤ</p>
<p>w.3.* translation limits Ȥ implementation-defined ¦̤ĵ˴ϢΤǤʤݾڤƤǾ¤ͤĶ translation limits 뤳ȤϡϤʼ夲뤳ȤǤȤޤ¾ǡ˰¸ץϰܿ¤ƤޤȤȯޤäơǾ¤ͤĶ translation limits ƤϤǤϡΤȤѤץФƥ˥ФΤ˾ޤȹͤޤ<br>
ʲΥƥȤǤϡŬڤʿǥåФйʤȤޤw.3.* ϽϤ translation limits ʤκǾͤȰפƤơΤᤳΥץ뤬顼Ȥʤ뤳ȤƤ뤳ȤˤޤǾͤʤ˥顼ȤʤΤԹʤǤƤ뤫ɤ n.37.* Ǥ狼ˡ</p>
<h4>w.1.1. /* </h4>
<p>ȤͥȤƤꥳȥޡʤäꤹ륽ΥԥߥϤ褯ޤΤ/* /* */ */ ȤȤΥͥȡ */ */ Ȥ sequence ϣøˤϤʤΤǡѥեɬ顼ˤʤޤ*/ æƤϼΥȤνޤǤȤȲᤵΤǡ顼ˤʤʤȤޤϴʴְ㤤Ǥꡢץץ˥ФȤǤѥեDz餫Υ顼ˤʤäǤ⡢λˤϸϤ狼ʤʤäƤޤ</p>
<p> : 4</p>
<h4>w.1.2. ޥκ³Υȡ</h4>
<p>ޥκִꥹȤθΥȡޤ礬ΤϡK&R 1st. ǤϰۤλͤǤꡢStandard C ǤϸǧλͤǤλ֤ΤϿҾʥޥǤϤޤȤִꥹȤ¾ function-like ޥƤӽФȾʬΤϡư۾ʥޥǤºݤˤϥޥδְ㤤Ǥǽ礭˥ФȤ˾ޤޤObject-like ޥ function-like ޥ̾ŸΤϼºݤˤޤreadability ΰǤ</p>
<p>ˤĤƤϵʤΤ꤬ۤޤִꥹǴ뤷ʤϥ顼violation of constraintˤȤ٤ǤȻפޤ<a href="#2.7.6">2.7.6</a> ȡˡ</p>
<p> : 4ĤΥץΤĤǤǤ 2 </p>
<h4>w.2.1. #if ̾λѴ̵Ѵ</h4>
<p>դ̵Ȥκ黻˺ݤƤϡ̾λѴפԤ졢դ̵ѴޤդǤäͤѤޤǤäϤ줬礭Ѵޤϥ顼ǤϤޤ۾ʤΤǤꡢδְ㤤ǤǽޤϤ˥ФȤ˾ޤޤץץǤϤθݤ #if ˸ޤ</p>
<p> : 2</p>
<h4>w.2.2. #if ʤ黻 wrap round</h4>
<p>̵黻η̤ϰϳȤʤä wrap round 뤳ȤˤʤäƤΤǡ顼ˤϤʤޤְ㤤βǽΤǥ˥ФΤ˾ޤǤ礦</p>
<p> : 1</p>
<h4>w.3.1. 31 ĤĶޥѥ</h4>
<h4>w.3.2. 31 ĤĶޥ</h4>
<p>w.3.? Ϥ C90 translation limits ˴ؤƥȤǤ
ƤϼΤȤǡפʤǤ礦n.37.* ٤ƤߤƤ</p>
<p> : 13.1., 3.2 ϣĤΤɤ餫ǤФࡣ</p>
<h4>w.3.3. 31 ХȤĶĹ identifier</h4>
<p> : 1</p>
<h4>w.3.4. 8 ٥Ķ #if (#ifdef, #ifndef) Υͥ</h4>
<p> : 1</p>
<h4>w.3.5. 8 ٥Ķ #include Υͥ</h4>
<p> : 1</p>
<h4>w.3.6. #if 32 ٥ĶΥͥ</h4>
<p> : 1</p>
<h4>w.3.7. 509 ХȤĶĹʸƥ</h4>
<p> : 1ϥץץåǤʤƤ⡢ѥΤǤɤȤޤ</p>
<h4>w.3.8. 509 ХȤĶĹ</h4>
<p> : 1</p>
<h4>w.3.9. 1024 ĤĶޥ</h4>
<p> n.37.9 ƱΤˤʤäƤޤTranslation limits εǤϡ줬Ǥ⤪ޤʤΤʤΤǤ1024 ĤΥޥȤ߹ߥޥ뤫ɤɸإåޥ뤫ɤǡäƤޤΥץǥƥȤޥϥإåեǤ 1024 ܤǤwarns.t, warns.c ˤϤƤޥĤΤǡΥޥϤɤˤƤ 1024 ܤĶ뤳ȤˤʤޤϤŬʤȤǥ˥ФȤԤޤ</p>
<p> : 1</p>
<h4>w.tlimit. C99 translation limits</h4>
<p>C99 Ǥ translation limits ˳礵ޤ
ĶͤĽϤǤ⡢portability ΤˤϵĶ륽ФƤϥ˥ФȤ˾ޤޤ</p>
<p> : 8ƹܤˤĤơ1 ġ3.1, 3.2 Ϥɤ餫ǤǤФࡣ3.7 ϥѥΤǤʤ顢Ǥġ<br>
ƥѥץ test-l ǥ쥯ȥˤ롣ʤl_37_8.c ϥץץϤǤƤ⥳ѥϤǤʤǤ롣</p>
<h4>w.3.1.L. 127 ĤĶޥѥ</h4>
<h4>w.3.2.L. 127 ĤĶޥ</h4>
<h4>w.3.3.L. 63 ХȤĶĹ identifier</h4>
<h4>w.3.4.L. 63 ٥Ķ #if (#ifdef, #ifndef) Υͥ</h4>
<h4>w.3.5.L. 15 ٥Ķ #include Υͥ</h4>
<h4>w.3.6.L. #if 63 ٥ĶΥͥ</h4>
<h4>w.3.7.L. 4095 ХȤĶĹʸƥ</h4>
<h4>w.3.8.L. 4095 ХȤۤĹ</h4>
<h4>w.3.9.L. 4095 ĤĶޥ</h4>
<br>
<h2><a name="4.5" href="#toc.4.5">4.5. ¾γƼʼ</a></h2>
<p>ʲˤϡϤλȤ䤹ʼ˴ؤƤޤq.1.1 ʳϥץץǥƥȤ뤳ȤΤǤʤΤǤ</p>
<p>q.1.* ư˴ؤΤǤ<br>
q.2.* ϥץĥǽ˴ؤΤǤ<br>
q.3.* ϲƯ륷ƥ䥷ƥǤθΨ˴ؤΤǤ<br>
q.4.* ϥɥȤ˴ؤΤǤ</p>
<p>ˤϡʤŪɾˤ餶ʤΤ⤢ޤ
ޤҴŪɾǤΤΡμ٤ǤʤΤ⤢ޤ<a href="#6.2">6.2</a> ͤˡŬ˺Ƥ</p>
<h3><a name="4.5.1" href="#toc.4.5.1">4.5.1. ư˴ؤʼ</a></h3>
<h4>q.1.1. translation limits</h4>
<p>Translation limits ˤĤƤϡʤǤϺ¤λͤ䤫˵ꤵƤޤºݤνϤϤͤäƤ뤳Ȥ˾ޤޤȤˡ#if Υͥȥ٥롢#include Υͥȥ٥ˤĤƤϡC90 㤹ȹͤޤ<br>
C99 Ǥ translation limits ˰夲Ƥޤޤidentifier ĹˤĤƤϡ255 Х̤¤ƤΤ obsolescent featureѻͽεˤȤƤޤ<br>
q.* ιܤǤϤƥѥץ뤬ѰդƤޤtest-l ǥ쥯ȥˤ l_37_?.t, l_37_?.c ǡ줾켡Τ褦 translation limits ƥȤޤ C99 ΤΤ˾äƤޤʤC++ Standard Υɥ饤ȤƤ translation limits ͤϲäƤˡ</p>
<blockquote>
<table>
<tr><th>37.1L</th><td>ޥΥѥο</td><td>255</td></tr>
<tr><th>37.2L</th><td>ޥƤӽФΰο </td><td>255</td></tr>
<tr><th>37.3L</th><td>identifier Ĺ </td><td>255 bytes</td></tr>
<tr><th>37.4L</th><td>#if Υͥȥ٥ </td><td>255</td></tr>
<tr><th>37.5L</th><td>#include Υͥȥ٥ </td><td>127</td></tr>
<tr><th>37.6L</th><td>#if Υͥȥ٥ </td><td>255</td></tr>
<tr><th>37.7L</th><td>ʸƥĹ </td><td>8191 bytes</td></tr>
<tr><th>37.8L</th><td>ԤĹ </td><td>16383 bytes</td></tr>
<tr><th>37.9L</th><td>ޥο </td><td>8191</td></tr>
</table>
</blockquote>
<p>l_37_8.c ϥѥ뤷Ƥ¹ԥץˤϤʤޤץץǤз̤Ф狼ޤѥ뤹 cc -c l_37_8.c Ȥƥ֥ȥեäƤץץСѥΤɤĹιԤ뤳ȤǤ뤫狼ޤ</p>
<p> : 9ΥץˤĤƳ 1 ѥΤΥƥȤϴޤޤʤ</p>
<h4>q.1.2. ǥåŪΤ</h4>
<p>ǥåФ뤳ȤϽФΤΡ狼ˤäꡢޤꡢθĽ꤬狼ʤäꤹΤ⤢ޤοǥåϾܤФ뤬̤μοǤϥԥȤƤȤ⤢ޤǥåñ "syntax error" ʤɤȤΤǤϤʤʤְ㤤ǤΤƤ餤ΤǤĽϹԤơΥȡŦƤ餤ΤǤ<br>
ޤ#if section бطΥ顼Ǥϡб٤ԤƤʤȡɤ˥顼θΤ狼ޤ<br>
ƱΥ顼ФƤĤοǥåʣƽФΤϡޤޤ</p>
<p> : 10</p>
<h4>q.1.3. ֹɽΤ</h4>
<p>ץץåѥΤϤֹ椬ƤޤΤϺޤ
Ͽǥå˸ΤǤصΩܤˤƤޤκϡޤǤΥץץΥƥȤǹֹ椬Τɽ줿ɤǹԤޤ</p>
<p> : 4</p>
<h4>q.1.4. ˽</h4>
<p> : 20 Validation Suite Τɤ줫Υץ˽ꡢǤ٤ǤʤǤϤˤϡΤ褦˸롣˽פȤΤϡ^C ǤʤʤäꡢꥻåȤʤʤäꡢե륷ƥĤꤹΤǡǡפȤΤϡﳲϤʤΤΡǽλƤޤΤؤ</p>
<ol>
<li>n_std.cstrictly conforming programˤ˽ 0 <br>
<li>n_std.c ǽǤ 10 ǤĽθʬ˥ƥȤ˽顢˽פʬˡ<br>
<li>ʳΤɤ줫Υץ˽ 10 <br>
</ol>
<h3><a name="4.5.2" href="#toc.4.5.2">4.5.2. ץȳĥǽ</a></h3>
<h4>q.2.1. Include directory λ</h4>
<p>ɸإåե֤뤤 include directory ϺǤñʾϣĽ˸ꤵƤޤʣ¸ߤ⤷ФФꡢ桼ꤷʤФʤʤ⤢ޤޤ桼٥ΥإåեˤĤƤϡȥǥ쥯ȥˤꤢޤ̤Υǥ쥯ȥˤäơ줬̤Υإåե include ϡϤˤäƥǥ쥯ȥ뵬§ۤʤޤɤˤƤ⡢include directory ϥץĶѿˤäƥ桼Ū˻ꤹ뤳ȤǤʤؤǤ-I ץȤϤ¿ˡޤʣΥǥ쥯ȥ˥ϡƥǴΥǥ쥯ȥץʤؤǤ뵬§ΤΤѹ륪ץˤ⡢¸ͳޤ</p>
<p> : 4</p>
<h4>q.2.2. ޥץ</h4>
<p>֥ͥޥǤʤѥǤ륪ץϡͭѤʤΤǤ-D ץȤϤ¿ˡˤäơƱΥäͤΥ֥Ȥäꡢäƥǥѥ뤷ꤹ뤳ȤǤޤִꥹȤά 1 ϤȣĤΥȡϤȤꡢȤϥɥȤΤʤФʤޤ<br>
Ĥޥ⥪ץǤǤϤ⤢ޤ</p>
<p> : 4</p>
<h4>q.2.3. ޥäץ</h4>
<p>ϸͭȤ߹ߥޥäץ⡢äۤɤǤ礦Τ褦ʼबޤ</p>
<ol>
<li>-U
ȤäץǣĤΥޥäΡ<br>
<li>ϸͭȤ߹ߥޥ礷̵ˤ륪ץ
<br>
<li>Standard C ǶػߤƤȤ߹ߥޥ_ ǻϤޤʤ unix ˤ礷̵ˤ륪ץ<br>
</ol>
<p> : 2 1 ޤ 2 Υץ 2 3 <a href=#d.1.5>d.1.5</a> ǤǤɾƤΤǡǤоݤȤʤ</p>
<h4>q.2.4. Trigraphs ץ</h4>
<p>Trigraphs ɬפʴĶǤϾѤΤǤ礦¿δĶǤɬפʤΤǤۤȤɻȤޤϥѥΥץͭˤ̵ˤǤۤɤǤ</p>
<p> : 2</p>
<h4>q.2.5. Digraphs ץ</h4>
<p>Digraphs trigraphs ƱͤˡѥΥץͭˤ̵ˤǤۤɤǤ礦</p>
<p> : 2</p>
<h4>q.2.6. ˥ꥪץ</h4>
<p>Violation of syntax rule or constraint ǤϤʤΤФ륦˥ϡʤ٤¿Ū˽ФƤ줿ۤΩޤˤäƤϤ뤵Ȥ⤢ޤ˥Υ٥ꤹ륪ץޤϼऴȤ˥˥ͭˤ̵ˤꤹ륪ץϡߤΤǤ</p>
<p> : 4</p>
<h4>q.2.7. ¾Υץ</h4>
<p>ץץˤϤΤۤˤͭѤʥץĤꤨޤ
䤿˥ץ¿ΤѻǤʤȲλؤʤΤ⤢ޤŪ褯ΤϡֹϤʤץ-P ¿ˤǡϣøʳŪ˻ȤΤȻפޤȤ˽ϤΤ⤢ޤϣӤΥޥɥץåˤäƤϡǥåΥ쥯ȤϤΤۤǼ¸ɬפΤ⤢ޤޤץץΩץǤϤʤ룱ѥѥǤϡץץνϤꤹ륪ץߤȤǤ<br>
C90 (C95), C99, C++ ̤륪ץɬפʤΤǤ C99 C++ θߴ夲C++ Υץץ C99 ΤΤ˶Ť˥ץͭѤǤ礦<br>
Makefile 뤿Ρեΰ¸طҹԤϤ륪ץäƤץץå⤢ޤ</p>
<p> : 10</p>
<h4>q.2.8. #pragma ˤĥ</h4>
<p>Standard C Ǥϡϸͭ directive Ϥ٤ #pragma sub-directive ȤƼ¸뤳ȤˤʤäƤޤץץϤƤ #pragma ΤޤޥѥϤޤ #pragma ϼʬȤޤץץ #pragma ¿Ϥޤ</p>
<p>#pragma once ȽƤإåեϲ #include Ƥ٤ɤޤʤȤΤޤ¿ include 뤿Ǥʤ®٤夲뤿ͭʤΤǤ#pragma once Ȥ鷺ˡإåեΤ㤨</p>
<pre style="color:navy">
#ifndef __STDIO_H
#define __STDIO_H
...
#endif
</pre>
<p>ȤäǤޤƤȡưŪˤϥʤ褦ˤϤ⤢ޤ</p>
<p><b>mcpp</b> ˤϥإåե "pre-preprocess" ơ¿ΥإåեܤˤޤȤƤޤȤȤΤǤ #pragma directive ⤢ޤʤ#include ǼޤإåäץץƽϤ˸줿 #define directive ޤȤƽϤɲäȤǽǤΥѥǤϤ include ޤ pre-preprocess إåեϡȤ #if ʤʤΤǥʤꡢޥƤӽФʤʤޤե⣱ĤǤߤޤ̤Ȥƥץץ®ʤޤ<br>
إå pre-compile ȤǽĽϤ⤢ޤϼȤ C++ ǵʥإåե뤿˹ͤ줿ΤΤ褦Ǥpre-compiled header ΥΥإåեιפ礭ʤ뷹ꡢʤȤ C Ǥ®ٸθ̤Ϥޤʤ褦ǤPre-compiled header Ƥ compiler-proper ͤ˰¸Ƥơ桼ˤϸʤ black box ˤʤȤ⡢Ǥ<br>
ɤˤƤ⡢ʾϤ٤ƥץץ®뤿ΤΤǡʳΰ̣ϤޤäơεǽϤǤɾ<a href="#q.3.1">q.3.1</a> ɾ뤳Ȥˤޤ</p>
<p>Multi-byte character encoding ꤹ #pragma ĽϤ⤢ޤץץå䥳ѥ˥ʸ encoding ˡȤƤϡʤΤǤ</p>
<p><b>mcpp</b> ϥץץȥ졼ǥХåϤ #pragma äƤޤ̾ΥǥХåǤϥץץΥǥХåϤǤʤΤǡϥץץåǤǤʤפʵǽǤεǽϥץǻꤹ #pragma ȤۤǥХåĽǤΤǻȤ䤹ʤޤ</p>
<p>顼䥦˥ΥȥλΤ褦ˡ̾ϥѥץǻꤹ뤳Ȥ #pragma ǼƤϤ⤢ޤ#pragma Standard C νϤǤ portability ꤬ʤȤȡξꤷƻǤȤĹ꤬ޤѹϥؤ뤳ȤˤʤȤû⤢ޤʤ顢ѥץǤƤ餤ΤǤ</p>
<p>ʳ #pragma ǥץץǽΤϡޤꤢޤ<br>
Ȥǡ#pragma sub-directive implementation-defined Ǥ뤿Ʊ̾ sub-directive Ϥˤäưۤʤ̣Ķ줬ޤ̾ξͤ빩פ˾ޤޤGCC 3 Ǥ #pragma GCC poison Ȥդ GCC Ȥ̾ǻϤޤޤɤˡǤ<b>mcpp</b> V.2.5 Ϥޤͤ #pragma MCPP debug Ȥդ MCPP Ȥ̾ǻϤޤ褦ˤޤ</p>
<p> : 10</p>
<h4>q.2.9. ĥǽ</h4>
<p>ĥǽ #pragma Ǽ뤳ȤˤʤäƤޤȤ̤˥ץץοͤƤȤ #pragma ǤϤʤǥ쥯ƥ֤⤢ޤ</p>
<p>Linux ΥƥإåǤ GCC #include_next ȤƤޤϥƥإå̵ѤʣƤ뤳ȤˤΤǡȤǤϤޤGCC / cpp ˤϤΤۤˤ #warning, #assert εʳΥǥ쥯ƥ֤ޤ⤢ޤɬδʤΤǤ</p>
<p>GCC / cc1 Ǥɸ⡼ɤưΤۤ traditional ⡼ɤλͤΥץޤ<b>mcpp</b> ˤ¿ͤưͤΥץޤߤˤϤʤΰ̣ޤ</p>
<p> : 6</p>
<h3><a name="4.5.3" href="#toc.4.5.3">4.5.3. ¹ԸΨ</a></h3>
<h4><a name="q.3.1">q.3.1. ®</a></h4>
<p>ΤȿǤŪΤȤϺǤפʤΤǤ®٤®ˤȤϤޤ<br>
®ٸΤ #pragma 䥪ץươ̤ȤƤɤ®٤ˤʤ뤫ޤ</p>
<p> : 20ϤϤ˥ԡΡ⤷ʤץ®٤ 20 ȤŪˤɤ٤ˤäդ롣Ūʼ٤ <a href="#6.2">6.2</a> ͡Ū®٤Ϥϡɥˤäư㤦ΤǡƱ٤ΥϡɥȤӤ롣ޤƱץƤ⡢ɤ߹ޤϤɸإå̤ˤäƽ֤äƤ롣<b>mcpp</b> ȤӤΤɤ<br>
֤¬ˤϡUNIX ϤǤ time ޥɤȤbash, tcsh ǤȤ߹ߥޥɤǤ)Windows ǤϡCygWIN Ȥʤ顢Ϥ bash time ޥɤ롣ޤWindowsNT Ρ֥åȡפ TimeThis ȤƱͤΥޥɤ (*1)餬ȤʤĶǤϡtool/clock_of.c ѥ뤷ƻȤʤʤΤǤ뤬ˡ<br>
ǶΥϡɥǤϥץץʤɰ֤ǽäƤޤȤ¿Τǡʤʤ֤¬뤳ȤǤʤ
Windows Ǥ Windows.h include ԹŤΤǡ줬Ȥ롣
UNIX ϤǤ glibc ΥʤɤŤǻȤ</p>
<p>:</p>
<p>*1 WindowsNT ΥåȤΥץˤ WindowsXP ǤϻȤΤȻȤʤΤȤ뤬TimeThis ϻȤ褦Ǥ롣</p>
<h4>q.3.2. </h4>
<p>̤Ͼʤ˱ۤȤϤޤȤ˥ƥͿ̤˸¤ϡڼ¤Ȥʤޤ</p>
<p>ץץϥѥΰǤΤǡºݤˤϽΤΥ̤ȤʤޤץץΩץץåˤäƹԤϡ̾ϥѥΤΤۤΤǡץץåΥ̤ϤޤˤʤʤǤ礦ޥ¿ʤɡץץåΤۤ뤳Ȥ⤢ޤ̤ˤϥץ礭ФǤϤʤǡꥢλ̤ޤޤޤ</p>
<p> : 20
¬ΤϤϤʤʤŬˡʤ
UNIX ϤǤ glibc firefox Τ褦礭ʥ make ʤ top Ω夲Ƥ cc1 mcpp Υ̤Ϥ狼롣
Windows Ǥϥޥ͡Ω夲ơWindows.h include Ȥ狼롣</p>
<h4><a name="q.3.3">q.3.3. ܿ</a></h4>
<p>ץץåΤΤΥΰܿϡϤδ¸Υץץåȼؤ褦Ȥ䡢ʬȤץǡȤꥫޥꤷ褦ȤˡȤʤޤΤ褦ɾоݤȤʤǤ礦</p>
<ol>
<li>Ƥ뤫ʸƤʤ 0 ˡ<br>
<li>¿νϡϣӤбƤ뤫<br>
<li>ܿǤϡϣӤϰϤϤɤɤ郎Ƥ뤫<br>
<li>ܿ䤹<br>
<li>ܿΤΥɥȤƤ뤫<br>
</ol>
<p> : 20䤬ɤΤϣȾ餤ˤʤ
įǤ롣äơκϤƤäݤǤ롣</p>
<h3><a name="4.5.4" href="#toc.4.5.4">4.5.4. ɥȤʼ</a></h3>
<h4>q.4.1. ɥȤʼ</h4>
<p>d.* Ǥ Standard C ΡֽפˤĤƤΥɥȤ뤫ʤޤǤϥɥȤΤ¾ʼɾޤ<br>
ɥȤȤƤϽΤۤˡ¡ΤΤɬפǤ礦</p>
<ol>
<li>Standard C ȤΰƱ<br>
<li>ץλ͡<br>
<li>ǥåΰ̣<br>
</ol>
ΤۤStandard C ʬޤץץΤλͤβ⤢С˱ۤȤϤޤ<br>
ˤĤơΤɤߤ䤹ɾоݤȤʤǤ礦ܿΤΥɥȤ <a href="#q.3.3">q.3.3</a> ɾ˴ޤޤ<br>
<p> : 10</p>
<br>
<h2><a name="4.6" href="#toc.4.6">4.6. C++ Υץץ</a></h2>
<p>ýϤ C++ ϤȤä뤳Ȥ¿ʤäƤޤξϥץץåϣä C++ ȤƱΤȤƤ褦ǤΤξԤΥץץϤۤȤƱʤΤǡ虜虜̤ΥץץåѰդɬפϤʤǤ礦ξԤϤޤäƱǤϤޤ</p>
<p>C++ Standard C90 ٤ȡC++ Υץץ C90 Υץץ˼λͤդäΤˤʤäƤޤ</p>
<ol>
<li>Basic source character set ˴ޤޤʤ character ϡtranslation phase 1 \Uxxxxxxxx η Unicode Σ sequence Ѵ롣ơ translation phase 5 Ǽ¹ԻʸåȤ˺Ѵ롣*1<br>
<li>// ޤǤȤȤ롣*2<br>
<li>::, .*, ->* 줾죱Ĥ pp-token Ȥư*3<br>
<li>#if Ǥ true, false boolean literal Ȥơ줾 1, 0 ɾ롣*4<br>
<li>ISO C : Amendment 1 (1995) Ǥɸإå <iso646.h> ǥޥȤ 11 identifier operator ϡ٤ƥޥǤϤʤ token Ǥ̵̣ʻ͡ˡ(*3) Ʊͤˡnew, delete operator Ǥ롣*5<br>
<li>ޥ <tt>__cplusplus</tt> 199711L pre-define Ƥ롣*6<br>
<li><tt>__STDC__</tt> 뤫ɤȤФɤ뤫 implementation-defined Ǥʵդ C99 Ǥ <tt>__cplusplus</tt> undefined Ǥˡ*6<br>
<li>Translation limits ϼΤ褦˳礵Ƥ롣ϥɥ饤ǤꡢǤϤʤϤ translation limits ɥȤʤФʤʤ*7<br>
<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>
<li>Header name '.' Ĺˡʵʤˤ¤Ϥʤʤä*8<br>
</ol>
<p>C99 ǤϤΤƱͤˤʤäƤޤ¾ϰۤʤޤޤC99 ǤϤˡư p+, P+ Ȥ sequenceidentifier multi-byte character ȤθǧѰޥιˡ #pragma ԤΰΥޥŸġ_Pragma() operator#if long long ʾǤɾܤ wide-character-string-literal character-string-literal wide-character-string-literal ȤƤϢääơ㤬ȯƤޤUCN C99 Ǥ translation phase 5 εˤʤޤUCN ˴ؤ constraint ⾯㤷ƤޤTranslation limits C99 Ǥ C90 ˳礵줿ΤΡC++ Standard ۤɶüǤϤʤǤ㤤ФƤƤޤ</p>
<p>ۤ礭ʰ㤤ǤϤʤȤޤǤ⤳㤦ȡäC++ ƱץץǤޤ櫓ˤϤޤäˤĤƤ⡢C90 (C95) C99 ȤƱΥץץǴ֤˹碌뤳ȤϤǤޤ</p>
<p>ʤC++ <tt>__STDC__</tt> ƤΤϴְ㤤ΤȤǤꡢޤȤǤϤޤ<br>
<tt>__cplusplus</tt> ˤĤƤϡ -D ץϤ⤢ޤǤϥ桼ޥΣĤˤʤäƤޤΤǡŬڤǤ<br>
::, .*, ->* Ĥ token ȤưɤϡץץǤϤۤȤˤʤʤȤǤ˱ۤȤϤޤ</p>
<p>ȤǡC90 (C95), C99, C++ δ֤ǥץץå̤ˤ뤿ˤϡ¹ԻץǻԤ̤˱ƾ嵭νѤȤΤޤȤʼȻפޤ</p>
<p>ʤ<b>mcpp</b> ǤϾ嵭λͤΤΣϡѤ٤Ƽô礭뤿ᡢбƤޤѾϤǤۤȤʤȻפޤ</p>
<ol>
<li>Translation phase 1 Ǥ UCN ؤѴϼƤʤC++ Standard Ǥϡɬ UCN ѴʤƤ⡢Ʊ̤ˤʤʤɤȤƤ롣ѾϤȤ⤫̩ˤϡѴ˾Ʊ̤ˤʤϤϤʤΤǤ롣#if Ǥ UCN multi-byte-character ȤʸӤͤФ狼롣# 黻ҤˤʸǤ⸷̩˸С꤬롣*9<br>
<li>ޥκѥ 255 ĤޤǤǤʤ<br>
</ol>
<p>ʲˡC90 Υץץղä C++ ȼΥץץؤŬΥƥȤޤ<br>
Translation limits ˤĤƤ test-l ǥ쥯ȥˤΰʾΥץѰդƤޤC++ Ǥ translation limits ϥɥ饤ˤʤȤȤ⤢ꡢǤɾоݤȤޤޤheader name Ĺ OS ʤΤǡƥȤоݤȤޤ</p>
<p>:</p>
<pre>
*1 C++ 2.1 Phases of translation
*2 C++ 2.7 Comments
*3 C++ 2.12 Operators and punctuators
*4 C++ 2.13.5 Boolean literals
</pre>
<p>ʤC99 Ǥ <stdbool.h> bool, true, false, __bool_true_false_are_defined ޥȤƤ줾 _Bool, 1, 0, 1 뤳ȤˤʤäƤ롣</p>
<pre>
*5 C++ 2.5 Alternative tokens
*6 C++ 16.8 Predefined macro names
*7 C++ Annex B Implementation quantities
*8 C++ 16.2 Source file inclusion
</pre>
<p>C90 6.8.2 Ǥϡheader name '.' 麸ˤϣʸޤǤݾڤƤʤäC99 6.10.2 ǤϣʸǤ롣C++ ǤϤ¤Ƥ롣</p>
<p>*9 C99 Ǥϡ# 黻Ҥˤä UCN ʸ줿硢\ Ťͤ뤫ɤ implementation-defined Ǥ롣C++ ˤϤεϤʤ<br>
Ťͤϡ UCN ϤϤ multi-byte character ʤΤǡŤͤʤۤɤǤ롣C++ εǤϡŤͤʤΤϡְִäˤʤäƤޤ</p>
<h4>4.5.n.ucn1. UCN ǧ</h4>
<p> : 4</p>
<h4>4.5.n.cnvucn. Multi-byte character UCN ؤѴ</h4>
<p> : 2</p>
<h4>4.5.n.dslcom. // </h4>
<p> : 4</p>
<h4>4.5.n.bool. true, false boolean literal</h4>
<p> : 2</p>
<h4>4.5.n.token1. ::, .*, ->* ϥȡ</h4>
<p> : 2ƥȤ츫褦Ǥ⡢äǽƤƱ褦ˡΥ˥Ф˥ȡϢ뤬פƤޤΤǤϡԲġ</p>
<h4>4.5.n.token2. Operator إȡ</h4>
<p> : 2</p>
<h4>4.5.n.cplus. ޥ __cplusplus</h4>
<p> : 4<tt>__cplusplus</tt> < 199711L ξ 2 </p>
<h4>4.5.e.operat. identifier-like operator ϥޥ̾˻Ȥʤ</h4>
<p> : 2ĤȤ⥦˥οǥåФ 2 </p>
<h4>4.5.u.cplus. #define, #undef __cplusplus</h4>
<p> : 1˥οǥåФ 1 </p>
<h4>4.5.d.tlimit. Translation limits Υɥ</h4>
<p> : 2</p>
<br>
<h1><a name="5" href="#toc.5">5. åץץμ</a></h1>
<p>åץץåεʽ٤ʼȤ̤ˡºݤ˥ץץåȤ˽вդʲ˼夲Ƥߤޤ</p>
<br>
<h2><a name="5.1" href="#toc.5.1">5.1. ɸإåե</a></h2>
<p> Validation Suite ΥץǤϡĤɸإå include ƤޤΥإåƤʤȡץץåΤΤΥƥȤΤˤǤޤ<br>
ʲˡɸإåμ䤹ȤƤޤ</p>
<h3><a name="5.1.1" href="#toc.5.1.1">5.1.1. Ū</a></h3>
<p>ɸإåϵꤵƤؿ䷿ޥ٤ƴޤǤʤФʤʤΤϤǤ˼Τ褦ʾʤФʤʤȤˤʤäƤޤ</p>
<ol>
<li>ꤵƤ餺ͽƤ⤤ʤ identifier ꤷƤϤʤǤϰϤɸإåˤäƷޤäƤʣɸإåǽʣ롢뤤϶̤ϰϤ⤢ˡ*1<br>
<li>äơĤɸإå̤ɸإå include Τ̾Ϥʤ<br>
<li>ʣɸإåɤΤ褦ʽ include Ƥ⡢Ʊ̤ˤʤʤФʤʤ*2<br>
<li>Ʊɸإåʣ include Ƥ⡢<assert.h> ʳƱ̤ˤʤʤФʤʤ*2<br>
<li>Ÿ object-like ޥȤƵꤵƤΤϤ٤ #if ǤʤФʤʤ*3<br>
</ol>
<p>ͽ identifier ϰϤϵꤵƤꡢʳ identifier ϥ桼˲ƤʤФʤޤ'_' ĤޤϣĤǻϤޤ̾Ϥ٤Ʋ餫λѤΤͽƤΤǡϤɸإåǻȤȤǤޤʵդ˥桼 '_' ĤޤϣĤǻϤޤ̾ƤϤʤˡ<br>
ϾʵǤʳŪ̾Ϥ٤ '_' ǻϤޤΤѹʤ Standard C ǤϻȤʤȤȤˤʤޤStandard C Υ饤֥ɸإåενȯȤʤä POSIX Ǥ⡢Standard C εʳ̾</p>
<pre style="color:navy">
#ifdef _POSIX_SOURCE
...
#endif
</pre>
<p>ǰϤळȤˤƤޤʤȤ⤳ʬȤϽϤ Standard C ǤϤʤʤäƤޤޤ</p>
<p>⡢㤨 open(), creat(), close(), read(), write(), lseek() δؿ̾ɸإåˤϸƤʤƤ⡢fopen(), fclose(), fread(), fgets(), fgetc(), fwrite(), fputs(), fputc(), fseek(), etc. δؿ open(), etc. ȤäƼƤСŪ˥桼֤̾뤳Ȥˤʤޤäơɽ open(), etc. <tt>_POSIX_SOURCE</tt> ʬ <unistd.h> ̥إåˤꤷƤ⡢̣ޤ<br>
֥ƥॳؿפ '_' ǻϤޤ̾ѹ뤫Ȥ¾ɬܤΤΤ Standard C ˼뤫ɤ餫Ԥ뤷ޤ</p>
<p>2 ϵƤ뤳ȤǤϤޤɸإå¾ɸإå include ȡ̾ϤɸإåǤʤ̤̾ˤʤΤǡ1 ˤҤäޤ<stddef.h> ɸإå include ꤹΤȿ§Ǥ뤿ˤ <sys/_defs.h> Ȥä̤̾ɸǤϤʤإåѰդơɸإå<stddef.h> Ȥˤ include 褦ˤɤΤǤơǻȤ̾Ϥ٤ '_' ǻϤޤΤˤ뤳ȤǤ*4, *5</p>
<p>3 ϼºݤȤʤ뤳ȤϤʤǤ礦</p>
<p>4
ϸŤϤǤΤäȤǤߤνϤǤϤۤȤбǤƤ褦Ǥ</p>
<pre style="color:navy">
#ifndef _STDIO_H
#define _STDIO_H
...
#endif
</pre>
<p>ȤäɸإåΤˡŪǤΤۤ#pragma once Ȥäĥ directive Ȥˡ⤢ޤ</p>
<p>5 ȤʤΤϡsizeof 䥭㥹ȤȤäޥɸإå˽ƤϤ뤳ȤǤStandard C Ǥϡ#if sizeof 䥭㥹ȤϻȤޤºݤɸإåΥޥ sizeof 䥭㥹ȤȤäƤϤǤϡ#if Ǥ sizeof 䥭㥹ȤȤ褦ǤBorland C 5.5ˡϳĥͤΤĤʤΤǤ礦</p>
<p>桼ʬΥץ #if Ԥ sizeof 䥭㥹ȤȤʤ¤ꡢportability ꤬ȯ뤳ȤϤʤ¾ȯ뤳ȤϼºݤˤϤޤʤǤ礦Υץץμ Standard C ΡֳĥפǤϤʤְæפȸ虜ޤʤʤ顢Standard C Ǥ #if Τ translation phase 4 Ǥꡢ phase Ǥ keyword ¸ߤʤΤǤKeyword phase 7 ǽǧޤPhase 4 Ǥ keyword Ʊ̾Ϥ٤ñʤ identifier Ȥư졢#if ԤǤϥޥȤƤʤ identifier Ϥ٤ 0 ɾΤǡsizeof (int) 0 (0) ȡ(int)0x8000 (0)0x8000 Ȥʤꡢviolation of syntax rule ȤʤޤФƽϤϿǥåФʤФʤޤǥåФʤΤϡStandard C ΡֳĥפǤϤʤְæפǤޤ⤽ phase 4 ǰ keyword ǧȤΤϡץץȤ̵ꡢcompile phase (translation phase 7) "pre"process phase ȤƤΰ̣𤵤ΤȤޤ*6</p>
<p>:</p>
<pre>
*1 C90 7.1.3 Reserved identifiers ͽѤ̻
C99 7.1.3 Reserved identifiers
</pre>
<pre>
*2 C90 7.1.2 Standard headers ɸإå
C99 7.1.2 Standard headers
</pre>
<pre>
*3 C90 7.1.7 Use of library functions 饤֥ؿλˡ
C99 7.1.4 Use of library functions
</pre>
<p>*4 ܤǤϤˡȤƤ롣
ܤϤȤ˽ϤμˤȤäơͤȤʤ¿</p>
<blockquote>
<p>P. J. Plauger "The Standard C Library", 1992, Prentice Hall</p>
</blockquote>
<p>*5 GNU glibc ΥƥǤϡɸإåȤˤä <stddef.h> ¾ɸإåʣɤ߹ޤ褦ˤʤäƤ뤬λΤͽ줿ϰϤ̾Τ褦Ǥ롣ϵʰȿȤϸʤɸإå readability »ʤƥʥˤΤǡɤˡǤϤʤ<sys/_defs.h> ȤäեȤۤɤ</p>
<p>*6 <a href="#2.3">2.3</a>, <a href="#3.4.14">3.4.14</a> ȡ
</p>
<h3><a name="5.1.2" href="#toc.5.1.2">5.1.2. <assert.h></a></h3>
<p>˸ġɸإåƤޤ
ĤνϤ°ɸإåȡǤ¿Τ <assert.h> <limits.h> Τ褦ǤΣĤϺǤñʥإåʤΤǤC90 ǿꤵ줿ΤǤ뤿ᤫְ㤨뤳Ȥ褦ǤΣĤˤĤƤϡȤˤ⾯ޤ</p>
<p>ޤ <assert.h> Ǥ*1, *2<br>
¾ɸإåȰäƤϡ include ƤƱȤ櫓ǤϤޤNDEBUG Ȥޥ桼뤫ʤˤäơinclude 뤿Ӥ˷̤ѤޤʤΥإåɬפ˱Ƥ</p>
<pre style="color:navy">
#undef NDEBUG
#include <assert.h>
assert( ...);
</pre>
<p>ȤȤΤǤơǥХåΤȤ</p>
<pre style="color:navy">
#define NDEBUG
#include <assert.h>
assert( ...);
</pre>
<p>ȤƤޤNDEBUG ƤСassert( ...); ˻ĤäƤƤ⡢ޥŸȾäƤޤޤ... ѤļǤäƤ⡢ɾʤΤǡѤȯʤȤաˡ</p>
<p>ȤǤ뤿ˤϡ<assert.h> </p>
<pre style="color:navy">
#ifndef _ASSERT_H
#define _ASSERT_H
...
#endif
</pre>
<p>ʤɤȤǤǤϤޤ
#pragma once ʤɤ⡢ƤϤޤ</p>
<p>ޤΤȤ狼褦ˡassert() ϥޥǤꡢNDEBUG ˤäƤѤޤ<assert.h> Ϥ #undef assert ȤǡNDEBUG ˱ assert ޥʤɬפޤ<br>
assert( expression) ȤƤӽФǤϡNDEBUG ƤʤСexpression Ǥв⤻ǤФλݤɸ२顼Ϥ𤷤ޤϡexpression Τޤ̤ɽʥޥäƤŸˡΥΥե̾ȹֹɽޤϥץץå # 黻Ҥ <tt>__FILE__</tt>, <tt>__LINE__</tt> ޥƤСñ˼¸Ǥޤ</p>
<p>ºݤˤϸŤϤǤϡ# 黻ҤƤʤäꡢ<assert.h> ְ㤨ƤΤޤ Validation Suite Υץˤ <assert.h> include ƤΤ¿ޤ<assert.h> ƤʤȥץץåȤΥƥȤΤˤǤޤ <assert.h> ϴñ˽Τǡ°ΤΤнľƤۤɤǤ礦ΤΤ C89 Rationale 4.2.1.1 㼨ƤΤǤǤ⡢# 黻ҤƤʤΤʷ̤ˤϤʤޤϥץץåʤΤǡޤ</p>
<pre style="color:navy">
#undef assert
#ifndef NDEBUG
# define assert( ignore) ((void) 0)
#else
extern void __gripe( char *_Expr, char *_File, int _Line);
# define assert( expr) \
((expr) ? (void)0 : __gripe( #expr, __FILE__, __LINE__))
#endif
</pre>
<p>__gripe() ȤؿϼΤ褦˽ޤʤ__gripe Ȥ̾ '_' ǻϤޤΤʤ鲿Ǥ褤ˡ</p>
<pre style="color:navy">
#include <stdio.h>
#include <stdlib.h>
void __gripe( char *_Expr, char *_File, int _Line)
{
fprintf( stderr, "Assertion failed: %s, file %s, line %d\n",
_Expr, _File, _Line);
abort();
}
</pre>
<p>__gripe() δؿȤ鷺 fprintf() 뤤 fputs() abort() ľ <assert.h> ˽ƤϤ⸫ޤäƤǤʤȤǤϤޤΤˤϤδؿɬפǤFILE stderr ɬפǤ<stdio.h> include 櫓ˤϤʤΤǡʤäǤ̴ؿְۤ㤤ޤ<br>
ޤʤȤǤ٤ƤޥǼ¸ϡƤӽФΤӤʸƥ뤬ʣޤʣʸƥĤ˥ޡŬϤʤϡɥξǤǤϤޤ</p>
<p>:</p>
<pre>
*1 C90 7.2 Diagnostics <assert.h> ǵǽ<assert.h>
C99 7.2 Diagnostics <assert.h>
</pre>
<p>*2 C99 Ǥϡassert() ޥɤδؿƤӽФ줿ɽ뤳ȤˤʤäӤΤˡ__func__ Ȥ̻ҤꤵƤ롣</p>
<h3><a name="5.1.3" href="#toc.5.1.3">5.1.3. <limits.h></a></h3>
<p>ɸإåϰɽޥƤΤǤΥޥνϡͤȹפƤ뤳ȤϤǤ˼ξƤɬפޤ*1</p>
<ol>
<li>#if directive ǻȤǤ뤳ȡ<br>
<li>б뷿Υ֥Ȥ integral promotion ̤ηƱμǤ뤳ȡ<br>
</ol>
<p>㥹ȤȤäƤϤޤ #if directive Ǥ sizeof 䥭㥹Ȥ Standard C ϰϤˤʤȤϡ<a href="#5.1">5.1</a> ޤ⤽⡢<limits.h> ꤵ줿̣ϡ㥹Ȥ sizeof Τ褦ʼ¹ԻĶ˴ؤȲץץåɬפʤ褦ˤ뤳Ȥˤޤ<br>
㤨С</p>
<pre style="color:navy">
#if (int)0x8000 < 0
</pre>
<p>Ȥ
</p>
<pre style="color:navy">
#if sizeof (int) < 4
</pre>
<p>ȤȤˡ
</p>
<pre style="color:navy">
#include <limits.h>
#define VALMAX ...
#if INT_MAX < VALMAX
</pre>
<p>ȤΤǤ#if Ǥ <limits.h> ΥޥȤС㥹Ȥ sizeof ȤɬפϤʤϤǤ</p>
<p><limits.h> Υޥְ㤨ƤϡޤϤΥץץåλͤ餯ΤǤϤʤ<limits.h> ͤ嵭2. integral promotionĥˤ usual arithmetic conversion̾λѷѴˤε§ȡɾε§Τɤ줫ǰ뤳Ȥ鵯ΤΤ褦Ǥ</p>
<p>㤨СΤ褦ƤΤޤ</p>
<pre style="color:navy">
#define UCHAR_MAX 255U
</pre>
<p>unsigned char ͤϡ<tt>CHAR_BIT</tt> 8 ǤСˤ٤ int ϰϤˤޤΤǡunsigned char Υǡ֥Ȥͤ integral promotion ˤä int ˤʤޤä <tt>UCHAR_MAX</tt> int ȤɾΤǤʤФʤޤȤ255U Ǥ unsigned int ˤʤäƤޤޤ</p>
<pre style="color:navy">
#define UCHAR_MAX 255
</pre>
<p>ȤʤФʤʤΤǤ</p>
<p>ɤǤѾʤΤǤϤʤȻפ⤷ޤɬ⤽ǤϤޤ̵ηޤ黻ϡ̾λѴפƱդη̵ؤѴޤΤᡢ羮Ӥη̤äƤΤǤ</p>
<pre style="color:navy">
assert( -255 < UCHAR_MAX);
</pre>
<p>ȤƤߤȡ狼Ǥ礦</p>
<p>δְ㤤ˤϡintegral promotion usual arithmetic conversion ε§ Standard C ǤϤޤǤ¿νϤǺѤƤΤѹ줿Ȥ𤬴طƤޤK&R 1st. ˤ unsigned char, unsigned short, unsigned long ȤϤޤǤθ塢¿νϤ˼褦ˤʤꡢƤνϤ¿Ǥϡ̵Ͼ̵Ѵ뤳ȤˤʤäƤޤ<br>
Standard C integral promotion Ǥϡunsigned char, unsigned short Ϥ줾줹٤Ƥͤ int ϰϤˤޤ¤ int promote 졢Ǥʤ unsigned int promote ޤޤunsigned int long Ȥδ֤ usual arithmetic conversion Ǥϡunsigned int Τ٤Ƥͤ long ϰϤˤޤΤǤ long ˡǤʤ unsigned long Ѵޤ"unsigned preserving rules" "value preserving rules" ؤѹȸƤФΤǤΤۤľŪ˰ճʤȤΤεͳȤƤޤ<limits.h> Ǥϡε§դɬפǤ*2</p>
<p>ʲǤϤ٤ơshort ϣӥåȡlong ϣӥåȤȤޤ<tt>USHRT_MAX</tt> ͤ 65535 Ǥν int ӥåȤξȣӥåȤξȤǰäƤޤ</p>
<pre style="color:navy">
#define USHRT_MAX 65535U /* int ӥåȤξ */
#define USHRT_MAX 65535 /* int ӥåȤξ */
</pre>
<p>unsigned short int ӥåȤξ int ϰϤˤޤʤΤǡunsigned int promote ޤäơ<tt>USHRT_MAX</tt> unsigned int ȤɾΤǤʤФʤޤ65535 Ǥ long ȤɾƤޤޤ 'U' ɬפʤΤǤ¾ int ӥåȤξ unsigned short ͤϤ٤ int ˤޤΤǡint promote ޤä <tt>USHRT_MAX</tt> int ȤɾΤǤ뤳ȤɬפǤ'U' դƤϤޤȤ줬դˤʤäƤ㤬ޤ</p>
<pre style="color:navy">
#define USHRT_MAX 0xFFFF
</pre>
<p>ʤ顢int ӥåȤǤ⣳ӥåȤǤɾޤStandard C ǤϡU, u, L, l ȤҤɤդʤʤޤϣʤȡϡint, unsigned int, long, unsigned long νǡǤͤɽǤ뷿ɾޤʤ0xFFFF int ӥåȤʤ unsigned int 65535int ӥåȤʤ int 65535 ɾΤǤФơҤդʤȡϡint, long, unsigned long νɾޤ65535 int ӥåȤʤ longint ӥåȤʤ int ɾ뤳Ȥˤʤޤ*3</p>
<p>C99 Ǥϡ long long / unsigned long long ɲäޤ0 1 ͤʤ _Bool Ȥɲäޤ¾η⥪ץǼǤ褦ˤʤޤInteger promotion Υ롼礵졢unsigned long ɽǤʤȡ long long / unsigned long long ɾ뤳Ȥˤʤޤ<br>
ޤǧ줿Τȼäơ羮ط狼ˤʤäᡢinteger conversion rankѴˤȤǰƳޤγǰϤʣǤѾϵˤɬפϤޤɸǤϥ羮طϼ̤Ǥ</p>
<p>long long > long > int > short > char > _Bool</p>
<p>ǡȤ long int Ȥ 32 ӥåȤȤ褦ʥƱǤäƤ⡢羮϶̤ȤȤݥȤǤ *4, *5</p>
<p>:</p>
<pre>
*1 C90 5.2.4.2.1 Sizes of integral types <limits.h> 礭<limits.h>
C99 5.2.4.2.1 Sizes of integer types <limits.h>
*2 C90 6.2.1 Arithmetic operands ѥڥ
C99 6.3.1 Arithmetic operands
*3 C90 6.1.3.2 Integer constants
C99 6.4.4.1 Integer constants
*4 C99 6.4.4.1 Integer constants
</pre>
<p>*5 C99 Ǥ integer types νϤˤۼ뤿 <stdint.h> <inttypes.h> ȤɸإåɲäƤ롣64 bits ƥоˤä integer types μबơбط狼ˤʤäƤᡢlong Ȥ short Ȥ̾ΤۤˤĤη̾ typedef 褦ȤΤǤ롣η̾ 26 ⤢ꡢб͡Ǿͤɽޥ 42 б fprintf() format specifier Ѵޥ 56 Ʊͤ fscanf() format specifier Ѵޥ 56 ˤ롣ϤôϤޤʤȤϸѻơɾδѤ褷Ƥ롣</p>
<h4>5.1.3.1. INT_MIN</h4>
<p><limits.h> ΥޥΤǺǤ⺮θΤɽĥƥǤ <tt>INT_MIN</tt> <tt>LONG_MIN</tt> ǤǤ int ӥåȤ long ӥåȤνϤǤ <tt>INT_MIN</tt> 嵭٤ƸƤޤǡäˤʬƼ夲Ƥߤޤ<br>
ξ硢int ϰϤ [-32768,32767] Ǥ뤳ȤϸޤǤ⤢ޤơ<tt>INT_MAX</tt> ˤĤƤϤɤνϤ 32767 뤤 0x7FFF ȤƤơꤢޤȤ<tt>INT_MIN</tt> Τ褦Ƥݤޤ</p>
<pre style="color:navy">
#define INT_MIN (-32767)
</pre>
<p>ʤΤ褦ʼºݤȰ㤦ƤΤǤ礦<br>
¾ǡˤƤϤϸޤ</p>
<pre style="color:navy">
#define INT_MIN (-32768)
</pre>
<p>-32768 -, 32768 ΣĤΥȡäƤޤơ32768 int ɽǤϰϤˤޤǡ long ɾޤäơ-32768 - (long) 32768 ΰ̣ˤʤäƤޤΤǤ<br>
ˤϡƤΤ⤢ޤ</p>
<pre style="color:navy">
#define INT_MIN ((int)0x8000)
</pre>
<p>㥹ȤȤäˤĤƤϡȤϷ֤ޤ0x8000 Ǥ (unsigned) 32768 ΰ̣ˤʤΤǡϤԲĤǤ</p>
<p>ǤϡɤС㥹ȤȤ鷺 (int) -32768 ɾΤǤ礦</p>
<pre style="color:navy">
#define INT_MIN (-32767-1)
</pre>
<p>ɤΤǤ32767 <tt>INT_MAX</tt> Ǥ 0x7FFF Ǥ⤫ޤޤˤϰȤ黻ޤޤƤޤꤢޤʤ⤽ñ - 黻ҤǤˡ*1, *2</p>
<pre style="color:navy">
#define INT_MIN (~INT_MAX)
#define INT_MIN (1<<15)
</pre>
<p>Ǥ</p>
<pre style="color:navy">
#define INT_MIN (-32767)
</pre>
<p>ϱ黻Ȥۤ⤫Фʤäˡͤ뤳ȤΤȿ¬ޤ</p>
<p>Ǥϡ-32767 Ȥϴְ㤤Ǥ礦 Ȥ⡢ʤΤǤ礦<br>
Сϴְ㤤ȹͤޤ<br>
<tt>INT_MIN</tt> int κǾͤɽޥȵꤵƤޤ⤷ <tt>INT_MIN</tt> -32767 ȤȡϤạ̈ΤʤΤǤ礦 ơ<tt>INT_MIN</tt>-1 ϤäʤΤǤ礦 뤤 ~<tt>INT_MAX</tt> 1<<15 ϲǤ礦<br>
ξ <tt>INT_MIN</tt>-1 ˤĤƤϡư黻ΡפΤ褦ϰϳɽӥåȥѥȤͤ褦Ǥ</p>
<p>˴ؤ Standard C εȾȤ餷碌ȡβΩ;ϤޤޤˤĤƤΥӥåȱ黻η̤ϡop1 << op2 op1 >> op2 op2 ͤǤ뤫 op1 ηΥӥåȿʾǤ礬 undefined Ǥʳˤ undefined ʾϤʤ٤ΰդ֤ͤޤ~op op int ǤСη̤ int Ǥꡢop1 & op2, op1 | op2, op1 << op2, op1 >> op2 op1, op2 Ȥ int ǤСη̤ int Ǥäơ~<tt>INT_MAX</tt> 1<<15 ̤ int ʤΤǤ1<<15 overflow Ȼפ⤷ޤǤϤޤӥåȱ黻Ǥϥӥå̤Υӥåȥѥб֤ͤΤǡoverflow ȯ褦ʤΤǤ</p>
<p>äǤϰ̤α黻Ϥ褯Ƥơundefined ʬϤƾʤΤǤȤ˥ӥåȥѥͤȤδطϡͤɽ 0 ˣĤΥӥåȥѥʳϡ˰абƤޤ K&R 1st. Standard C ޤǰӤΤǤޤӥåȥѥΤΤɽˡϣäˤϤʤפɽ褦ˤ (-32767-1) ȽޤϸƤ̤ int ͤΤΤǤC89 Rationale ϤĤκơˤϡ̵פȤפɽӥåȥѥ¸ߤ;ϤΤʤȤ餫ˤƤޤ*3, *4</p>
<p>ȤǡɽǤ ~<tt>INT_MAX</tt> <tt>INT_MIN</tt> ͤǤꡢ礭 <tt>INT_MIN</tt> ϴְ㤤ȸ虜ޤ</p>
<p>:</p>
<p>*1 䤬ƸΤϡP. J. Plauger "The Standard C Library" Ǥ롣ǶνϤˤϤή limits.h ¿ʤäƤ褦Ǥ롣</p>
<p>ܤ limits.h ˤְ㤤ΤǤ롣int ӥåȤ long ӥåȤνϤΤΤ褦ˤʤäƤ롣</p>
<pre style="color:navy">
#define UINT_MAX 65535
#define USHRT_MAX 65535
</pre>
<p>Ǥ long ɾƤޤϤǤ롣</p>
<pre style="color:navy">
#define UINT_MAX 65535U
#define USHRT_MAX 65535U
</pre>
<p>*2 ǶνϤǤ *_MIN (-*_MAX - 1) ȤŪˤʤꡢְ㤤ϾʤʤäƤ롣ޤ˴ְ㤤롣</p>
<p>Visual C++ 2003 Vc7/include/limits.h, Vc7/crt/src/include/limits.h ˤϼΤ褦ʤΤ롣</p>
<pre style="color:navy">
#define LLONG_MIN 0x8000000000000000
</pre>
<p>0x8000000000000000 unsigned long long ɾ롣ηϺǹ̥ǤΤǡinteger promotion η̤ƱǤ롣ޥʥͤˤϷ褷Ƥʤʤäơ</p>
<pre style="color:navy">
#if LLONG_MAX > LLONG_MIN
</pre>
<p>ϴԤ̤ˤϤʤʤ</p>
<p>LCC-Win32 2003-08, 2006-03 include/limits.h <tt>LLONG_MIN</tt> ϤʤäƤ롣</p>
<pre style="color:navy">
#define LLONG_MIN -9223372036854775808LL
</pre>
<p>9223372036854775808LL ϤΥȡͤǤ signed long long ϰϤ overflow Ƥ violation of constraint Ǥ롣</p>
<pre style="color:navy">
#define LLONG_MIN -9223372036854775808LLU
</pre>
<p>Ȥ 9223372036854775808LLU unsigned long long ˤʤ뤬̵ unary - 黻ܤƤ⡢̤ηѤʤΤǡunsigned long long ɽǤʤͤȤʤꡢundefined Ǥ롣</p>
<p>Visual C++ LCC-Win32 ¾ *_MIN Ϥ٤ (-*_MAX - 1) ȤʤäƤΤǤ뤬<tt>LLONG_MIN</tt> ְäƤΤϤɤȤǤ</p>
<pre style="color:navy">
#define LLONG_MIN (-LLONG_MAX - 1LL)
</pre>
<p>ȤвϤʤ</p>
<p>Visual C++ 2005 ǤϤϽ줿</p>
<pre>
*3 C89 Rationale 3.1.2.5 Types
C99 Rationale 6.2.6.2 Integer types
</pre>
<p>*4 C99 ǤϡΥӥåȥѥ㳰 "trap representation" ȤưȤ⡢Ϥ˵뤳ȤˤʤäƤ롣ºݤˤɤϤΤϡΤʤ</p>
<h3><a name="5.1.4" href="#toc.5.1.4">5.1.4. <iso646.h></a></h3>
<p>ISO C 9899:1990 / Amendment 1 Ǥϡiso646.h Ȥɸإåɲäޤ &, |, ~, ^, ! ޤ黻Ҥ ISO 646 invariant character set ɽ spelling ΤǤ|, ~, ^ trigraphs Ǥ spelling Ƥޤtrigraphs readability ˷礱Τǡiso646.h Ϥäƣα黻Ҥȡñ̤ǥޥƤޤ<br>
μϤƴñǡΤ褦ʤΤǽʬǤץץǥޥŸΤǡϤˤȤäƤⲿݤϤޤ*1</p>
<pre style="color:navy">
/* iso646.h ISO 9899:1990 / Amendment 1 */
#ifndef _ISO646_H
#define _ISO646_H
#define and &&
#define and_eq &=
#define bitand &
#define bitor |
#define compl ~
#define not !
#define not_eq !=
#define or ||
#define or_eq |=
#define xor ^
#define xor_eq ^=
#endif
</pre>
<p>:</p>
<p>*1 C++ Standard Ǥϡ identifier operator ϥޥǤϤʤ operater-token ȤƤ롣ϤˤȤäƤϤäʡ̵̣ʻͤǤ롣</p>
<br>
<h1><a name="6" href="#toc.6">6. ƼץץåΥƥȷ</a></h1>
<h2><a name="6.1" href="#toc.6.1">6.1. ƥȤץץå</a></h2>
<p>ƥȤϤȼ¹ˡϼ̤ǤϤϥ줿ν¤٤Ƥޤ<br>
¹Իץ C95 (C90), C99, C++98 Τ줾Ǿİۤʤޤ<br>
° <assert.h>, <limits.h> ꤬ϡľƤƥȤƤޤ</p>
<pre>
ֹ: OS / / ¹ԥץǿ
¹Իץ
1 : Linux / / DECUS cpp
C95: cpp
</pre>
<blockquote>
Martin Minow ˤ DECUS cpp Υꥸʥ (1985/01) DEC γƼ亮ƥࡢUNIX, MS-DOS ΤĤνϤ˰ܿƤ뤬ΥƥȤǻȤäΤϡkmatsui ꥸʥǤ˼ä Linux / GCC ǥѥ뤷ΡTranslation limits ʤ٤ꥢ褦ޥ
</blockquote>
<pre>
2 : FreeBSD 2.2.7 / GCC V.2.7.2.1 / cpp (V.2.0)
GO32 / DJGPP V.1.12 / cpp (V.2.0)
WIN32 / BC 4.0 / cpp (V.2.0)
MS-DOS / BC 4.0, TC 2.0 / cpp (V.2.0)
MS-DOS / LSI C-86 V.3.3 / cpp (V.2.0)
OS-9/6x09 / Microware C/09 / cpp (V.2.0)
C95: cpp -23 (-S1 -S199409L) -W15
gcc -ansi -Wp,-2,-W15
C99: cpp -23 (-S1) -S199901L -W15
C++: cpp -23+ -S199711L -W15
</pre>
<blockquote>
kmatsui ˤ륪ץեȥ (1998/08)<b>mcpp</b> ȸƤ֡DECUS cpp ١ȤƽľΡ
ϤΥСϾ嵭νϤбƤ Linux GCC ǥѥ뤷ΤȤäƥƥȤ
</blockquote>
<pre>
3 : WIN32 / Borland C++ V.5.5J / cpp32 (2000/08)
C95: cpp32 -A -w
bcc32 -A -w
C99: cpp32 -A -w
C++: cpp32 -A -w
</pre>
<blockquote>
Trigraph cpp bcc trigraph.exe ȤѴץबѰդƤ롣ֵʽפȾΤ뤿ΥХǤ롣Borland C ǤϡȤäͽѴץǥƥȤȤ trigraph.exe <backslash><newline> ˤ³ޤǽƤޤΤᡢֹ椬q.1.2 ΤۤǸˡ
</blockquote>
<pre>
4 : Linux, CygWIN / GCC V.2.95.3 (2001/03) / cpp0
C95: cpp0 -D__STRICT_ANSI__ -std=iso9899:199409 -$ -pedantic -Wall
gcc -ansi -pedantic -Wall
C99: cpp0 -std=c9x -$ -Wall
C++: g++ -E -trigraphs -$ -Wall
</pre>
<blockquote>
GCC portable ʥǤΤǡΥƥ˰ܿΤλͤϰܿԤѰդ٤Ǥ뤬ȼΥɥȤƤʤcpp ΥɥȤȤƤ GNU cpp.info ¸ߤʤ
</blockquote>
<pre>
5 : Linux / GCC V.3.2 (2002/08) / cpp0
C95: cpp0 -D__STRICT_ANSI__ -std=iso9899:199409 -$ -pedantic -Wall
gcc -std=iso9899:199409 -pedantic -Wall
C99: cpp0 -std=c99 -$ -Wall
C++: g++ -E -trigraphs -$ -Wall
</pre>
<blockquote>
kmatsui ѥ뤷Ρ--enable-c-mbchar Ȥץդ configure Ƥ롣
</blockquote>
<pre>
6 : Linux / / ucpp (V.1.3)
C95: ucpp -wa -c90
C99: ucpp -wa
</pre>
<blockquote>
Thomas Pornin ˤ륪ץեȥ (2003/01)Portable ñΥץץåLinux / GCC ǥѥ뤷ƥƥȤ
</blockquote>
<pre>
7 : WIN32 / Visual C++ 2003 / cl
C95: cl -Za -E -Wall -Tc
C99: cl -E -Wall -Tc
C++: cl -E -Wall -Tp
</pre>
<blockquote>
-E ץǤϥȤ <backslash><newline> ʤΤǡѥˤƥȤʻ (2003/04)
</blockquote>
<pre>
8 : WIN32 / LCC-Win32 2003-08 / lcc
C95: lcc -A -E
lcc -A
C99: lcc -A -E
C++: lcc -A -E
</pre>
<blockquote>
Jacob Navia C. W. Fraser & Dave Hanson ΥץեȥǤ lcc ˽糫ȯĶ (2003/08)ץץʬΥ Dennis Ritchie Plan9 Τ˽Ρ
</blockquote>
<pre>
9 : WIN32, Linux, etc. / / wave (V.1.0)
C95: wave
C99: wave --c99
C++: wave
</pre>
<blockquote>
Hartmut Kaiser ˤ portable ʥץեȥCompiler-independent ʥץץå
Boost preprocessor library ʤΤȤäƼƤ롣ԤѰդ WIN32 Ѥμ¹ԥץ (2004/01) ǥƥȤ
</blockquote>
<pre>
10: FreeBSD, Linux, CygWIN / GCC 2.95, 3.2
WIN32, MS-DOS / Visual C 2003, BCC, etc. / mcpp_std (V.2.4)
C95: mcpp_std -23 (-S1 -V199409L) -W31
gcc -ansi -Wp,-2,-W31
C99: mcpp_std -23 (-S1) -V199901L -W31
C++: mcpp_std -23+ -V199711L -W31
</pre>
<blockquote>
<b>mcpp</b> V.2.4 (2004/02) Standard ⡼ɡLinux / GCC ǥѥ뤷Τǥƥȡ
</blockquote>
<pre>
11: Linux / GCC V.3.4.3 (2004/11) / cc1, cc1plus
C95: gcc -E -std=iso9899:199409 -pedantic -Wall
C99: gcc -E -std=c99 -$ -Wall
C++: g++ -E -std=c++98 -$ -Wall
</pre>
<pre>
12: WIN32 / Visual C++ 2005 / cl
C95: cl -Za -E -Wall -Tc
C99: cl -E -Wall -Tc
C++: cl -E -Wall -Tp
</pre>
<blockquote>
-E ץǤϥȤ <backslash><newline> ʤΤǡѥˤƥȤʻ (2005/09)
</blockquote>
<pre>
13: WIN32 / LCC-Win32 2006-03 / lcc
C95: lcc -A -E
lcc -A
C99: lcc -A -E
C++: lcc -A -E
</pre>
<blockquote>
LCC-Win32 2006-03 (2006/03)
</blockquote>
<pre>
14: Linux / GCC V.4.1.1 (2006/05) / cc1, cc1plus
C95: gcc -E -std=iso9899:199409 -pedantic -Wall
C99: gcc -E -std=c99 -$ -Wall
C++: g++ -E -std=c++98 -$ -Wall
15: WIN32 / Visual C++ 2008 / cl
C95: cl -Za -E -Wall -Tc
C99: cl -E -Wall -Tc
C++: cl -E -Wall -Tp
</pre>
<blockquote>
-E ץǤϥȤ <backslash><newline> ʤΤǡѥˤƥȤʻ (2007/12)
</blockquote>
<pre>
16: Linux, WIN32, etc. / / wave (V.2.0)
C95: wave (--c99)
C99: wave --c99
C++: wave
</pre>
<blockquote>
wave V.2.0 (2008/08)
Boost C++ Library V.1.36.0 ˴ޤޤƤ륽ɮԤ Linux/GCC, Windows/Visual C++ ǥǥեȤǥѥ뤷Τѡ
GCC, Visual C ΥإåեȤγեѰդƥƥȡ
</blockquote>
<pre>
17: FreeBSD, Linux, Mac OS X, CygWIN, MinGW / GCC 2.95 - 4.1
WIN32 / Visual C 2003-2008, BCC, LCC-Win32 / mcpp (V.2.7.2)
C95: mcpp -23 (-S1 -V199409L) -W31
gcc -ansi -Wp,-2,-W31,-fno-dollars-in-identifiers
C99: mcpp -23 (-S1) -V199901L -W31
C++: mcpp -23+ -V199711L -W31
</pre>
<blockquote>
<b>mcpp</b> V.2.7.2 (2008/11)
</blockquote>
<br>
<h2><a name="6.2" href="#toc.6.2">6.2. ɽ</a></h2>
<pre>
D M B G G u V L W M G V L G V W M
E C C C C c C C a C C C C C C A C
C P C C C p 2 C v P C 2 C C 2 V P
U P 5 2 3 p 0 0 e P 3 0 0 4 0 E P
S 2 5 9 2 1 0 3 1 2 4 0 6 1 0 2 2
C 0 C 5 3 3 0 0 4 3 5 0 1 8 0 7
P P 3 8 3 2
P P
max 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[K&R: Processing of sources conforming to K&R and C90] (31 items)
n.2.1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.2.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.2.3 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.6.1 10 10 10 10 10 10 10 10 10 4 10 10 10 10 10 10 10 10
n.7.2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.10.2 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.12.3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.12.4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.12.5 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.12.7 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.13.1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.13.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.13.3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.13.4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.13.7 6 6 6 4 6 6 6 4 6 0 6 6 4 4 6 4 6 6
n.13.8 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.13.9 2 2 2 2 2 2 2 0 2 0 2 2 0 2 2 0 2 2
n.13.10 2 2 2 2 2 2 2 0 0 2 2 2 2 0 2 2 2 2
n.13.11 2 0 2 2 2 2 2 0 0 0 2 2 2 0 2 2 2 2
n.13.12 2 0 2 2 2 2 2 2 0 0 2 2 2 0 2 2 2 2
n.15.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.15.2 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.18.1 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
n.18.2 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
n.18.3 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
n.27.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.27.2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.29.1 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
n.32.1 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
i.32.3 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
i.35.1 2 2 2 2 2 2 2 0 0 0 2 2 0 0 2 0 1 2
stotal 166 150 166 164 166 166 166 156 158 140 166 166 160 156 166 160 165 166
[C90: Processing of strictly conforming sources] (76 items)
n.1.1 6 0 6 6 6 6 6 6 6 0 6 6 6 6 6 6 6 6
n.1.2 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.1.3 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.2.4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.2.5 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.3.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.3.3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.3.4 2 0 2 0 2 2 0 2 2 2 2 2 2 2 2 2 2 2
n.4.1 6 0 6 0 6 6 6 6 0 0 6 6 6 0 6 6 6 6
n.4.2 2 0 2 0 2 2 2 2 0 0 2 2 2 0 2 2 2 2
n.5.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.6.2 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.6.3 2 0 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.7.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.7.3 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.8.1 8 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 2 8
n.8.2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.9.1 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
n.10.1 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
n.11.1 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
n.11.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.12.1 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.12.2 4 0 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4
n.12.6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.13.5 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.13.6 6 0 6 6 6 6 4 6 4 0 6 6 4 4 6 4 6 6
n.13.13 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.13.14 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.19.1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.19.2 4 2 4 4 4 4 4 4 4 2 4 4 4 4 4 4 4 4
n.20.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.21.1 4 0 4 0 4 4 4 0 4 4 4 4 0 4 4 0 4 4
n.21.2 2 0 2 0 2 2 2 0 2 2 2 2 0 2 2 0 2 2
n.22.1 4 0 4 0 4 4 4 4 4 0 4 4 4 4 4 4 4 4
n.22.2 2 0 2 0 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.22.3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2
n.23.1 6 2 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.23.2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.24.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.24.2 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.24.3 6 0 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.24.4 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.24.5 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.25.1 4 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.25.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.25.3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.25.4 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.25.5 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.26.1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.26.2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.26.3 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.26.4 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.26.5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.27.3 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.27.4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 4
n.27.5 2 2 2 2 2 2 2 0 2 0 2 2 0 2 2 0 0 2
n.27.6 2 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.28.1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.28.2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.28.3 4 0 4 4 4 4 2 4 4 4 4 4 4 4 4 4 4 4
n.28.4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.28.5 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.28.6 4 0 4 0 4 4 2 0 0 4 4 4 0 0 4 0 4 4
n.28.7 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.29.2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.30.1 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
n.32.2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
n.37.1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.37.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.37.3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.37.4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.37.5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.37.6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.37.7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.37.8 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
n.37.9 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
stotal 286 160 284 252 286 286 278 274 272 240 286 286 272 272 286 272 274 286
[C90: Processing of implementation defined portions] (1 item)
i.32.4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
stotal 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[C90: Diagnosing of violation of syntax rule or constraint] (50 items)
e.4.3 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.7.4 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.12.8 2 0 2 2 2 2 2 2 0 2 2 2 2 0 2 2 2 2
e.14.1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.14.2 4 2 4 2 4 4 2 2 4 4 4 4 4 4 4 4 4 4
e.14.3 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2
e.14.4 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2
e.14.5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.14.6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.14.7 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.14.8 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.14.9 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.14.10 4 0 4 2 0 0 0 0 0 0 4 0 0 0 0 0 4 4
e.15.3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.15.4 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2
e.15.5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.16.1 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2
e.16.2 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2
e.17.1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.17.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.17.3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.17.4 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
e.17.5 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
e.17.6 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
e.17.7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.18.4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.18.5 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2
e.18.6 2 0 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
e.18.7 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.18.8 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2
e.18.9 2 0 2 0 2 2 2 2 0 0 2 0 2 0 2 2 0 2
e.19.3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
e.19.4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
e.19.5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
e.19.6 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.19.7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.23.3 2 0 2 2 2 2 2 2 0 0 2 2 2 0 2 2 0 2
e.23.4 2 2 2 2 2 2 2 2 0 0 2 2 2 0 2 2 0 2
e.24.6 2 2 2 2 2 2 2 2 0 0 2 2 2 0 2 2 0 2
e.25.6 4 0 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4
e.27.7 2 0 2 2 2 2 2 0 2 2 2 2 0 2 2 0 2 2
e.29.3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.29.4 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.29.5 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.31.1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.31.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
e.31.3 2 2 2 0 2 2 2 1 2 2 2 2 1 2 2 1 2 2
e.32.5 2 0 2 2 2 2 0 2 0 0 2 2 2 0 2 2 2 2
e.33.2 2 0 2 0 0 2 0 2 0 0 2 2 2 0 2 2 2 2
e.35.2 2 0 2 1 2 2 0 2 0 2 2 2 2 0 2 2 2 2
stotal 112 74 112 92 104 108 98 100 92 86 112 106 105 92 108 105 104 112
[C90: Documents on implementation defined behaviors] (13 items)
d.1.1 2 0 2 0 0 2 0 0 0 0 2 2 0 0 2 0 0 2
d.1.2 4 2 4 4 4 4 0 4 0 0 4 4 4 0 4 4 2 4
d.1.3 2 0 2 0 0 2 0 0 2 2 2 2 0 0 2 0 2 2
d.1.4 4 0 4 4 4 4 0 4 4 2 4 4 4 4 4 4 2 4
d.1.5 4 2 4 4 2 4 4 4 4 4 4 2 4 4 2 4 4 4
d.1.6 2 0 2 0 0 1 0 0 0 0 2 1 0 0 1 0 0 2
d.2.1 2 0 2 2 2 2 2 0 0 0 2 2 2 0 2 2 0 2
d.2.2 2 0 2 2 0 2 0 0 0 0 2 2 2 0 2 2 0 2
d.2.3 2 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
d.2.4 2 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
d.2.5 2 0 2 0 0 0 0 2 0 0 2 0 2 0 0 2 0 2
d.2.6 2 0 2 2 0 0 0 2 0 0 2 0 2 0 0 2 0 2
d.2.7 2 0 2 2 0 2 0 2 0 0 2 2 2 0 2 2 0 2
stotal 32 4 32 20 12 23 6 18 10 8 32 21 22 8 21 22 10 32
[C90: Degree of Standard C conformance] (171 items)
mttl90 598 390 596 530 570 585 550 550 534 476 598 581 561 530 583 561 555 598
[C99: Conformance to new features] (20 items)
n.dslcom 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.ucn1 8 0 0 0 0 6 8 2 0 2 8 6 8 0 6 8 6 8
n.ucn2 2 0 0 0 0 0 2 0 0 0 2 2 2 0 2 2 0 2
n.ppnum 4 0 4 0 4 4 4 0 0 0 4 4 0 4 4 0 0 4
n.line 2 0 2 2 2 2 2 2 0 2 2 2 2 0 2 2 2 2
n.pragma 6 0 6 0 0 6 6 0 0 2 6 6 0 0 6 0 2 6
n.llong 10 0 0 0 10 10 8 10 0 0 10 10 10 0 10 10 10 10
n.vargs 10 0 10 0 10 10 10 0 0 10 10 10 10 2 10 10 10 10
n.stdmac 4 0 2 0 0 4 4 0 0 4 4 4 0 0 4 0 4 4
n.nularg 6 0 6 0 6 6 6 2 0 6 6 6 2 0 6 2 6 6
n.tlimit 18 0 18 14 18 18 17 18 14 18 18 18 18 12 18 18 16 18
e.ucn 4 0 0 0 0 0 2 0 0 2 4 0 2 0 0 2 2 4
e.intmax 2 0 0 0 2 2 2 0 0 0 2 1 0 0 1 0 2 2
e.pragma 2 0 2 0 0 2 2 0 0 2 2 2 0 0 2 0 2 2
e.vargs1 2 0 0 0 0 2 1 0 0 1 2 2 0 0 2 0 2 2
e.vargs2 2 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
d.pragma 2 0 2 0 0 2 2 2 0 0 2 2 2 0 2 2 2 2
d.predef 6 0 0 0 0 6 6 0 0 0 6 6 0 0 6 0 0 6
d.ucn 2 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
d.mbiden 2 0 0 0 0 2 2 1 0 0 2 2 1 0 2 1 0 2
mttl99 98 0 58 20 56 86 88 41 18 53 98 87 61 22 87 61 70 98
[C++: Conformance to new features not in C90] (9 items)
n.dslcom 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
n.ucn1 4 0 0 0 0 4 4 2 0 2 4 4 2 0 4 2 2 4
n.cnvucn 4 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
n.bool 2 0 0 0 0 2 0 0 0 2 2 2 0 0 2 0 0 2
n.token1 2 0 2 0 0 2 0 0 2 2 2 2 0 2 2 0 2 2
n.token2 2 0 0 0 0 2 0 2 0 2 2 2 2 0 2 2 2 2
n.cplus 4 0 2 2 2 2 0 4 0 4 4 2 4 0 2 4 4 4
e.operat 2 0 0 0 0 2 0 0 0 2 2 2 0 0 2 0 2 2
d.tlimit 2 0 2 0 0 2 0 1 0 0 2 2 1 0 2 1 0 2
mttl++ 26 0 10 6 6 20 9 13 6 18 22 20 13 6 20 13 16 22
[C90: Qualities / 1 : handling of multibyte character] (1 item)
m.36.2 7 0 2 2 0 0 0 4 0 0 7 5 2 0 5 2 0 7
stotal 7 0 2 2 0 0 0 4 0 0 7 5 2 0 5 2 0 7
[C90: Qualities / 2 : diagnosis of undefined behaviors] (29 items)
u.1.1 1 0 1 0 1 1 0 0 0 1 1 1 0 0 1 0 1 1
u.1.2 1 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1
u.1.3 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.4 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.5 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
u.1.6 1 0 1 0 1 1 0 0 1 0 1 1 0 1 1 0 0 1
u.1.7 9 0 1 0 0 0 0 0 0 0 6 6 0 0 6 0 0 9
u.1.8 1 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1
u.1.9 1 1 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1
u.1.10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.11 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.13 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.14 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.15 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
u.1.16 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1
u.1.17 2 0 2 0 1 1 0 0 1 0 2 1 0 1 1 0 1 2
u.1.18 1 0 1 0 1 1 1 0 0 0 1 1 0 0 1 0 1 1
u.1.19 2 0 2 0 0 1 1 0 0 1 2 1 0 0 1 0 1 2
u.1.20 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
u.1.21 2 0 2 1 0 1 2 2 2 2 2 1 2 2 1 2 2 2
u.1.22 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 0 1 1
u.1.23 1 1 1 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1
u.1.24 2 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 2 2
u.1.25 1 0 1 0 0 1 0 0 0 0 1 1 0 0 1 0 1 1
u.1.27 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1
u.1.28 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1
u.2.1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 1 1
u.2.2 1 0 1 1 0 1 1 0 0 0 1 1 0 0 1 0 0 1
stotal 41 10 33 16 19 26 20 18 19 16 38 30 17 21 30 17 25 41
[C90: Qualities / 3 : Diagnosis of unspecified behaviors] (2 items)
s.1.1 2 0 2 0 0 0 2 0 0 0 2 0 0 0 0 0 0 2
s.1.2 2 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
stotal 4 0 4 0 0 0 2 0 0 0 4 0 0 0 0 0 0 4
[C90: Qualities / 4 : Diagnosis of suspicious cases] (12 items)
w.1.1 4 4 4 0 4 4 0 0 0 0 4 4 0 0 4 0 0 4
w.1.2 4 0 4 0 0 0 0 0 0 2 4 0 0 0 0 0 2 4
w.2.1 2 0 2 1 0 0 0 0 0 0 2 2 0 0 2 0 0 2
w.2.2 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.1 1 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1
w.3.3 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.4 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.5 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.6 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.7 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.8 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
w.3.9 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
stotal 19 5 19 1 4 4 0 0 0 2 19 6 0 1 6 0 2 19
[C90: Qualities / 5 : Other features] (17 items)
q.1.1 9 0 9 6 9 9 8 7 4 9 9 9 7 5 9 7 8 9
q.1.2 10 6 10 4 8 10 4 4 4 4 10 10 4 4 10 4 4 10
q.1.3 4 4 4 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4
q.1.4 20 10 20 10 20 20 20 10 20 10 20 20 10 20 20 10 10 20
q.2.1 4 2 4 2 4 4 4 4 2 4 4 4 4 2 4 4 4 4
q.2.2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
q.2.3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
q.2.4 2 2 2 0 2 2 0 0 0 0 2 2 0 0 2 0 0 2
q.2.5 2 0 2 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2
q.2.6 4 0 4 2 4 4 2 4 2 0 4 4 4 2 4 4 0 4
q.2.7 10 4 6 4 8 8 4 4 4 2 8 8 4 4 8 4 4 8
q.2.8 10 0 6 2 2 2 0 6 4 4 8 2 6 4 2 6 4 8
q.2.9 6 2 2 0 2 2 0 0 0 2 2 2 0 0 2 0 2 4
q.3.1 20 10 8 8 14 12 8 10 10 6 8 12 10 10 12 10 6 8
q.3.2 20 20 20 18 16 16 18 16 18 14 18 14 14 18 12 14 12 16
q.3.3 20 10 14 0 10 12 8 0 0 8 14 12 0 0 12 0 10 16
q.4.1 10 2 6 6 4 6 2 4 6 4 4 6 4 6 6 4 4 8
stotal 157 78 123 70 113 117 88 79 84 77 123 115 77 85 113 77 78 129
[C90: Qualities] (61 items)
mttl90 228 93 181 89 136 147 110 101 103 95 191 156 96 107 154 96 105 200
[C99: Qualities of new features] (3 items)
u.line 2 0 2 0 1 1 0 0 0 0 2 1 0 0 1 0 2 2
u.concat 1 0 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1
w.tlimit 8 0 8 0 0 0 3 2 0 0 8 0 2 0 0 2 0 8
mttl99 11 0 11 0 1 2 3 2 0 0 11 2 2 0 2 2 2 11
[C++: Qualities of features not in C90] (1 item)
u.cplus 1 0 1 1 0 0 0 1 0 1 1 0 1 0 0 1 1 1
mttl++ 1 0 1 1 0 0 0 1 0 1 1 0 1 0 0 1 1 1
[Overall] (265 items)
gtotal 962 483 857 646 769 840 760 708 661 643 921 846 734 665 846 734 749 930
D M B G G u V L W M G V L G V W M
E C C C C c C C a C C C C C C A C
C P C C C p 2 C v P C 2 C C 2 V P
U P 5 2 3 p 0 0 e P 3 0 0 4 0 E P
S 2 5 9 2 1 0 3 1 2 4 0 6 1 0 2 2
C 0 C 5 3 3 0 0 4 3 5 0 1 8 0 7
P P 3 8 3 2
P P
max 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
</pre>
<br>
<h2><a name="6.3" href="#toc.6.3">6.3. ƥץץåħ</a></h2>
<p>1 : Linux / / DECUS cpp</p>
<blockquote>ANSI draft ΤΤΤǡȤʤäƤϵʽ٤㤯ʤäƤޤǥåϤޤޤǤɥȤϤۤȤɤޤʤΤäꤷץǡꤷƤޤ<br>
portability ι⤤ΤǡĤνϤ˰ܿƤޤܤΤ褦ɤߤ䤹ǡɤǤٶˤʤޤ䤬 <b>mcpp</b> Υ١ˤΤϤΥǤ</blockquote>
<p>3 : WIN32 / Borland C++ V.5.5J / cpp32</p>
<blockquote>C90 εʽ٤Ū⤯ä shift-JIS ˤޤȤбƤޤɥȤäƤޤe_* ǤϿǥåϤƤФޤ֤˹碌ŪʤΤ¿ɤޤ<br>
ֵʳʼפϼǡȤĥǽ⤢ޤUndefined ʬФƤϿǥåϤޤФ˽ޤʤбդȤʤäƤޤä褦Ǥ<br>
®٤ Turbo C Ȱäơ®ۤǤϤʤʤޤǤˣѥѥΥåȤϤʤʤäƥǥåȤĤäƤȻפޤĤޤǤή³Ƥ椯ΤǤ礦</blockquote>
<p>4 : Linux, CygWIN / GCC V.2.95.3 / cpp0</p>
<blockquote>C90, C95 εʽ٤Ϥʤ⤯ǥåŪΤǤưϤۤܰꤷƤꡢĤƹ®Ǥ˭٤뤯餤˭٤ʥץħǤ<b>mcpp</b> Ǥ⡢ΥץΤĤޤͤƤޤ<br>
ĤƤϤĤˤХ⤢ޤV.2.95 ǤϥХϤۤȤɤʤʤޤ<br>
ĤϡC99, C++98 οͤ¿̤Ǥ뤳ȡǥåޤޤʤȡɥȤʤƤ뤳ȡ#pragma Ȥʤʰȿγĥǽ¿ȡpre-Standard obsolete ʻͤ¿Ƥ뤳ȡmulti-byte character encoding ؤбȾüǼѥ٥ãƤʤȡǤ<br>
cpp.info ȤɥȤ GCC / cpp Standard C ץץΤβȤͥ줿ΤǤʬΥɥȤ CygWIN, FreeBSD, Linux Τɤˤ¸ߤʤΤϻǰǤְܿפȤΤϥץǤϤʤϤǤ<br>
ϤĤϤ餱ɤߤˤĥץȤΩƤŤޥץåι¤äƤޤ GCC ϤΤͥƤ뤿ᡢ¿Υƥ˰ܿƤޤ</blockquote>
<p>5 : Linux / GCC V.3.2 / cpp0</p>
<blockquote>GCC V.3 Ǥϥץץ V.2 饽쿷ޤƱ˥ɥȤ쿷ޤToken-based ʸ§Ű줵졢pre-Standard ʻͤϤޤƤʤ⥦˥Ф褦ˤʤꡢundocumented ʻͤƤޤΤȤƤϻδԤ˲ɤƤޤץ¤쿷줿Ȥǡβɤ⤷䤹ʤäΤȻפޤ<br>
ǥåɥȡC99 бmulti-byte character ؤбϤޤԽʬǤ®٤Ϥ٤ʤޤǤޤ®ۤǤ<br>
إåե뤬ʣ include directory ΥʣˤʤäƤƤΤϡäǤޤŤץȤʤʤäƤ¿οץƤꡢʤʤؿʤߤޤV.3 ǤϥץץѥΤ˰βޤץץʬȥѥʬȤŪ interface ʤʣʤΤˤʤäƤΤ⡢ǰʤȤǤ</blockquote>
<p>6 : Linux / / ucpp (V.1.3)</p>
<blockquote>C99 бƤ뤳ȡץ portable Ǥ뤳ȤħǤʽ٤Ϥʤ⤯ʤäƤޤUCN UTF-8 бƤ뤳ȤˤʤäƤޤϤԽʬǤǥåϤȤƤޤɥȤ⤫ʤƤޤ</blockquote>
<p>7 : WIN32 / Visual C++ 2003 / cl<br>
12 : WIN32 / Visual C++ 2005 / cl<br>
15 : WIN32 / Visual C++ 2008 / cl</p>
<blockquote>C99 λͤ 2003 ǤϤۤȤɼƤޤǤ2005 ǤϤּʤߤޤ<br>
C90 λͤˤĤΥХĤäƤޤTranslation phase κ𤷤Ƥ뤳ȤǤ⺬ŪǤ˸ŤʬŪ˼ʤСåפ֤ƤƤ뤳Ȥޤ<br>
ǥåϤԥȤΤ줿ΤФиޤ顼ȽǤƤޤȤ¿Τ⡢ȤˤǤɥȤϼ٤ƹ٤Ƥʬˤޤ<br>
Translation limits 礭Ȥ #pragma Ū¿ȤȤꤨȸޤȤ #pragma setlocale ʤΤǤC90 Ǥ #pragma ԤޥŸ뤳ȡˤ⤫餺 #pragma sub-directive 桼֤̾ȤäƤΤǤ<br>
2008 Υץץå 2005 ȤۤȤѤꤢޤ
㤤 C99 _Pragma() __pragma() Ȥ̾ͤۤʤ黻Ҥ줿Ȥ餤Ǥ
źդ륷ƥإåˤϡ2005 ޤǤϾʤäΤǤ2008 ˤʤäƤʤ '$' ȤäޥƤޤޤ</blockquote>
<p>8 : WIN32 / LCC-Win32 2003-08 / lcc<br>
13 : WIN32 / LCC-Win32 2006-03 / lcc</p>
<blockquote>ץץʬ Dennis Ritchie Plan9 ѤΥ Jacob Navia äΤǤǥХåƤꡢ#if ɾʤɤˤʤΥХޤC95 ʹߤλͤˤбƤޤɥȤƤޤ<br>
2003-08 2006-03 ȤǤϥץץ˴ؤƤϤۤȤɰ㤤Ϥޤ</blockquote>
<p>9 : WIN32, Linux, etc. / / wave (V.1.0)<br>
16: WIN32, Linux, etc. / / wave (V.2.0)</p>
<blockquote>C++ STL Τ "meta-programming" ˻ȤȤŪ˺줿ΤǤȾ C++ Υ饤֥ǤǤƤơȾإåեΩäƤȤðۤʥץץåǤ"Meta-programming" μǤϺƵŪޥ¿ѤƤꡢŸǤ <b>mcpp</b> -@compat ץ GCC ƱͤΡִֺػߥ롼פŬϰϤꤹˡȤäƤޤ<a href=#3.4.26>3.4.26</a> ȡˡ<br>
̤ C/C++ ץץåȤƤȤ뤳ȤտޤƤꡢC++98, C99 бɸ֤ƤޤV.1.0 ϴ٤Τʤ㤤ΤǤV.2.0 ˲ޤV.1.0 ΤȤǡ<b>mcpp</b> °븡ڥåȤǥƥȤ¿ΥХȤΤȤǤ˿ǥåμβɥȤν¤˾ޤޤޤǥå° testcases ˸Ԥεʤβ˸꤬ΤⵤˤʤȤǤ</blockquote>
<p>11 : Linux / GCC V.3.4.3 / cc1, cc1plus<br>
14 : Linux / GCC V.4.1.1 / cc1, cc1plus</p>
<blockquote> V.3.2 ȤۤȤѤޤץץȤΩƤϤʤѤޤV.3.2 ǤϥåꤷƤ GCC ǤV.3.3, 3.4 ǤѤä褦ǤñΤΥץץåѻߤ̤ΥޥV.3.2 obsolete Ȥ줿ͤΰ褵ʣĤΥѥˤ٤Ƥۼ˿ʤǤΤϡϤƲȸ뤫ɤΤȤǤMulti-byte character encoding UTF-8 øŪʰ֤ͿȤ⡢multi-lingualization ¿ͤʲǽ뤳ȤˤʤΤǤϤʤǤ礦<br>
V.4.1 ϥץץ˴ؤƤ V.3.4 礭ʰ㤤Ϥޤ</blockquote>
<p>2 : FreeBSD, WIN32, MS-DOS / / <b>mcpp</b> (V.2.0)<br>
10 : FreeBSD, Linux, CygWIN, WIN32, MS-DOS / / <b>mcpp</b> (V.2.4)<br>
17 : FreeBSD, Linux, Mac OS X, CygWIN, MinGW, WIN32 / / <b>mcpp</b> (V.2.7.2)</p>
<blockquote>䤬ʬǺäƼʬǥƥȤƤΤʤΤǡʽ٤ǹǤΤʥץץåΤϤǤǥå˭٤ŪΤɥȤξܺ٤ǤͭѤʥץ #pragma ̤äƤޤV.2.3 ʹߤ C99 λͤˤ⤹٤бƤޤ
ΰܿɤ֤Ǥ礦<br>
ǽޤĤĤäƤޤꤤޤ</blockquote>
<br>
<h2><a name="6.4" href="#toc.6.4">6.4. ɾ</a></h2>
<p>¿ΥץץåƥȤƤߤȡߤ C90 ʽ٤Ϥʤ⤤Τ¿ʤäƤƤ뤳Ȥ狼ޤƽϤȤޤޤ¿äƤޤʤ<b>mcpp</b> ϤۤȤɤιܤʤΤǡ졹ڤޤ</p>
<p>n_* Υץ˴ؤƤΤƤꡢGCC 2.95 ʹ, BC (Borland C) 5.5, LCC-Win32 2003-08 ʹ, ucpp 1.3, Visual C++ 2003 ʹ, wave 2.0 ϼѾϤޤΤʤ٥ãƤޤɤνϤˤճʥХޤ</p>
<p>ǤäΤϡn_13_7.t (n_13_7.c) division by 0 Υ顼ˤʤäƤޤϤ Visual C ޤƤФи뤳ȤǤ&&, || 䣳黻ҤǤΡɾǤڤפȤäδŪʻͤƤʤΤǤBorland C n_13_7.c Ǥϥ˥ˤȤɤƤޤe_14_9.c division by 0 ǤƱ˥ФޤTurbo C Ǥ 0 ǤɾåפʬǤɤƱ顼ȤʤäƤޤBorland C Ϥοǥå˥˳ʲʤΤǤνϤΡִ֤˹碌ǥåפΰǤ</p>
<p>C90 λͤǤϡ# 黻ҤˤʸμδְäƤΤˤޤ<br>
Amendment 1, Corrigendum 1 ɲä줿ͤϡټƤΤ GCC 2.95 ʹ, ucpp, Visual C 2003 ʹߤǤ</p>
<p>C99 λͤϡGCC 3.2 ʹ, ucpp ܼۤƤޤ// Ȥ¿νϤƤޤΤۤ GCC long long translation limits ˤʤ;͵ꡢޥΥŬڤ˽ޤѰޥ GCC ȼλͤΤΤäƤޤ2.95 Ǥ C99 λͤΤΤޤ3.2 Ǥ _Pragma() ޤUCN ucpp, Visual C 2005 ʹߤƤޤGCC 3.2 ʹߤʸƥ뤪ʸ UCN ƤޤWave 2.0 C99 λͤβȾƤޤ<br>
C++98 λͤ GCC 3.2 ʹ, wave, Visual C 2005 ʹߤܼۤƤޤ<br>
C++98 extended-character UCN ѴȤʻͤƤΤϡޤޤ</p>
<p>i_* νʬνǤϡ#if wide character ʤΤ¿褦Ǥwide character ˸¤餺 #if ʸȤȤϡʤˤϤΤΤۤȤɰ̣ΤʤȤʤΤǡȤʤȤäƺ뤳ȤϤʤǤ礦̵̣ʤΤϵʤλͤ٤Ǥ<br>
Multi-byte character ˤĤƤϡVisual C ¿ι encoding ԽʬʤбƤޤ¾νϤϼǤGCC 2.9, 3.2 ϼȾüǡѥ٥ãƤޤGCC 3.4-4.1 ǤϤ٤Ƥ encoding UTF-8 ѴƤ褦ˤʤꡢˤä¿ encoding бǤ褦ˤʤޤ encoding ˤäƤϤޤѥ٥ǤϤޤ<br>
Shift-JIS BIG-5 ȤƥǤϡƥ tokenization # 黻ҤˤʸդɬפǤVisual C ϤˤޤбƤޤBorland C 5.5J shift-JIS ˤбƤޤ</p>
<p>e_* ФǥåǤϡGCC 2.95 ʹߤǤͥƤޤVisual C, ucpp ǤϿǥåŪФΤΡȤƤԥȤƤꤷޤ#if overflow ФǥåνФΤϾʤBC, ucpp, GCC ٿǤǤ</p>
<p>ʬΥɥȤǤϡGCC 3.2 ʹߤޤޤΥ٥ǡ¾Ϥɤ⤪Ǥ</p>
<p>u_* ФǥåǤϡGCC 3.2 ʹߤޤޤǤ¾ϤǤUndefined Ϥϲ⤷ʤɤȤΤǤϤʤȻפޤ</p>
<p>s_*, w_* ˤĤƤϤɤνϤۤȤн褷ƤޤȤΥͥȤФ륦˥ФΤʤΤϡճǤ</p>
<p>֤¾γƼʼפǤϡGCC ˭٤ʥץǥåŪΤ®ܿȤȴФƤޤ</p>
<p>礹ȡGCC V.3.2 ʹߤʽ٤ι⤵Ȥɤޤ礭ʷΤʤǡǤͥƤޤ<b>mcpp</b> ®٤ΤΡ¾ΤۤȤɤ̤ǤäƤ뤳ȤϸޤǤ⤢ޤ</p>
<p>ơ̤ΥƥȤäƤޤƻפΤϡƥѥץȤΤ˽פȤȤǤ<b>mcpp</b> ϤΥץκ¹ԤƥǥХåʤƤΤǤʬʥץ뤬ʤХХ¸ߤˤʤʤդޤ顢ǥХåɤǤϤޤ<br>
ʤˤ⤳Ūʥƥѥץ뤬źդ褦ˤʤȡƽϤʼŪ˸夹뤳ȤǤ礦ޤդˡŪʥƥѥץ뤳Ȥϡʤ⤭Ħˤ뤳ȤˤʤޤƥѥץϵʤΥ饹ȥ졼ʤΤǤ</p>
<br>
<h2><a name="6.5" href="#toc.6.5">6.5. ƥȤո</a></h2>
<p> Validation Suite ˤĤƤΤո䡢ȤäƼϤΥץץΥƥԤƤޤ</p>
<p><a href="http://mcpp.sourceforge.net/">http://mcpp.sourceforge.net/</a></p>
<p> "Open Discusssion Forum" ޤϥǤꤤޤ</p>
<p>ץץåξܺ٥ƥȤԤäϡ<a href="#6.2">6.2</a> ɽڤäơ˽Ǥ꤯ηˤ tool/total.c ѥ뤷ƻȤޤɽ cpp_test.old Ȥȡ</p>
<p>total 18 cpp_test.old cpp_test.new</p>
<p>Ȥȡstotal (sub-total), mtotal (mid-total), gtotal (grand-total) γޤ cpp_test.new ˽Ϥޤ"18" ΤȤϽϤοꤷޤ</p>
<p>GCC ξϡڥåȤ testsuite Ǥˤ뼫ưƥȤǤޤƼС GCC Υƥȷ̤꤯ե (gcc.sum, gcc.log) äƤȡǥåΥСˤ㤤ڥåȤ testsuite Ǥ˺Τ뤳ȤǤޤ</p>
<p>ޤValidation Suite <b>mcpp</b> γȯ SourceForge ξ嵭 mcpp project ǿʤƤޤȯ˻äƤߤ褦Ȥϡҥ</p>
</body>
</html>
|