Eretnekség egy void main (), használja a funkciót fő

Ha kijelöli a main () függvény visszatérési típusa eltérő int, a fordító az előző C99 fordítót, akkor kap definiált működést a program. A C99 fordító kapsz egy meghatározatlan viselkedés, ha így szól a végrehajtás verzió, vagy nem definiált működést - ha nem. Bízik a programot ebben a tekintetben?

5.1.2.2.1. A program futtatásához. Funkció használatához indítsa el a programot, az úgynevezett fő (primer). A végrehajtás kijelenti nincs prototípus ezt a funkciót. Meg kell határozni a visszatérése egy int típusú paraméterek nélkül:

vagy a két paraméter (itt nevezik őket argc és az argv, bár neveket lehet használni abban a sorrendben, amelyben kerülnek a működését, amelynek bejelentett):

int main (int argc, char * argv [])

vagy valamilyen más végrehajtására meghatározott módon. "

5.1.2.2.3. A program befejezése. Ha a fő funkciója a visszatérési típus olyan típus, amely kompatibilis int, a visszatérés a fő funkciója megegyezik a hívó a kimeneti függvény által visszaadott érték a fő funkciója az argumentuma; amikor a konzolok>, amely kiegészíti a fő függvény egy értéket 0. Ha a visszatérési típus nem kompatibilis az int típusú, teljesítési állapot visszatért a befogadó környezet nem meghatározott. "

Ebben az összefüggésben a „meghatározatlan” azt jelenti, hogy a szabvány nem igényel semmilyen különleges viselkedést a fordító, amely szabad visszatérni a befogadó környezet (általában az operációs rendszer), bármely állam, amit szeret, és csak ha a dokumentumok végrehajtásáról talált hogy támogatja a visszatérés a main () kivételével minden más int. Ha van egy üres (void) fő funkciója a main (), és írsz kódot egy atomreaktor, vagy egy katonai repülőgép, ha úgy érzik, egy kis tétovázás, és én nem is csodálom. Ezen túlmenően, a meghatározása main () a visszatérési típus void (üres) nem szintaktikai hiba vagy sérti a korlátozásokat, hogy a fordító nem kell kiadni diagnosztikai üzenet.

Nézzük meg, hogy több más szemszögből. Tekintsük a negyedik érv a rendezés funkciót qsort. Ő adott egy pointert néhány összehasonlító funkciója, amely paraméterként két állandó típusú const void *, és a visszatérési típus int. qsort függvény meghívja az összehasonlító függvényt, és használja a visszaadott értékét közötti kapcsolat meghatározása két objektum a tömb, ami kell válogatni. Tehát, mi történik, ha írsz egy összehasonlító függvényt, mint ez?

void CompInts (const void * pl, const void * p2)
const int * nl = pi;
const int * n2 = p2;
int diff;
if (* nl> * n2)
Diff = 1;
else if (* nl == * n2)
Diff = 0;
más
Diff = -1;
>

Mondanom sem kell, nem igaz? A qsort funkció nincs módja, hogy az információt amire szüksége van. Nem adhatja meg a prototípus összehasonlítás funkciók - akkor kell dobni a szabályok utaló qsort funkciót, ha azt szeretnénk, hogy ez a funkció, amit vársz tőle.

Oké, vissza a funkció main (). Van ugyanaz a helyzet. Ön nem felelős az interfész definíciós main (). Mert ez a hívót. Ki hívja main ()? Ez nem te vagy (bár valójában lehet, ha a hívni kívánt main (), mint te is, ha azt szeretné, hogy hívja fel összehasonlító funkciója qsort). De az elsődleges „ügyfél” main () függvény, hogy a kódot. Ahogy az indítási kód határozza meg, hogy a program sikeres, ha nem mondja meg neki róla? Ez a felhívás „ül” valahol mélyen a belek a rendszer (itt I egyszerűsített egy kicsit):

int returnstatus;
returnstatus = fő (argc, argv);


Ha „elpusztult” main () függvény lesz több érdekes funkciók:

  • A program úgy működjön, ahogy Ön szeretné.
  • returnstatus kaphat csapdába, és okoz egy baleset a program (vagy a teljes számítógép).
  • indítókódját küldhet hamis visszatérési kódot az operációs rendszer, amely aztán úgy dönt, hogy vissza az adatbázis tranzakció, mert a program nem tért vissza a várt érték.
  • És ez a legrosszabb - kód futtatását kívül elérheti az orrát, és elkezdi kivonni azt a démonok. (Démon (Demon) - eljárás automatikusan fut bizonyos körülmények között, és jellemzője a kiszámíthatatlan viselkedése -. Megjegyzés tudományos ed ...).

Main () függvény egy int. Már csak három érték hasznosítható más platformokon, akkor visszatérnek a main ():

Az utóbbi kettőt meghatározott , és a tényleges értékek függnek az adott rendszerben. (Más szavakkal, ne nézd meg ezeket az értékeket a könyvtárban és átviheti őket a program.)

Ha vissza 0-ra, az indítási kód megmondja az operációs rendszer vagy más befogadó környezetben, hogy a program sikeres, fordítására 0, ha szükséges, hogy a különböző értékeket.

A számos érv a funkció main ()

Tény, hogy a funkció lehet meghatározni, hogy meghatározzuk a végrehajtás. Következésképpen az ilyen meghatározás fő, mind a

int main (int argc)