ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° 32: ΠΡΡΡΡ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π½ΡΡΠ΅
ΠΠ²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π² ΠΊΠΎΡΠ·ΠΈΠ½Ρ Π΄Π»Ρ ΠΌΡΡΠΎΡΠ°"
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΡΠΊΠΎΡΠ΅ΠΉΡΠ΅Π³ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π½ΡΡΠ΅. Π Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΡΡΠΎ Π»ΡΡΡΠΈΠΉ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ, Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΠΈΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π½Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π²Π°Π΄ΡΠ°ΡΠΎΠ³ΠΎ ΠΏΠΎ ΡΡΠ΅ΡΡ ΡΠΈΠΊΠ»Π° ΠΎΡΠΆΠΈΠΌΠ°.
ΠΡΠ° ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ Π²ΠΎΠΏΠ»ΠΎΡΠ΅Π½Π° Π² ΡΠ·ΡΠΊΠ΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ Java. ΠΠΎΠ³Π΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΡΡΠΎ-ΡΠΎ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΠΎΠ΅, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ RuntimeException. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ, ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π½Π° Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΡ Π΅Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ ΡΡΠ΅ΠΊΠ°.
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠΎ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. Π ΡΠ·ΡΠΊΠ΅ Π‘ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ:
#define CHECK(LINE, EXPECTED) \
{int rc = LINE; \
if (rc!= EXPECTED) \
ut_abort(_FILE_, _LINE_, #LINE, rc, EXPECTED); }
void ut_abort(char *file, int In, char *line, int rc, int exp) {
fprintf(stderr, "%s line %d\n'%s': expected %d, got %d\n", file, In, line, exp, rc);
exit(1);
}
Π’ΠΎΠ³Π΄Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄Π²Π΅Π΄ΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠΎΠΊΠΈ:
CHECK(stat("/tmp", &stat_buff), 0);
ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, ΡΠΎ Π²Ρ Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² stderr:
source.c line 19
"stat("/tmp", &stat_buff)' : expected 0, got -1
Π―ΡΠ½ΠΎ, ΡΡΠΎ Π² ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π²ΡΡ ΠΎΠ΄ ΠΈΠ· Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠΌΠ΅ΡΡΠ΅Π½. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΡΠ΅ΡΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Ρ, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π», Π·Π°Π²Π΅ΡΡΠΈΡΡ ΠΎΡΠΊΡΡΡΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠ΄Π΅ΡΡ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ, ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΡΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ "Π‘Π»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ". ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ ΠΆΠ΅ β Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠΈΡΠ°Π»ΠΎΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΅ΡΡΠ΅Ρ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠΎΠ²Π΅ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΠΏΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠ΅ΡΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈΠ½ΠΎΡΠΈΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅Π΄Π°, ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΡΡΠ΅Π½Π½Π°Ρ.
ΠΡΡΠ³ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅:β’ ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ
β’ ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
23
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ
Π ΡΠ°ΠΌΠΎΠ±ΠΈΡΠ΅Π²Π°Π½ΠΈΠΈ Π΅ΡΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΡΠ»Π°Π΄ΠΎΡΡΡΠ°ΡΡΠΈΠ΅. Π ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°ΠΌΠΈ ΡΠ΅Π±Ρ Π²ΠΈΠ½ΠΈΠΌ, ΠΌΡ ΡΡΠ²ΡΡΠ²ΡΠ΅ΠΌ, ΡΡΠΎ Π½ΠΈΠΊΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π½Π΅ Π²ΠΏΡΠ°Π²Π΅ Π±ΠΎΠ»Π΅Π΅ Π²ΠΈΠ½ΠΈΡΡ Π½Π°Ρ.
ΠΡΠΊΠ°Ρ Π£Π°ΠΉΠ»ΡΠ΄, ΠΠΎΡΡΡΠ΅Ρ ΠΠΎΡΠΈΠ°Π½Π° ΠΡΠ΅ΡΠ ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΎΠ±ΡΠ·Π°Π½ Π²ΡΡΡΠΈΡΡ Π½Π΅ΠΊΡΡ ΠΌΠ°Π½ΡΡΡ. ΠΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ½ΠΎΠ²Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π΅ΡΠΎΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΡΠΈΠΌΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ, ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ, ΡΠ°ΠΌΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ β ΡΠ»ΠΎΠ²ΠΎΠΌ, Π²ΡΠ΅ΠΌΡ, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ. ΠΠ½Π° Π·Π²ΡΡΠΈΡ ΡΠ°ΠΊ:
"ΠΡΠΎΠ³ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡβ¦"
Π Π΄Π°Π»Π΅Π΅: "Π§Π΅ΡΠ΅Π· 30 Π»Π΅Ρ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π³ΠΎΠ΄Π° Ρ Π²Π°ΡΠΈΡ ΠΈ Π΄Π²ΡΡ ΡΠ°Π·ΡΡΠ΄ΠΎΠ²". "ΠΡΠΆΠ½Π° Π»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π°ΡΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π·Π° ΡΡΠ±Π΅ΠΆΠΎΠΌ?" "Π‘ΡΠ΅ΡΡΠΈΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅". "ΠΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ printf Π½Π΅ Π΄Π°Π΅Ρ ΡΠ±ΠΎΠ΅Π²".
ΠΠ΅ ΡΡΠΎΠΈΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΠ°ΠΌΠΎΠΎΠ±ΠΌΠ°Π½ΠΎΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° 33: ΠΡΠ»ΠΈ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π²ΠΎΠ²ΡΠ΅
ΠΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠ΅ Π΄ΡΠΌΠ°ΡΡ "ΠΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ", ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΡΡΠΎ Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΡΡΠΎ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΡΠ·ΡΠΊΠΎΠ² Π‘ ΠΈ Π‘++ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΠ° assert ΠΈΠ»ΠΈ _assert, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΡΠΈ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΡΠ΅Π½Π½ΠΎΡΡΡ. ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΊ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅, Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ NULL, ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ:
void writeString(char *string) {
assert(string != NULL);
...
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠΌΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΠΎΠ½:
For (int i=0; i<num_entries-1; i++) {
assert(sorted[i] <= sorted[i+1]);
}
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (ΡΠΌ. Π²ΡΠ΅Π·ΠΊΡ "Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ"). ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΠΉΡΠ΅ Π² ΠΌΠ°ΠΊΡΠΎΡ assert ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°. Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ½ΠΈ Π»ΠΈΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ; Π²Ρ ΠΆΠ΅ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅:
printf("Enter 'Y' or 'N': ");
ch = getchar()
assert((ch=='Y')||(ch=='N')); /* Π΄ΡΡΠ½ΠΎΠΉ ΡΠΎΠ½! */
Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌΠ΅ΡΡΠ°ΡΡΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π° assert Π²ΡΠ·ΡΠ²Π°Π΅Ρ exit, Π΅ΡΠ»ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ, Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΉ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²Π°ΠΌΠΈ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΡΠ΅ΡΡΡΡΡ, ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°Π»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ longjump ΠΊ ΡΠΎΡΠΊΠ΅ Π²ΡΡ ΠΎΠ΄Π°, ΠΈΠ»ΠΈ ΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π»ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ Π½Π΅Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ.
ΠΠ΅ ΠΎΡΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΡΡ ΠΎΠΆΠ΅Π΅ Π½Π΅Π΄ΠΎΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠ²ΠΎΠ·Π³Π»Π°ΡΠΈΠ»ΠΈ ΡΠ΅, ΠΊΡΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄Ρ. ΠΠ½ΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
"Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ Π»ΠΈΡΠ½ΠΈΠΌ Π±ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΎ, ΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»ΡΡΠΈΡΡΡΡ, ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π° ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² Π½ΠΈΡ ΠΎΡΠΏΠ°Π΄Π°Π΅Ρ ΠΈ ΠΈΡ Π½Π°Π΄ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π½ΡΠΆΠ½Ρ Π»ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ" .
Π ΡΡΠΎΠΌ Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π½ΠΈΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄Π²Π° ΡΠ²Π½ΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠ²ΠΎΠ΅ β Π°Π²ΡΠΎΡΡ Π²ΡΡΠΊΠ°Π·ΡΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΌΡ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠΌ. "ΠΠ΅Π·ΠΆΠ°Π»ΠΎΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅"). ΠΡΠΎΡΠΎΠ΅ β ΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΡΡΡ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΎΠΏΠ°ΡΠ½ΠΎΠΌ ΠΌΠΈΡΠ΅. ΠΠ΅ΡΡΠΌΠ° Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΡΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ³ΡΡΠ·Π°ΡΡ ΠΊΠ°Π±Π΅Π»ΠΈ, Π½ΠΈΠΊΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π±ΠΈΠ²Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΈΠ³ΡΡΡΠΊΡ, Π° ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½ΡΡ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ. ΠΡΠ΅ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ . ΠΠ°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΠΎΡΠΎΠ½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ±Π΅ΠΆ β ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ Π»ΡΠ±ΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ±Π΅ΠΆ.
ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΡΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ ΡΡΠΎΠ΄Π½ΠΈ Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎ ΠΊΠ°Π½Π°ΡΡ Π±Π΅Π· ΡΡΡΠ°Ρ ΠΎΠ²ΠΎΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΊΠΈ Π½Π° ΡΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π°-ΡΠΎ Π²Ρ ΡΠΆΠ΅ ΡΠ°ΠΊ Π΄Π΅Π»Π°Π»ΠΈ. Π‘ΡΠΌΠΌΠ° ΡΡΡΠ°Ρ ΠΎΠ²ΠΊΠΈ Π²Π΅Π»ΠΈΠΊΠ°, Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ.
ΠΠ°ΠΆΠ΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΡΠΈΠΌΠ΅Ρ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΠΌΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠΎ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ [26], Π½ΠΎ ΠΎΡΡΠ°Π²ΡΡΠ΅ Π² ΠΏΠΎΠΊΠΎΠ΅ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡΠ‘ΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΠ°ΠΊ-ΡΠΎ Π½Π΅Π»ΠΎΠ²ΠΊΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΡΠ»ΠΎ Π±Ρ Π΄ΡΡΠ½ΡΠΌ ΡΠΎΠ½ΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Java Π½Π΅ΡΡΠΎ Π²ΡΠΎΠ΄Π΅:
while (iter.hasMoreElements() {
Test.ASSERT(iter.nextElement() != null);
Object obj = iter.nextElement();
// ...
}
ΠΡΠ·ΠΎΠ² .nextElement() Π² ASSERT ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ, Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΠΈΠΌΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΈΠΊΠ»Π° Π·Π° Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π»ΠΈΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ. ΠΡΡΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ:
while (iter.hasMoreElements()) {
Object obj = iter.nextElement();
Test.ASSERT(obj != null);
//β¦
}
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²Π»ΡΡΡΡΡ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Β«Heisen-bugΒ» β ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΡΠ»Π°Π΄ΠΊΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (ΡΠΌ. [URL 52]).