Nee, de variabele declaratie in main declareert 1 variabele, bij je functie-definitie declareer je in het "prototype" een nieuwe variabele. En als je daar geen type opgeeft, dan gaat ie standaard van "int" uit. 50 jaar geleden was "int" het meest gebruikelijk en vonden ze het nutteloos om dat steeds te typen.
code:
int a, b;
int somefunc (int a)
{
printf ("a=%d, b = %d.\n", a, b);
}
int main (int argc, char **argv)
{
int b;
if (argc > 1) b = atoi (argv[1]);
else b=23;
a = 45;
somefunc (b);
somefunc (a);
somefunc (56);
}
Er zijn globale variabelen a en b. Variabele a wordt in main gebruikt. B wordt in de functie somefunc gebruikt. Daarnaast is er een argument a op de functie, dat is een locale naam (gedraagt zich als een variabele!) voor wat je hebt meegegeven aan de functie. Toevallig heet die "a".
Verder is er nog in de main functie een locale variabele "b" die het in main onmogelijk maakt om de globale variabele "b" te benaderen.
Hetzelfde geldt voor de parameter "a" die het in de "somefunc" onmogelijk maakt om de globale variabele "a" te benaderen.
Hier is PRECIES hetzelfde programma, maar dan uitgeschreven wat de verschillende variabelen zijn.
code:
int a1, b1;
int somefunc (int a2)
{
printf ("a=%d, b = %d.\n", a2, b1);
}
int main (int argc, char **argv)
{
int b2;
if (argc > 1) b2 = atoi (argv[1]);
else b2=23;
a1 = 45;
somefunc (b2);
somefunc (a1);
somefunc (56);
}
De bedoeling is dat je functies kan schrijven waarvan je niet hoeft te weten hoe de argumenten heten. Wel wat ze DOEN, maar niet hoe ze heten.
Dus stel dat ik een "calc_dist (x, y);" functie nodig heb. Dan schrijf ik: "calc_dist (float x, float y) { return (sqrt(x*x+y*y));}" (effe op 1 regel).
Als jij nu in je main een x, y en z coordinaat nodig hebt, dan mag je die gerust x, y en z noemen, dat een fucntie die ik geschreven heb door jou gebruikt wordt en toevallig ook x en y gebruikt hoef je helemaal niet te weten. En als jij een afstand in het y-z vlak wil uitrekenen kan je zomaar calc_dist (y, z) aanroepen. Geen enkel probleem.
[Bericht gewijzigd door
rew
op zondag 3 april 2022 09:11:26
(32%)