Skip to content
Tiantan
Articles

Miért kapok 255-ös hibát, amikor -1-et adok vissza

On február 17, 2021 by admin

Új vagyok a C ++ programozásban, és egy nagyon alapvető kérdésem van. Észrevettem, hogy amikor return -1 a C ++ programban, majd ellenőrizze a kilépés állapotát, kapok 255. Miért van ez?

A kód a legalapvetőbb:

int main() { return -1; } 

Ezután a lefordított kód futtatása után:

echo $? 255 

Válasz

Mivel a UNIX / POSIX rendszerben egy program kilépési kódját definiálják aláíratlan 8 bites érték. -1-et konvertálva aláíratlan 8-bitesre 255-öt kap.

Szerkesztés a hozzáadáshoz:

További részletekért: a UNIX rendszerhívások wait * () családja kódolja a egyetlen 32 bites egész számgá dolgozzuk fel. Ennek az eredménynek a 32 bitje tovább bontásra kerül, hogy információt nyújtson, például arról, hogy a folyamat egy jel miatt lépett-e ki (és melyik) stb. Ebből a 32 bitből csak 8 van fenntartva a folyamat kilépési kódjára és ezeket aláíratlan értékként értelmezzük.

A UNIX / POSIX fork / exec / wait modellje az egyik legrégebbi és legmélyebben beágyazott szolgáltatás; ha ma új operációs rendszert tervez, akkor mást tehet (legalább 64 bitet használjon :-)).

Másrészt gyakorlatilag valóban hasznos, ha> 255 kilépési kód van? Kétlem. Ha valóban valami erősebbet szeretett volna, akkor azt javasoljuk, hogy váltson “kilépési karakterláncra”, egy szélesebb tartományú numerikus kilépési kód helyett.

Megjegyzések

  • Szép szerkesztés. Köszönöm ezt a további információt.

Válasz

Idézés a következőből: bash man oldal a EXIT STATUS

A végrehajtott parancs kilépési állapota a waitpid rendszerhívás vagy azzal egyenértékű függvény által visszaadott érték. A kilépési állapotok 0 és 255 közé esnek, bár, amint az alábbiakban kifejtésre kerül, a shell speciálisan 125 feletti értékeket használhat. A shell beépítettekből származó kilépési állapotok és az összetett parancsok szintén erre a tartományra korlátozódnak. Bizonyos körülmények között a shell speciális értékeket fog használni a meghibásodási módok megjelölésére.

Tehát ezt a tartományt korlátozza, valójában annyira meglepődtem, mint te vagy.

A waitpid (2) man oldalról:

WEXITSTATUS(status)

A

visszaadja a gyermek kilépési állapotát. Ez a status argumentum legkevesebb 8 bitjéből áll, amelyet a gyermek a kilépés (3) vagy _exit ( 2) vagy a main () visszatérési utasítás argumentumaként. Ezt a makrót csak akkor szabad használni, ha a WIFEXITED értéke igaz.

Written by admin

Vélemény, hozzászólás? Kilépés a válaszból

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

Legutóbbi bejegyzések

  • Rezonáns dipólusú balun használatával
  • Mi a különbség “ nem ” és “ nem ? [duplicate]
  • A JFK-n tud-e mozogni a belföldi járatokon a terminálok repülőtere között?
  • “ Mélyen értékelik ” vagy “ nagyra értékelik ”
  • Mit jelent az ' elvont ötletek '? [zárt]

Archívum

  • 2021 február
  • 2021 január
  • 2020 december
  • 2020 november
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어

Copyright Tiantan 2021 | Theme by Theme in Progress | Proudly powered by WordPress

Back to top