Kukamilisha Macro ya assert ya C: Matumizi, Manufaa ya Utatuzi wa Hitilafu, na Mbinu za Juu

1. Utangulizi

Macro ya assert katika C ni chombo cha kipekee sana wakati wa utatuzi wa hitilafu. Inakagua ikiwa programu inafanya kazi kama inavyotarajiwa na inafanya programu kukoma ikiwa hali isiyo ya kawaida itagundulika. Hii inakuwezesha kutambua na kutatua maeneo yenye tatizo haraka. Katika makala hii, tutaelezea kila kitu kutoka matumizi ya msingi ya assert hadi mbinu za juu na matumizi ya vitendo katika maendeleo ya halisi.

1.1 Nini ni macro ya assert?

Macro ya assert ni sehemu ya maktaba ya kawaida ya C <assert.h> na hufanya kazi kwa kutoa ujumbe wa kosa na kukoma programu ikiwa hali iliyobainishwa inatathmini kuwa false. Hii inazuia matatizo ya programu na hufanya utatuzi wa hitilafu kuwa bora zaidi.

1.2 Umuhimu wa assert katika utatuzi wa hitilafu

Wakati wa utatuzi wa hitilafu, ni muhimu kugundua mapema iwezekanavyo wakati tabia inayotarajiwa ya programu imevunjika. Kutumia assert kunha kusitisha programu mara moja wakati tabia isiyo sahihi itatokea, na kufanya iwe rahisi kubaini tatizo. Hata katika hali ngumu ambapo hitilafu ni ngumu kupatikana, assert husaidia kurahisisha mchakato wa utatuzi wa hitilafu【13】.

2. Sarufi ya msingi na tabia ya assert

Ili kutumia macro ya assert, lazima kwanza ujumuishe <assert.h>. Sarufi ya msingi ni kama ifuatavyo:

#include <assert.h>
assert(condition);

Ikiwa hali ni true, assert hufanya chochote. Ikiwa ni false, inatoa ujumbe wa kosa na kukoma programu. Tazama mfano hapa chini:

#include <assert.h>

int main(void) {
    int x = 10;
    assert(x > 0);  // Condition is true, nothing happens
    assert(x < 0);  // Condition is false, outputs error message and terminates
    return 0;
}

2.2 Maelezo ya ujumbe wa kosa

Wakati assertashindwa, ujumbe wa kosa una maelezo yafuatayo:

  • Usemi wa hali
  • Jina la faili la chanzo ( __FILE__ )
  • Nambari ya mstari ( __LINE__ )
  • Jina la kazi ( __func__ )
    Assertion failed: (x < 0), file main.c, line 6
    

Taarifa hii inakusaidia kutambua haraka wapi katika programu kosa lilitokea.

2.3 Kukoma kwa programu kwa kutumia assert

Ikiwa macro ya assert inashindwa, inaita kazi ya abort(), na kusababisha programu kukoma kwa hali isiyo ya kawaida. Hii inazuia programu kuendelea kutekeleza katika hali isiyo sahihi.

年収訴求

3. Tofauti kati ya assert na tamko la if

3.1 Ukaguzi wa makosa kwa tamko la if

Tamko la if linaruhusu usimamizi wa makosa unaobadilika kwa kuendelea na programu wakati makosa yanashulikiwa ikiwa hali ni false. Hapa chini ni mfano wa ukaguzi wa makosa kwa tamko la if:

if (x > 0) {
    // Normal processing
} else {
    printf("Error: x is less than 0n");
    // Program continues
}

Kwa tamko la if, programu haikomi ikiwa hali ni false, hivyo msanidi lazima ashughulike na kosa mwenyewe.

3.2 Faida za assert

assert inakoma programu kwa nguvu ikiwa hali ni false, ikizuia hatari ya kuendelea kutekeleza katika hali isiyo sahihi. Ni muhimu hasa kwa kugundua haraka maeneo yanayowe kuwa na hitilafu. Katika miradi mikubwa au misimbo ya msimbo tata, kutumia assert kunaweza kuboresha sana ufanisi wa utatuzi wa hitilafu.

4. Kutumia assert na macro ya NDEBUG

4.1 Nini ni macro ya NDEBUG?

Kwa kufafanua macro ya NDEBUG, unaweza kuzima assert katika matoleo ya kutolewa. Wakati wa utatuzi wa hitilafu, weka assert iwezeshwa ili kuthibitisha tabia, na uzime katika matoleo ya kutolewa ili kupunguza athari za utendaji.

#define NDEBUG
#include <assert.h>
assert(x > 0);  // This line is ignored because NDEBUG is defined

4.2 Matumizi katika matoleo ya kutolewa

Kuzima assert katika matoleo ya kutolewa huondoa ukaguzi usiokuwa wa lazima, na kuboresha utendaji. Kwa programu za kibiashara na mifumo mikubwa, ni muhimu kutumia assert wakati wa utatuzi wa hitilafu na kuizima katika toleo la kutolewa ili kuepuka kupoteza rasilimali na kuboresha utendaji.

5. Mbinu za matumizi ya juu

5.1 Kukagua hali nyingi

Kwa assert, unaweza kuangalia hali nyingi mara moja. Katika mfano ufuatao, opereta ya && inatumika kuangalia hali nyingi:

assert(x > 0 && y > 0);

Hii njia inaboresha ufanisi wa code kwa kuthibitisha mahitaji mengi katika taarifa moja.

5.2 Kuonyesha ujumbe maalum

Unaweza kuongeza taarifa maalum kwenye ujumbe wa hitilafu ya assert ili kutoa maoni ya kina zaidi wakati hitilafu hutokea. Code ifuatayo hutoa ujumbe maalum wa hitilafu wakati hali ni ya uongo:

assert(x > 0 && "x must be greater than 0");

Kwa kubadilisha ujumbe wa hitilafu, unaweza kutambua wazi tatizo wakati wa kurekebisha.

侍エンジニア塾