ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Π½Π°Π±ΠΎΡ ΡΠΊΠΎΠ±ΠΎΠΊ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠΌΡ ΠΌΠ°ΠΊΡΠΎΡΠ° Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠΈΡΠ»ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ 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) print RS_is_null
No symbol "RS_is_null" in current context.
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΡΡΠΊΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ: ΠΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π°ΠΆΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ΄Π΅.
ΠΠΎΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· io.c Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π΅ gawk:
void set_RS() {
...
RS_is_null = FALSE;
if (RS->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 = "") */
#define INDATA 3 /* Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΠΈΡΠΈ (Π²ΡΠ΅) */
#define INTERM 4 /* ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΎΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (RS = RS = regexp) */
int state;
...
state = NOSTATE;
...
state = INLEADER;
...
if (state != INTERM) ...
ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΎ ΠΎΠΏΡΡΡ-ΡΠ°ΠΊΠΈ, Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠΎΠ΄ ΠΈΠ· GDB:
(gdb) print state
$1 = 2
ΠΠ΄Π΅ΡΡ Π²Ρ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΡΡΠΎΠ±Ρ Π²ΡΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ 2. ΠΠ°ΠΊΠΎΠ²Π° ΠΆΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π°?
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ: ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ (enum). ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ enum ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ.
ΠΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΆΠ΅ ΠΈΠ· io.c Π² gawk:
typedef enum scanstate {
NOSTATE, /* ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΠ°ΡΠΎ (Π²ΡΠ΅) */
INLEADER, /* ΠΏΡΠΎΠΏΡΡΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (RS = "") */
INDATA, /* Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΠΈΡΠΈ (Π²ΡΠ΅) */
INTERM, /* ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΎΡ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (RS = "", RS = regexp) */
} SCANSTATE;
SCANSTATE state;
/* ... ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ! ... */
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ state ΠΈΠ· GDB ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅:
(gdb) print state
$1 = NOSTATE
15.4.1.3. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΊΠΎΠ΄
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π² if ΠΈΠ»ΠΈ while ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ && ΠΈΠ»ΠΈ ||. ΠΡΠ»ΠΈ ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠΌΠΈ), Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΎΠΌΠ°Π½Π΄Ρ GDB step ΠΈ next ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (statements), Π° Π½Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (expressions). (Π Π°Π·Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΡΡΠΎΠΊΠ°ΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ).
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ: ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈΡ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅. ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π²Ρ (ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅ Π²Π°Ρ) ΠΌΠΎΠ³Π»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ΡΡΠ½ΠΊΡΠΈΡ do_input() ΠΈΠ· ΡΠ°ΠΉΠ»Π° io.c gawk:
1 /* do_input --- Π³Π»Π°Π²Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π²ΠΎΠ΄Π° */
2
3 void
4 do_input()
5 {
6 IOBUF *iop;
7 extern int exiting;
8 int rval1, rval2, rval3;
9
10 (void)setjmp(filebuf); /* for 'nextfile' */
11
12 while ((iop = nextfile(FALSE)) != NULL) {
13 /*
14 * ΠΠ΄Π΅ΡΡ Π±ΡΠ»ΠΎ:
15 if (inrec(iop) == 0)
16 while (interpret(expression_value) && inrec(iop) == 0)
17 continue;
18 * Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠΎ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
19 */
20 rvall = inrec(iop);
21 if (rvall == 0) {
22 for (;;) {
23 rval2 = rval3 = -1; /* Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ */
24 rval2 = interpret(expression_value);
25 if (rval2 != 0)
26 rval3 = inrec(iop);
27 if (rval2 == 0 || rval3 != 0)
28 break;
29 }
30 }
31 if (exiting)
32 break;
33 }
34 }
(ΠΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π° ΡΡΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π° Π½Π΅ ΡΠ°ΠΉΠ»Π°.) ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ gawk. ΠΠ½Π΅ΡΠ½ΠΈΠΉ ΡΠΈΠΊΠ» (ΡΡΡΠΎΠΊΠΈ 12 ΠΈ 33) ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΉΠ»Ρ Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π² ΡΡΡΠΎΠΊΠ°Ρ 13β19 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΆΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΅Π΅
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ inrec() Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ interpret() ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π»ΠΈΡΡ ΠΏΡΠΎΠΉΡΠΈ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ ΡΠΈΠΊΠ», ΠΏΡΠΎΠ²Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π³ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
Π‘ΡΡΠΎΠΊΠΈ 20β30 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΡΠΎΡ ΡΠ°Π½ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΈΠ· ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π² ΡΡΡΠΎΠΊΠ΅ 23 ΡΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅, ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΈΠΊΠ»Π°. Π‘ΡΡΠΎΠΊΠ° 27 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» (ΡΡΠ°Π²Π½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ 22 ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ 16), ΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌΡ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ, ΠΌΡ ΠΏΡΠΈΠ·Π½Π°Π΅ΠΌΡΡ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΠΊΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΅Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ; ΠΎΠ½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»Π°. Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΎΡ ΡΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠΈΠΊΠ»Π° Π±ΡΠ»Π° Π±Ρ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Ρ: