Article View: pl.comp.lang.c
Article #759Re: argv
From: Qrczak
Date: Fri, 23 Jan 1998 15:12
Date: Fri, 23 Jan 1998 15:12
57 lines
3086 bytes
3086 bytes
On Fri, 23 Jan 1998, Marek Kotowski wrote:
> > Nie "wywołać", bo jawnie się jej nie wywołuje. Dlatego może mieć różną
> > liczbę argumentów. To ma być wyjątkowe? Przecież funkcja o nazwie
> > moja_funkcja też może mieć dowolną liczbę argumentów!
>
> Nieprawda. W jezyku C kazda funkcja ma dokladnie okreslona liczbe
> argumentow. Po to m.in. wprowadzono prototypy, by zapewnic
> przestrzeganie w modulach poprawnosci wywolywan funkcji,
> w tym liczby argumentow.
Ale funkcja main nie ma wcześniej prototypu! _Jedyną_ różnicą jest to,
co się dzieje "na zewnątrz" funkcji main. Oprócz tego, że jest
wywoływana automatycznie w określonej sytuacji, jest taka jak wszystkie.
Mogę zdefiniować:
moja_funkcja()
{ ... }
a w innym programie mogę tak:
moja_funkcja(int n)
{ ... }
To jest oczywiste, prawda?
I _dokładnie_ to samo jest w przypadku funkcji main. Też w jednym
programie może mieć inną liczbę argumentów niż w innym.
Oczywiście jeśli zdefiniuję funkcję main z argumentem typu double, to
program źle zadziała. Ale przynajmniej teoretycznie powinien się
skompilować, chyba że jakiś kompilator będzie miał dodane sztuczne
ograniczenia zabezpieczające przed tym (gcc łyka i
char *main(double x)).
Po prostu jest tak: Mamy zbiór dowolnych funkcji. Kompilujemy każdą w
taki sam sposób. Na koniec dołączamy kod ze standardowego modułu (już
nie napisany w C), który jakoś tam wywołuje funkcję main i interpretuje
odpowiednio jej wynik.
> Na koniec dodam jeszcze jeden argument: w standardzie (mam
> ksiazke Plaugera & Brodiego) napisano wprost, ze np. argc mozna
> modyfikowac - zalozenie pozornie zbedne. W koncu co mogloby
> byc zlego w zmodyfikowaniu liczby przekazywanej przez wartosc?
> Uznano jednak za wazne to podkreslic, jako ze argc przekazywane
> jest z zewnatrz, przez byt :-), o ktorym teoretycznie nic nie
> wiadomo.
IMHO nie pozornie, a faktycznie zbędne. Tak _musiało_ być. Zostało to
powiedziane, żeby rozwiać ewentualne wątpliwości tych, którzy myślą, że
main jest czymś szczególnym :-)
--
QRCZAK
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrczak.home.ml.org/
Technical Details
Message-ID:
<Pine.LNX.3.96.980123160236.626B-100000@qrnik.knm.org.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczakReferences:
<Pine.LNX.3.96.980118170312.17197A-100000@qrnik.knm.org.pl> <34C5278D.10A8@bdk.lublin.pl> <34C5B81A.8C6@imm.org.pl> <Pine.LNX.3.96.980122183153.525B-100000@qrnik.knm.org.pl> <34C8723E.5485@imm.org.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!qrnik.knm.org.pl!qrnik.knm.org.pl!qrczak From: Qrczak <qrczak@knm.org.pl> Newsgroups: pl.comp.lang.c Subject: Re: argv Date: Fri, 23 Jan 1998 16:12:28 +0100 Organization: Klub Nieszkodliwych Manjaków Lines: 58 Message-ID: <Pine.LNX.3.96.980123160236.626B-100000@qrnik.knm.org.pl> References: <Pine.LNX.3.96.980118170312.17197A-100000@qrnik.knm.org.pl> <34C5278D.10A8@bdk.lublin.pl> <34C5B81A.8C6@imm.org.pl> <Pine.LNX.3.96.980122183153.525B-100000@qrnik.knm.org.pl> <34C8723E.5485@imm.org.pl> NNTP-Posting-Host: ppp2-cst88.warszawa.tpnet.pl Mime-Version: 1.0 In-Reply-To: <34C8723E.5485@imm.org.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit