Kezdőoldal » Számítástechnika » Programozás » Egy ismerősömnél láttam egy...

Egy ismerősömnél láttam egy olyan C kódot amiben int main () helyett csak simán main () volt írva, és az include <stdio. H> sem szerepelt a kódban. Igaz, a program csak egyszerű printf utasításokból állt, de ezt így hogy?

Figyelt kérdés
2018. aug. 16. 14:45
 1/8 anonim ***** válasza:
100%

Milyen fordítót használt?

Nem mernék rá megesküdni, de úgy rémlik, ha elhagyjuk a függvény típusát, az automatikusan int-ként értelmezendő.

Szintén fordítófüggő, de megeshet, hogy a gyakoribb függvények #include nélkül is elérhetőek.

De nekem mindig azt tanították, és ezzel maximálisan egyet is értek, hogy az ilyen nem túl szabályos pongyolaságokat kerülni kell. Egyrészt a kód hordozhatósága miatt, másrészt meg az áttekinthetősége miatt. Illetve sokszor még hiba forrása is lehet.

2018. aug. 16. 15:12
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
az int a main előtt csak a visszatérési értéket határozza meg , tehát kell egy visszatérési érték (return 0;). A másik az valami C sajátosság lesz, hogy mivel főkönyvtárba benn van automatikusan berántja , de erre aki jártasabb c-ben lehet konkrétabb választ tud adni. C++-ban biztos nem működne. Viszont ezen részét ne vedd készpénzként nagyon rég volt dolgom c-vel.(Java amivel foglalkozom).
2018. aug. 16. 15:22
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:

CodeBlocksban gcc fordítót használt, illetve a rextesteren (online fordító) is kipróbáltuk.

-pedantic kapcsolóval mondjuk nyafog mindkét probléma miatt.

2018. aug. 16. 15:28
 4/8 anonim ***** válasza:
A main függvény tipusa indifferens a program futása szempontjából, mivel a main a visszatérési értékét az operációs rendszernek adja át (kilépéskor), az meg tudja, hogy mit kell csinálni.
2018. aug. 16. 15:58
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

Implicit módon a visszatérési típus int, a végén pedig visszatér a nullával.

Ezektől függetlenül meg lehet vizsgálni, hogy a printf függvény miatt nincs-e probléma, ha van -pedantic.

2018. aug. 16. 18:30
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:
100%

Azért, mert a korábban a C standard így határozta meg a program belépési pontját, lásd a C89-et.

A printf()-et pedig azért engedi át, mert ha egy függvény nem rendelkezik prototípussal az adott fordítási egységen belül, akkor a GCC hozzárendel egyet magától, és mivel automatikusan linkeli a C standard lib-et a programhoz, így a bináris el is éri a függvényt.

2018. aug. 16. 23:26
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

#6 tökéletesen leírta.

Kipróbáltam Linux alatt GCC-vel egy sima int() { printf("..."); } programot lefordítani, és figyelmeztetésekkel ugyan, de sikerült.


teszt.c:1:1: warning: return type defaults to ‘int’ [-Wimplicit-int]

main()

^

teszt.c: In function ‘main’:

teszt.c:3:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]

printf("Valami\n");

^

teszt.c:3:5: warning: incompatible implicit declaration of built-in function ‘printf’

teszt.c:3:5: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’


Tehát a main() kap egy alapértelmezett int visszatérési típust, a printf pedig implicit deklarálódik.


De mondom, ilyenekre nem illik hagyatkozni.

2018. aug. 17. 08:47
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:
Nyilvánvalóan egy valamit magára adó C/C++ programozónak az ilyenek szúrják a szemét, csak rákérdeztem, mert kíváncsi voltam :)
2018. aug. 17. 09:52

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!