C-ben mi a különbség a void main () { és int main () { közt?
Valamint a static void main () { mire jó?
Feltételezem, hogy az int main() { hívása után a lezáró } előtti sorban a return 1 utasítással vissza kell térni (ha jól tudom)...
Egy kezdő honnan fogja tudni az ilyesmit e nyelv esetén, egyáltalán létezik jó tutorial, ami teljesen az alapoktól bevezet és elmagyarázza az összefüggéseket? (nem videóra hanem tutorial-ra gondolok).
Programozási logikám van, mert más nyelven tanultam programozni, amit értettem is, Pascal volt az a bizonyos nyelv, ami számomra megérthető volt és nem volt agyonbonyolítva mindenfélével...
Mondjuk agyon bonyolítva a C sincs.
Abban minden függvény. A main is.
A többit gondolom kitalálod.
C-ben a függvények deklarálásának módja:
visszatérési_érték függvénynév (paraméterek) {
függvénytörzs;
}
A void ("üres") kulcsszó arra utal, hogy a függvénynek nincsen visszatérő értéke (Pascalban erre szolgál a Procedure vagyis az eljárás).
Az int visszatérési érték esetén a függvény törzsében a return kulcsszó után egy egész értéket - például:
return 10;
vagy egy egész értéket tartalmazó változót:
int a = 10;
int b = 20;
int c = a + b;
return c;
kell megadni.
A static kulcsszó a láthatóságot szabályozza. Ha egy forrásfájlban egy függvény deklarálását static kucsszóval kezded, akkor az a függvény csak abban a forrásfájlban hívható meg, másikból nem.
Köszönöm. Hol találhatok nagyon jó tutorial-okat, amely "lépésről-lépésre" elvisz egy bizonyos szintig, hogy legalább egy fokkal bonyolultabb programot is képes legyek összehozni mint a "Hello world" kiíratása? :)
Szöveges tutorial-ok érdekelnének.
Egyébként a szabvány szerint, a program törzsét (ami Pascalban a Begin és End. kulcsszavak között helyezkedik el) alkotó main függvénynek egésznek (int) kell lennie.
"5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent; or in some other implementation-defined manner."
Forrás: [link]
"alkotó main függvénynek egésznek (int) kell lennie"
Pontosítok:
alkotó main függvény visszatérési értékének egésznek (int) kell lennie
#2: ekkora marhaságot honnan szedsz? static a láthatóságot? nem a private c++ kulcsszóval kevered?
A static azt jelenti, hogy az adott változó vagy függvény egyszer inicializálódik csak, és megtartja globálisan az értékét a későbbiekben is.
Mindkettőtöknek igaza van.
A static azt jelenti, hogy
a) static változó megtartja az értékét a függvényhívások közt úgy, hogy közben nem globális változó, hanem a függvény lokális változója (a fordító nem a stack-en foglal neki helyet, hanem a heap-en)
b) static függvény csak abból a forrásfájlból érhető el, amelyikben deklarálták
Kérdező, ajánlom Brian W. Kernighan- Dennis M. Ritchie: A C programozási nyelv c. könyvét, neten megtalálod.
"static a láthatóságot? nem a private c++ kulcsszóval kevered? "
Nem keverem. Maximum félreérthetőségre ad okot.
"In the C programming language (and its close descendants such as C++ and Objective-C), static is a reserved word controlling both lifetime (as a static variable) and visibility (depending on linkage).
...
Similarly, a static function -- a function declared as static at the top level of a source file (outside any class definitions) -- is only visible throughout that file ("file scope", also known as "internal linkage")."
Forrás: [link]
"az adott modulra nézve lokálissá teszi a proba függvény láthatóságát, azaz másik modulban lévő függvényből nem tudod meghívni (a linker hibát fog jelezni)."
Forrás: [link]
"Statikus változót lokálisan és globálisan is létrehozhatunk, értékét a program futása során végig megtartja, a különbség a kettő között csak a láthatóságban van."
Forrás: [link]
"A blokkon kívüli static kulcsszó az adat vagy függvény láthatóságát a forrásfájlon belülre korlátozza. A blokkon kívül deklarált, static nélküli változó és a static nélküli függvény globális."
Forrás: [link]
"A static tárolási osztály mind külső, mind pedig belső szintú azonosítókkal együtt használható. Ha külsó szintú azonosítók előtt szerepel, akkor az azonosítók láthatóságát a file-ra korlátozza. Ha belső szintú nevek előtt adjuk meg, a nevek élettartamát automatikusról globálisra módosítja."
Forrás: Benkő Tiborné, Benkő László, Tóth Bertalan: Programozzunk C nyelven! Computerbooks, Budapest 1998 (243. oldal)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!