Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 68

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

Π² ΠΈΡ‚ΠΎΠ³Π΅ даст 123, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сам xcat Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ##.

Аналогично сработаСт ΠΈ ABSDIFF(ABSDIFF(a, b), c), ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

A12.4. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ строка

#include <имя-Ρ„Π°ΠΉΠ»Π°>

замСняСтся Π½Π° содСрТимоС Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ имя-Ρ„Π°ΠΉΠ»Π°. Π‘Ρ€Π΅Π΄ΠΈ символов, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… имя-Ρ„Π°ΠΉΠ»Π°, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠ° > ΠΈ символа Π½ΠΎΠ²ΠΎΠΉ строки. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ссли имя-Ρ„Π°ΠΉΠ»Π° содСрТит любой ΠΈΠ· символов ", ', \ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Ρƒ символов /*. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ поиска ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ выполняСтся ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ строка

#include "имя-Ρ„Π°ΠΉΠ»Π°"

Π‘Π½Π°Ρ‡Π°Π»Π° поиск осущСствляСтся ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ компилятор ΠΈΡ‰Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ исходный Ρ„Π°ΠΉΠ» (ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ этого поиска зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ), Π° Π² случаС Π½Π΅ΡƒΠ΄Π°Ρ‡ΠΈ осущСствляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ поиска, принятым Π² #include ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ остаСтся Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ, Ссли имя Ρ„Π°ΠΉΠ»Π° содСрТит ", \ ΠΈΠ»ΠΈ /*; использованиС Π·Π½Π°ΠΊΠ° > Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ.

НаконСц, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°

#include ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ-лСксСм

Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π°Ρ Π½ΠΈ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌ, рассматриваСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ лСксСм ΠΊΠ°ΠΊ тСкст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ всСх макроподстановок Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π°Ρ‚ΡŒ #include <...> ΠΈΠ»ΠΈ #include "...". БгСнСрированная Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² соотвСтствии с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ.

Π€Π°ΠΉΠ»Ρ‹, вставляСмыС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ #include, сами ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ #include.

A12.5. Условная компиляция

Части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ условно, Ссли ΠΎΠ½ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Ρ‹ Π² соотвСтствии со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ схСматично ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΌ синтаксисом:

условная - конструкция -прСпроцСссора:

    if-строка тСкст elif-части else-Ρ‡Π°ΡΡ‚ΡŒΠ½Π΅ΠΎΠ± #endif

if-строка:

    #if константноС-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

    #ifdef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

    #ifndef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

elif-части:

    elif-строка тСкст

    elif-частинСоб

elif-строка:

    #elif константноС-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

else-Ρ‡Π°ΡΡ‚ΡŒ:

    else-строка тСкст

else-строка:

    #else

КаТдая ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² (if-строка, elif-строка, else-строка ΠΈ #endif) записываСтся Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкС. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ выраТСния Π² #if ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строках #elif Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎ порядку, ΠΏΠΎΠΊΠ° Π½Π΅ обнаруТится Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ (истинным) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ; тСкст, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° строкой с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, выбрасываСтся. ВСкст, располоТСнный Π·Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, обрабатываСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Под словом "тСкст" здСсь имССтся Π² Π²ΠΈΠ΄Ρƒ любая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ строк, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ строки прСпроцСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ условной структуры; тСкст ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ пустым. Если строка #if ΠΈΠ»ΠΈ #elif с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ выраТСния Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈ Π΅Π΅ тСкст ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки #elif ΠΈ #else вмСстС со своими тСкстами Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Если всС выраТСния ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния ΠΈ присутствуСт строка #else, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° Π½Π΅ΠΉ тСкст обрабатываСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ВСксты "Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ…" Π²Π΅Ρ‚Π²Π΅ΠΉ условных конструкций, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π²Π΅Π΄ΡƒΡŽΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ условных конструкций, ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½Ρ‹Π΅ выраТСния Π² #if ΠΈ #elif ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ макроподстановки. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ выраТСния Π²ΠΈΠ΄Π°

defined ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

ΠΈ

defined ( ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ )

Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ наличия Π² Π½ΠΈΡ… ΠΌΠ°ΠΊΡ€ΠΎΠ²Ρ‹Π·ΠΎΠ²Π°, ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° 1L ΠΈΠ»ΠΈ 0L Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π» ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ прСпроцСссором ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π½ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. ВсС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ послС ΠΌΠ°ΠΊΡ€ΠΎΡ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° 0L. НаконСц, прСдполагаСтся, Ρ‡Ρ‚ΠΎ любая цСлая константа всСгда ΠΈΠΌΠ΅Π΅Ρ‚ суффикс L, Ρ‚. Π΅. вся Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ с ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏΠ° long ΠΈΠ»ΠΈ unsigned long.

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (A7.19) здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с ограничСниями: ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ цСлочислСнным, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС пСрСчислимых констант, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² sizeof.

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ строки

#ifdef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

#ifndef ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

эквивалСнтны соотвСтствСнно строкам

#if defined ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

#if !defined ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ #elif Π½Π΅ Π±Ρ‹Π»ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии языка, хотя ΠΎΠ½Π° ΠΈ использовалась Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСпроцСссорах. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прСпроцСссора defined - Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎΠ²Ρ‹ΠΉ.

A12.6. НумСрация строк

Для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прСпроцСссорами, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²:

#line константа "имя-Ρ„Π°ΠΉΠ»Π°"

#line константа

Π­Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ компилятору ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ дСсятичноС Ρ†Π΅Π»ΠΎΠ΅ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° соотвСтствСнно. Если имя Ρ„Π°ΠΉΠ»Π° отсутствуСт, Ρ‚ΠΎ Ρ€Π°Π½Π΅Π΅ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½ΠΎΠ΅ имя Π½Π΅ измСняСтся. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡ€ΠΎΠ²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ #line Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ послСднСй.


A12.7. ГСнСрация сообщСния ΠΎΠ± ошибкС


Π‘Ρ‚Ρ€ΠΎΠΊΠ° прСпроцСссора Π²ΠΈΠ΄Π°

#error ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ-лСксСмнСоб

ΠΏΡ€ΠΈΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π²Ρ‹Π΄Π°Ρ‚ΡŒ диагностичСскоС сообщСниС, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ лСксСм.

A12.8. ΠŸΡ€Π°Π³ΠΌΠ°

Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ строка Π²ΠΈΠ΄Π°

#pragma ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ-лСксСмнСоб

ΠΏΡ€ΠΈΠ·Ρ‹Π²Π°Π΅Ρ‚ прСпроцСссор Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ зависящиС ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ дСйствия. НСопознанная ΠΏΡ€Π°Π³ΠΌΠ° игнорируСтся.

A12.9. ΠŸΡƒΡΡ‚Π°Ρ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°

Π‘Ρ‚Ρ€ΠΎΠΊΠ° прСпроцСссора Π²ΠΈΠ΄Π°

#

Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий.

A12.10. Π—Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ "ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚" нСсколько Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ²; ΠΈΡ… ΠΎΠ½ замСняСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ. Π­Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ (ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прСпроцСссора defined Π² Ρ‚ΠΎΠΌ числС) нСльзя ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, ΠΊ Π½ΠΈΠΌ нСльзя Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #undef. Π­Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹:

__LINE__ НомСр Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки исходного тСкста, дСсятичная константа.

__FILE__ Имя ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, строка.

__DATE__ Π”Π°Ρ‚Π° компиляции Π² Π²ΠΈΠ΄Π΅ "MMM DD YYYY",строка.

__TIME__ ВрСмя компиляции Π² Π²ΠΈΠ΄Π΅ "hh:mm:ss", строка.

__STDC__ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° 1. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ 1

         Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… рСализациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ стандарту.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ #error ΠΈ #pragma Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²Π²Π΅Π΄Π΅Π½Ρ‹ ANSI-стандартом. Π—Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ макросы прСпроцСссора Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Π»ΠΈΡΡŒ, хотя ΠΈ использовались Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях.

A13. Π“Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ°

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ грамматичСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ рассматривали Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Они ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ содСрТаниС, Π½ΠΎ Π΄Π°Π½Ρ‹ Π² ΠΈΠ½ΠΎΠΌ порядкС.

Π—Π΄Π΅ΡΡŒ Π½Π΅ приводятся опрСдСлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… символов-Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ²: цСлая-константа, символьная-константа, константа-с-ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ-Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, строка ΠΈ константа-пСрСчислСниС. Π‘Π»ΠΎΠ²Π°, Π½Π°Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ латинским ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ (Π½Π΅ курсивом), ΠΈ Π·Π½Π°ΠΊΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ символы-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΊΠ°ΠΊ записаны. Π”Π°Π½Π½ΡƒΡŽ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ мСханичСски Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² тСкст, понятный систСмС автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ грамматичСского распознаватСля. Для этого ΠΏΠΎΠΌΠΈΠΌΠΎ добавлСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… синтаксичСских ΠΏΠΎΠΌΠ΅Ρ‚ΠΎΠΊ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для указания Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΉ, потрСбуСтся Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° конструкции со словами "ΠΎΠ΄ΠΈΠ½ ΠΈΠ·" ΠΈ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ символ с индСксом Π½Π΅ΠΎΠ±., ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ написан с этим символом, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ - Π±Π΅Π· Π½Π΅Π³ΠΎ. Π‘ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ - ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ typedef-имя:ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ объявлСниСм typedef-ΠΈΠΌΠ΅Π½ΠΈ символом-Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ, данная Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ понятна Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ грамматичСского распознаватСля YACC. Π•ΠΉ присущС лишь ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ΅, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ конструкции if-else.

Сдиница–трансляции:

    внСшнСС-объявлСниС

    Π΅Π΄ΠΈΠ½ΠΈΡ†Π°-трансляции внСшнСС-объявлСниС