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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Linux ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 224

Автор Роббинс ΠΡ€Π½ΠΎΠ»ΡŒΠ΄

Π­Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚; ΠΌΡ‹ сами Π΅Π΅ использовали ΠΈ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π΅Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ°Ρ…. Однако, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π° ΠΈ дальшС с ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ΠΌ количСства макросов Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ:

/* ΠœΠ•Π’ΠžΠ”Π˜ΠšΠ 2 --- Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ пСрСносима; рСкомСндуСтся */

/* Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ прилоТСния: */

#ifdef MYAPPDEBUG

#define DPRINT(stuff) fprintf stuff

#else

#define DPRINT(stuff)

#endif

/* Π’ исходном Ρ„Π°ΠΉΠ»Π΅ прилоТСния: */

DPRINT((stderr, "myvar = %d\n", myvar));

Β /* ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ скобки */

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ макрос извлСкаСтся с двумя Π½Π°Π±ΠΎΡ€Π°ΠΌΠΈ скобок! ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΠ² вСсь список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для

fprintf()
Π² ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π²Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ число ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… макросов.

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ компилятор, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ стандарту Π‘ 1999 Π³., Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ чистый ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:

/* ΠœΠ•Π’ΠžΠ”Π˜ΠšΠ 3 --- самая чистая, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для C99 */

/* Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ прилоТСния: */

#ifdef MYAPPDEBUG

#define DPRINT(mesg, ...) fprintf(stderr, mesg, __VA_ARGS__)

#else

#define DPRINT(mesg, ...)

#endif

/* Π’ исходном Ρ„Π°ΠΉΠ»Π΅ прилоТСния: */

DPRINT("myvar = %d\n", myvar);

DPRINT("v1 = %d, v2 = %f\n", v1, v2);

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π‘ 1999 Π³. прСдусматриваСт Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ макрос (variadic macros); Ρ‚.Π΅. макрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². (Π­Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅

printf()
). Π’ ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ‚Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ '
...
' ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ Ρ‚Π΅Π»Π΅ макроса ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€
__VA_ARGS__
замСщаСтся прСдусмотрСнными Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, сколько Π±Ρ‹ ΠΈΡ… Π½ΠΈ Π±Ρ‹Π»ΠΎ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠΌ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ макроса Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ лишь ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ€ скобок, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ СстСствСнным. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ сохраняСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всСго ΠΎΠ΄Π½ΠΎ имя макроса вмСсто Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² соотвСтствии с числом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². НСдостатком являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ компиляторы C99 ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ доступны Π½Π΅ Ρ‚Π°ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎ, Ρ‡Ρ‚ΠΎ сниТаСт ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ этой конструкции. (Однако, эта ситуация Π±ΡƒΠ΄Π΅Ρ‚ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒΡΡ.)

РСкомСндация: Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ вСрсии GCC ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ макросы. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для компилирования своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ GCC (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ компилятора C99), ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ C99. Однако, Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания, компиляторы C99 всС Π΅Ρ‰Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ явлСниСм. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли ваш ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ компиляторами, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос Π² стилС с двумя ΠΏΠ°Ρ€Π°ΠΌΠΈ скобок.

15.4.1.2. По возмоТности ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ макросов с выраТСниями

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, макросы прСпроцСссора Π‘ ΡΠ²Π»ΡΡŽΡ‚ΡΡ довольно острой ΠΏΠ°Π»ΠΊΠΎΠΉ с двумя ΠΊΠΎΠ½Ρ†Π°ΠΌΠΈ. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π²Π°ΠΌ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΌΠΎΡ‰ΡŒ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ€Π°Π½ΠΈΡ‚ΡŒΡΡ самому. [169]

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ для эффСктивности ΠΈΠ»ΠΈ ясности ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ макросы:

#define RS_is_null (RS_node->var_value == Nnull_string)

...

if (RS_is_null || today == TUESDAY) ...

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, ΠΎΠ½ выглядит Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. УсловиС '

RS_is_null
' ясно ΠΈ просто для понимания ΠΈ абстрагируСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² GDB:

(gdb) <b>print RS_is_null</b>

No symbol &quot;RS_is_null&quot; in current context.

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ‹ΡΠΊΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ макроса ΠΈ вывСсти Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

РСкомСндация: Для прСдставлСния Π²Π°ΠΆΠ½Ρ‹Ρ… условий Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, значСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ условий явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ мСняСтся Π² ΠΊΠΎΠ΄Π΅.

Π’ΠΎΡ‚ сокращСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ·

io.c
Π² дистрибутивС
gawk
:

void set_RS() {

Β ...

Β RS_is_null = FALSE;

Β if (RS-&gt;stlen == 0) {

Β  ...

Β  RS_is_null = TRUE;

Β  ...

Β  matchrec = rsnullscan;

Β }

}

ПослС установки ΠΈ сохранСния

RS_is_null
Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ ΠΈ вывСсти ΠΈΠ·-ΠΏΠΎΠ΄ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

Π—ΠΠœΠ•Π§ΠΠΠ˜Π•. Начиная с GCC 3.1 ΠΈ вСрсии 5 GDB, Ссли Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с опциями

-gdwarf-2
ΠΈ
-g3
, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макросы ΠΈΠ·-ΠΏΠΎΠ΄ GDB. Π’ руководствС ΠΏΠΎ GDB утвСрТдаСтся, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ GDB Π½Π°Π΄Π΅ΡŽΡ‚ΡΡ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ΅ прСдставлСниС для макросов, ΠΈ Ρ‡Ρ‚ΠΎ опция
-g3
Π±ΡƒΠ΄Π΅Ρ‚ отнСсСна ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅
-g
.

Однако, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макросы Ρ‚Π°ΠΊΠΈΠΌ способам позволяСт лишь комбинация GCC, GDB ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ: Ссли Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ GCC (ΠΈΠ»ΠΈ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ), Ρƒ вас всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠœΡ‹ придСрТиваСмся своСй Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠΎ возмоТности Ρ‚Π°ΠΊΠΈΡ… макросов.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с макросами распространяСтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°. Если макрос опрСдСляСт нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² сСрСдинС макроса. Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ для inline-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ C99 ΠΈ Π‘++: Ссли компилятор замСняСт Ρ‚Π΅Π»ΠΎ inline-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сгСнСрированным ΠΊΠΎΠ΄ΠΎΠΌ, снова Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ. Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ связь с нашим совСтом ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ лишь с ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ

-g
; Π² этом случаС компиляторы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ inline-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ с Ρ‚Π°ΠΊΠΈΠΌΠΈ строками ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пСрСмСнная, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ состояниС. Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ просто, ΠΈ это рСкомСндуСтся ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Π‘, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ

#define
для Ρ‚Π°ΠΊΠΈΡ… состояний ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ константы. НапримСр:

/* Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ состояния, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ

Β  Β Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ поискС ΠΊΠΎΠ½Ρ†Π° записи. */

#define NOSTATEΒ  1 /* сканированиС Π΅Ρ‰Π΅ Π½Π΅ Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ (всС) */

#define INLEADER 2 /* пропуск Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (RS = &quot;&quot;) */