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?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
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.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
#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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!