home *** CD-ROM | disk | FTP | other *** search
- _______________ _____ _____ _________ ___________________
- \. /________ |. /_____:o | /. \/|___/_ \ /
- \___ _____/|. / \|| /|. |: |// ______/·|. / ______ \ ___/
- /. /_/· || / \: \|| |· |/ / \ \/ || /_______ \/+ /
- // ____/ || \ \ \ \: ¯¯¯ | / / / || \ /·\ / \ __/_
- // / // |+ \ \ \ \___/ | \___/ / |· \/ \/ / /
- /· / \\ / \ / |: | / / / /
- \___/ \________/_____|\___/: |_____|_______/\________/_______/______/
- l_____|·MBB·
-
-
- _ ___ \ _
- ___|__________/\______\//\________________________________________________ _
- \___ / ___/ \_____\//\______________ /\ ______/ _______/ ___ _
- | _/ \ _ \_ \/ | ___)_/_ ___/_/_ ___)_\______ \______
- | \ \/ / || | \ | \ | \ / / /
- _ __| \__________/____|| |____ |__ |__ _____/ ___ _
- `----' `-----' `------' `------' `---------' `------'
-
- [hOMELESS÷bBS!]
-
- [bIRDHOUSE^pROJECTS eUROPEAN hQ][mYTH! gERMAN hQ][aRT-cORE! fUN hQ]
-
- [sYSdOODE: -sLIME!^bIRDHOUSE÷pROJECTS-lEADER^mYTH!]
- [cOdOODES: mOGUe!/sCX^aC! pRIMUS!/bP!-lEADER]
- [MR.VAiN/bNZ^aC! wHIRLWIND/mYTH!]
-
- [uPLOADER:GeNeRaTioN ][oF:[+] PRODIGY '95 [+]]
- [uPLOAD tIME:13:53:40][uPLOAD dATE:03-Jan-95]
-
- _ ___ \ _
- ___|__________/\______\//\________________________________________________ _
- \___ / ___/ \_____\//\______________ /\ ______/ _______/ ___ _
- | _/ \ _ \_ \/ | ___)_/_ ___/_/_ ___)_\______ \______
- | \ \/ / || | \ | \ | \ / / /
- _ __| \__________/____|| |____ |__ |__ _____/ ___ _
- `----' `-----' `------' `------' `---------' `------'
-
-
-
-
- «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
- . . . . : · .
- ____/¦__ ___/¦____ __/¦___________/¦__ ¦ ¦___/¦__ !
- _ ____ \__\____ _// _____\_________ \ | | ____ \__ _:/\__
- /· |____//· | \\_____ ·\| | | \\| |/· |____/ \ Oo /
- // | \ | \ l \\ | | ·\_ // | \ /_--_\
- \__________\________/________/___j___j / \__________\ :\/
- -------------------------------------l____/ :----------- ¡
- · ·
- . : · . . . .
- ! _ ____/¦__ ¦ ¦____¦\____ ____/¦__ ___/¦____ __/¦_____ __
- _:/\__ _ _ ____ \__| |______ \ _ ____ \__\_ | _// _____ __ _
- \ Oo / /· |____/| |/· __ __/ /· |____//· | \\_____ ·\
- /_--_\ // | \| // | \_// | \ l \ l \\
- :\/ \__________\ \____j /\__________\________/________/
- ¡ -----------· :----l____/-------------------------------
- · ·
- <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
-
- Upload Date: [01-03-95] «» Upload Time: [07:18:26]
-
- «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
-
- .__ _ r
- : __tHIS fILE wAS D/L fROM I
- _ _02-Jan-95_________________________: N
- _| \/ | G
- \/ T¾R¾S¾I LEADER H¾Q \\ ² tRISTAR & rED
- \ sECTOR
- ö . |_/\________/\__.___ _/\_______ | W
- /\ |\ ._ \ \ \ ____)² iNC.
- . \/\------------|/ |/____/ \ / __)__!---------------.
- |\/ / ² / | \ \ 4nODEZ |
- | \_____| \_____²_____/___________/ !_
- |ö | | /_/\
- | _/\__.___ !/\_._/\________/\________/\______! _/\______ \_\/
- | \ \ \___!\ ._ \ ._ \ ____) \ . \ |
- 00:13:39 \ / |/ |/ / |/ / __)__ / | \_/¹
- / | \ | / / / / \ | \
- \_____²_____/____²_________/_________/___________/_____²_____/ö2Fö
- ² ²
- _!/\__ |__
- \ Oo / +49 p¾R¾I¾V¾A¾T¾E¾! ___| /
- eLITE gUYS /_--_\ \ //
- wILL gET ²\/ tHE hOLY mASTER iS \/|
- iNVITED hERE ! mClOUD ²
- ² aND hIS hELPING hAND iS mARIO :
- :
- ¾ aSK fOR nUMBER aND sYSPW/nUP
-
-
- @BEGIN_FILE_ID.DIZFREQUENTLY ASKED QUESTIONS ABOUT `C`
- -German Edition-
- 6-10
- @END_FILE_ID.DIZ
- /Teil 6/
-
- Q3.6 Warum kann ich "int f(int*,int*)" nicht als qsort()-
- Vergleichsfunktion benutzen?
-
-
- Um einen Array von ints mit Hilfe von qsort() zu sortieren, ist
- es natürlich verlockend, die Vergleichsfunktion einfach so zu
- formulieren:
-
- int cmp(int *a,int *b)
- {
- return *a - *b;
- }
-
- Aber dabei handelt es sich um einen Typfehler, der zu einem
- Compilerabbruch oder auch zu einem Absturz zur Laufzeit führen
- kann.
- Deklarationen, Definitionen, Prototypen 31
- ---------------------------------------------------------------
-
-
- Wenn qsort() mit vollständigem Prototypen deklariert ist, d.h.
- als
-
- void qsort(const void*, size_t, size_t,
- int (*)(void*,void*));
-
- dann ist es nicht möglich, obige Vergleichsfunktion an qsort()
- zu übergeben (ohne einen sehr häßlichen Cast, durch den es aber
- auch nicht richtig würde), weil void* und int* inkompatible
- Typen sind.
-
- Der Grund dafür ist, daß ein void* durchaus größer sein darf
- als ein int* (was auf manchen Rechnern, z.B. solchen mit
- wortadressierendem Prozessor, auch der Fall ist). Und wenn
- qsort() einen Array von ints sortiert, dann übergibt es der
- Vergleichsfunktion zwar Zeiger auf die Array-Elemente, aber
- nicht als int*, sondern als void*. (Woher soll qsort() auch
- wissen, daß ints sortiert werden sollen?) Die Vergleichs-
- funktion muß also ihre Parameter wieder umwandeln:
-
- int cmp(void *a,void *b)
- {
- int *A = a;
- int *B = b;
- return *A - *B;
- }
-
- oder
-
- int cmp(void *a,void *b)
- {
- return *(int*)a - *(int*)b;
- }
-
- Alles andere ist fehlerhaft und resultiert in undefiniertem
- Verhalten. (Dasselbe gilt auch für die Vergleichsfunktion von
- bsearch().) (wr)
- 32 Deklarationen, Definitionen, Prototypen
- ---------------------------------------------------------------
- Funktionen mit variabler Anzahl von Argumenten 33
- ---------------------------------------------------------------
-
-
- Kapitel 4
-
- Funktionen mit variabler Anzahl von Argumenten
-
-
- Q4.1 Wie programmiere ich eine Funktion mit variabler Anzahl
- von Argumenten?
-
-
- Dies hängt zum Teil vom verwendeten Compiler ab. Bei K&R-
- Compilern lehnen sich die Compilerbauer im Normalfall an die
- Unix-Technik an, für ANSI-Compiler ist der Mechanismus im
- Standard beschrieben.
-
- Somit gilt für ANSI C:
-
- #include <stdarg.h> /* Standard-Header */
-
- /*
- * Laut ANSI muss die Funktion mindestens
- * ein nicht-variables Argument besitzen.
- * Hier ist es i.
- */
- void funk(int i, ...)
- {
- va_list ap; /* Argument-Pointer definieren */
- int j; /* ein Zaehler */
-
- /*
- * Der Argument-Pointer wird initialisiert.
- * Dazu wird das letzte nicht-variable Element
- * (hier i) benoetigt
- */
- va_start(ap, i);
-
- /*
- * Mittels va_arg() und einer Typangabe kann man
- * nun die variablen Argumente nacheinander erhalten.
- * Wir nehmen hier an, dass 'i' Char-Pointer
- * uebergeben wurden
- */
- for(j = 0; j < i; j++)
- puts( va_arg(ap, char *) );
-
- /*
- * Beendet wird der Zugriff mit va_end(), das man
- * nicht weglassen sollte!
- */
- va_end(ap);
-
- /* weitere Operationen... */
- }
- 34 Funktionen mit variabler Anzahl von Argumenten
- ---------------------------------------------------------------
-
-
- In K&R/Unix C schreibt man:
-
- #include <varargs.h> /* Unix Header */
-
- /*
- * K&R kennt kein '...'. Statt dessen wird das Makro
- * va_alist verwendet. Es ist nicht genau festgelegt,
- * ob mit einem nicht-variablen Argument begonnen werden
- * muss, wir lassen es...
- */
- void funk(va_alist)
- va_dcl /* kein abschliessendes ';'! */
- {
- va_list ap; /* Arg.-Pointer definieren */
- int i; /* Anzahl Argumente */
- int j; /* ein Zaehler */
-
- va_start(ap); /* nur ein Argument */
-
- /*
- * Es wird angenommen, dass der erste Aktual-
- * Parameter ein Integer ist, der die Anzahl
- * der folgenden Parameter enthaelt
- */
- i = va_arg(ap, int); /* Anzahl Argumente */
-
- for(j = 0; j < i; j++)
- puts( va_arg(ap, char *) );
-
- va_end(ap);
-
- /* weitere Operationen... */
- }
-
- (tw)
-
-
- Q4.2 Wozu braucht man vprintf(), vsprintf() usw.?
-
-
- Um selber Funktionen im printf()-Stil zu schreiben:
-
- #include <stdarg.h>
- #include <stdio.h>
-
- void error(char *format, ...)
- {
- va_list ap;
-
- va_start(ap, format);
- fputs("ERROR: ", stderr);
- vfprintf(stderr, format, ap);
- va_end(ap);
- }
-
- Obige Prozedur schreibt Fehlermeldungen nach stderr, wobei jede
- Meldung mit "ERROR: " beginnt. (tw)
- Funktionen mit variabler Anzahl von Argumenten 35
- ---------------------------------------------------------------
-
-
- Q4.3 Wie übergebe ich ein float an eine Funktion mit variabler
- Anzahl von Argumenten? Wie ein short?
-
-
- Das geht nur mit den direkt deklarierten, nicht mit den durch
- '...' symbolisierten Argumenten. Die variablen Aktual-Parameter
- werden "promoted": short zu Integer, float zu double.
-
- Ein Programm, in dem sich irgendwo va_arg(ap, short) oder
- va_arg(ap, float) findet, gehört in den Mülleimer. (tw)
- 36 Funktionen mit variabler Anzahl von Argumenten
- ---------------------------------------------------------------
- Die main()-Funktion 37
- ---------------------------------------------------------------
-
-
- Kapitel 5
-
- Die main()-Funktion
-
-
- Q5.1 Wie lautet der Prototyp von main()?
-
- 4
- In einem sog. Hosted Environment erlaubt der ANSI-Standard
- genau zwei Arten der Definition von main():
-
- 1. int main(int argc,char **argv)
-
- und
-
- 2. int main(void)
-
- Identisch damit sind z.B. folgende Definitionen:
-
- - mit anderen Namen der Formalparameter:
-
- int main(int c, char **v)
-
- - mit argv in Array-Schreibweise (identisch zu 1.):
-
- int main(int argc, char *argv[])
-
- - ohne Prototyp und mit implizitem Rückgabetyp (identisch
- zu 2.):
-
- main()
-
- Alle anderen Definitionen von main(), incl. das in
- Kurzprogrammen beliebte
-
- void main(void)
-
- oder das in manchen Betriebssystemen zulässige
-
- int main(int argc, char **argv, char **envp)
-
- sind laut ANSI "undefiniertes Verhalten" (siehe Q1.9). (wr)
-
-
- _____________
-
- 4. Vereinfacht ausgedrückt: Wenn das C-Programm unter einem
- Betriebssystem ausgeführt wird.
- 38 Die main()-Funktion
- ---------------------------------------------------------------
-
-
- Im Gegensatz zum Hosted Environment kennt der ANSI-Standard
- 5
- noch ein Freestanding Environment . Für ein solches wird nicht
- einmal verlangt, daß eine Funktion mit dem Namen main()
- existiert oder wie sie auszusehen hat. Allerdings ist es nicht
- zulässig, diesen Freibrief auf Hosted Environments zu
- übertragen. (tw)
-
-
- Q5.2 Was ist mit dem Rückgabewert von main()?
-
-
- Der Wert, den main() zurückgibt, wird an die Aufrufumgebung
- zurückgeliefert. Startet man z.B. ein kompiliertes C-Programm
- mit der Funktion system(), so ist (normalerweise) der
- Rückgabewert von system() genau der Rückgabewert der main()-
- Funktion des Programms.
-
- Alternativ zu "return x;" in main() kann man "exit(x);" ver-
- wenden. Die Frage, welches davon besser ist, läßt sich objektiv
- nicht beantworten; ANSI-C garantiert, daß beide dasselbe
- machen.
-
- Welche Rückgabewerte von main() zulässig sind, hängt stark vom
- jeweiligen Betriebssystem ab. In jedem Fall wird der Rückgabe-
- wert 0 verstanden, um eine ordnungsgemäße Terminierung des
- Programms zu markieren. Anstelle von 0 kann auch EXIT_SUCCESS
- verwendet werden. Für eine Terminierung mit Fehler wurde der
- Wert EXIT_FAILURE eingeführt. (wr)
-
-
- _____________
-
- 5. Z.B. Microcontroller ohne eigenes Betriebssystem oder
- Betriebssysteme selber.
- Arrays & Pointer 39
- ---------------------------------------------------------------
-
- /Ende von Teil 6/
-
- Keep hacking
- Wolfram
-
-
-
-
- «------------------[ eLITE gUYS wILL gET iNVITED hERE ]------------------»
- . . . . : · .
- ____/¦__ ___/¦____ __/¦___________/¦__ ¦ ¦___/¦__ !
- _ ____ \__\____ _// _____\_________ \ | | ____ \__ _:/\__
- /· |____//· | \\_____ ·\| | | \\| |/· |____/ \ Oo /
- // | \ | \ l \\ | | ·\_ // | \ /_--_\
- \__________\________/________/___j___j / \__________\ :\/
- -------------------------------------l____/ :----------- ¡
- · ·
- . : · . . . .
- ! _ ____/¦__ ¦ ¦____¦\____ ____/¦__ ___/¦____ __/¦_____ __
- _:/\__ _ _ ____ \__| |______ \ _ ____ \__\_ | _// _____ __ _
- \ Oo / /· |____/| |/· __ __/ /· |____//· | \\_____ ·\
- /_--_\ // | \| // | \_// | \ l \ l \\
- :\/ \__________\ \____j /\__________\________/________/
- ¡ -----------· :----l____/-------------------------------
- · ·
- <*> pRODIGY gHQ <*> nEUTRON wHQ <*> iLLUSION eHQ <*> dYNAMIX gHQ <*>
-
- Upload Date: [01-03-95] «» Upload Time: [07:18:26]
-
- «-------------------[ aSK eLITE fOR SYS-PW & NUMBA ! ]-------------------»
-
- [-AquaAdder v1.0-]
-
-
-
-
-
-
- -sLiME!^bP·LEADER^mTH!
- mOGUe!^aC! pRIMUS!/bP·lEADER
- wHIRLWIND/mTH! MR.VAIN/BNZ^sXi^aC!
-
- -- --- ---- pHUKKIN' fAST aMIGA ^ wORLD'S lARGEST cHIPTUNE aREA ---- --- --
- ____
- ___| |_____________ __________________ ____________________________
- _/ _| | ._________\/__________ \ _/___\______ \ _____/ _____/
- \ \. | l/ / \/ | _____/_ l / _____/\____ _/\____ \_
- \___| |________/____||-Mo!|________________/_______\ _______\ ________/
- l____| l____| \/ \/
-
- -- --- ---- aMI-eX fREE-lEECH ^ bIG aSCII bASE © bY aC! ---- --- --
-
- -- mYTH! gHQ - -÷- - bIRDHOUSE pROJECTS! eHQ - -÷- - aRT-cORE! eHQ --
-
- _______________ _____ _____ _________ ___________________
- \. /________ |. /_____:o | /. \/|___/_ \ /
- \___ _____/|. / \|| /|. |: |// ______/·|. / ______ \ ___/
- /. /_/· || / \: \|| |· |/ / \ \/ || /_______ \/+ /
- // ____/ || \ \ \ \: ¯¯¯ | / / / || \ /·\ / \ __/_
- // / // |+ \ \ \ \___/ | \___/ / |· \/ \/ / /
- /· / \\ / \ / |: | / / / /
- \___/ \________/_____|\___/: |_____|_______/\________/_______/______/
- l_____|·MBB·
-
-