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:54:41][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:39]
-
- «-------------------[ 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:14:21 \ / |/ |/ / |/ / __)__ / | \_/¹
- / | \ | / / / / \ | \
- \_____²_____/____²_________/_________/___________/_____²_____/ö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-
- 9-10
- @END_FILE_ID.DIZ
- /Teil 9/
-
- Q7.3 Programmieren ist doch nur Tipparbeit, oder?
-
-
- Hauptarbeit beim Programmieren ist es nicht, wie wildgeworden
- Code einzuhacken, sonder sich selbigen zu überlegen. Vor dem
- Eintippen nachzudenken hat dabei den großen Vorteil, daß man
- hunderte von Alternativen in ein paar Sekunden durchspielen
- kann, in einer Zeit, in der man nicht mal eine Alternative
- eintippen kann.
-
- Eine uralte Faustregel bei der Programmierung lautet, daß ein
- guter - mit dem zu lösenden Problem vertrauter - Programmierer
- pro Tag im Durchschnitt(!) ca. 100 Zeilen Code produzieren
- kann, mehr nicht. Allerdings 100 Zeilen eleganter,
- dokumentierter, voll ausgetesteter und fehlerbereinigter Code.
- 100 Zeilen zu tippen dauert vielleicht eine halbe Stunde, die
- restlichen sieben Stunden hängt der Mann nicht etwa rum,
- sondern benutzt sein Gehirn, wartet auf ein paar wenige(!)
- Compilerläufe, trinkt mal einen Tee (nur Hacker saufen
- Kaffee:-))) und und und...
-
- Die 100 Zeilen sind natürlich nicht absolut wörtlich zu nehmen,
- die hängen vom zu lösenden Problem, der Programmiersprache,
- (nicht) vorhandener Dokumentation usw. ab. Natürlich kann man
- auch mal 1000 Zeilen/Tag runterhacken oder nur 10. Entscheidend
- ist eins: in der Summe ist die zum Eintippen/Ändern von
- Sourcecode aufgewendete Zeit gegenüber der Hauptarbeit des
- Programmierens vernachlässigbar. Programmieren findet im Kopf
- statt.
-
- Übrigens, damit hat sich auch die Diskussion um den besten
- Editor oder Command-Line Compiler versus IDE auf dieser Ebene
- erledigt: Der Lieblingseditor bringt nicht direkt
- Geschwindigkeit, sondern "nur" Bequemlichkeit. Bequemlichkeit
- führt allerdings indirekt zu höherer Geschwindigkeit, denn ein
- zufriedenen Mitarbeiter... (tw)
- 54 Programmieren
- ---------------------------------------------------------------
- Diverses 55
- ---------------------------------------------------------------
-
-
- Kapitel 8
-
- Diverses
-
-
- Q8.1 Kann ich Variablen anlegen, deren Namen mit Underscore
- beginnen?
-
-
- Man kann zwar, sollte es aber nicht (dies gilt auch für Funk-
- tionen und Makros). Bezeichner, die mit einem Unterstrich
- beginnen, sind für den Compiler reserviert. Der ANSI-Standard
- unterscheidet zwar geringfügig feiner, in der Praxis lebt man
- jedoch am besten damit, keine Variablen mit einem Unterstrich
- beginnen zu lassen.
-
- Insgesamt sind
-
- - Bezeichner, die mit '_' beginnen, gefolgt von einem
- Großbuchstaben oder einem weiteren '_',
-
- - Bezeichner im File-Scope, die mit '_' beginnen,
-
- - alle in der Standard ANSI C-Library verwendeten Namen,
-
- - Makros, die mit einem 'E' und einer Zahl oder einem
- weiteren Großbuchstaben beginnen,
-
- - Makros, die mit 'LC_', 'SIG' oder 'SIG_' und einem
- weiteren Großbuchstaben beginnen,
-
- - Alle in <math.h> vorhandenen ANSI-Funktionen mit einen
- zusätzlichen Prefix 'f' oder 'l' und
-
- - Funktionen, die mit 'str', 'mem', 'is', 'to' oder 'wcs'
- und einem weiteren Kleinbuchstaben beginnen
-
- reserviert und sollten vom Programmierer nicht verwendet
- werden. (tw)
-
-
- Q8.2 0 ist FALSE, aber was ist TRUE?
-
-
- Aus verschiedenen Gründen verzichtet C darauf, einen boolschen
- Datentypen, der nur die Werte TRUE und FALSE (z.B. als Ergebnis
- 6
- eines Vergleichsoperators) annehmen kann, zu definieren . Es
- _____________
-
- 6. Der zukünftige ANSI-C++ Standard wird jedoch einen Datentyp
- bool enthalten.
- 56 Diverses
- ---------------------------------------------------------------
-
-
- gibt in C zwei prinzipiell verschiedene Arten, mit boolschen
- Daten zu arbeiten:
-
- 1. Als Ergebnis eine boolschen Operation (z.B der
- Operatoren ==, <= oder !=).
-
- 2. Als Parameter für boolsche Abfragen (z.B. if(), while(),
- for(), ?: oder &&).
-
- Genauer:
-
- 1. Boolsche Operatoren wie ==, !=, <, > haben als Ergebnis
- immer ein int, und zwar 0 für "falsch" und 1 für "wahr".
- Der Wert von "5 == 5" ist also 1, der Wert von "0 > 10"
- ist also 0. Dies gilt nur für Operatoren; Funktionen wie
- isspace() liefern anstelle von 1 einen "von 0
- verschiedenen Wert".
-
- 2. Als Parameter für boolsche Abfragen kann alles verwendet
- werden, was sich mit 0 vergleichen läßt, also ints
- ebenso wie doubles oder Pointer. Dabei gilt die Abfrage
- als falsch, wenn der zu testende Wert gleich 0 ist, und
- als wahr, wenn er ungleich 0 ist.
-
- Eine Abfrage wie
-
- if (i > 0)
- f();
- else
- g();
-
- bedeutet also: berechne den Wert von "i > 0"; führe f() aus,
- wenn der Wert ungleich 0 ist, und führe g() aus, wenn der Wert
- gleich 0 ist.
-
- Ebenso lassen sich Pointer in Abfragen verwenden:
-
- char *ptr = malloc(size);
- if (ptr)
- *ptr = '\0';
-
- Die Abfrage "if (ptr)" ist definitionsgemäß identisch mit
- "if (ptr != 0)", ist also erfüllt, wenn ptr kein Nullpointer
- ist.
-
- Der Operator ! (logisches Nicht) wandelt 0 in 1 und Werte
- ungleich 0 in 0 um. Wendet man ! zweimal an, so wird 0 wieder
- zu 0, Werte ungleich 0 werden aber zu 1. Dadurch kann man die
- doppelte Anwendung von ! zur "Normalisierung" verwenden:
-
- char c;
- int i = isspace(c); /* ein beliebiger Wert */
- int a = !!i; /* immer 1 oder 0 */
-
- Gelegentlich findet man dafür ein Makro in der Art
-
- #define AS_BOOL(x) !!(x)
- Diverses 57
- ---------------------------------------------------------------
-
-
- Viele Leute bevorzugen es, statt der Konstanten 1 und 0 in
- Programmen einen echten boolschen Datentypen zu haben, so daß
- Dinge wie:
-
- BOOL x;
- int a,b;
- ...
- x = (a==b);
- switch(a > b)
- {
- case TRUE:
- ...
- case FALSE:
- ...
- }
- f(TRUE);
-
- möglich sind. Aufgrund der Tatsache, daß TRUE und FALSE mit den
- Ergebnissen der logischen Operatoren übereinstimmen sollten,
- macht es nur Sinn, TRUE als 1 und FALSE als 0 zu definieren.
- Dafür gibt es viele Möglichkeiten:
-
- #define TRUE 1
- #define FALSE 0
-
- #define TRUE (0==0)
- #define FALSE (1==0)
-
- #define BOOL int
-
- typedef int BOOL;
-
- typedef enum { TRUE = 1, FALSE = 0 } BOOL;
-
- typedef enum { FALSE, TRUE } BOOL;
-
- Alle diese Möglichkeiten haben Vor- und Nachteile. Der Vorteil
- einer Definition als enum ist, daß es einige Debugger gibt, die
- in der Lage sind, Variablen vom Typ BOOL tatsächlich als TRUE
- oder FALSE anzuzeigen. (wr)
-
-
- Q8.3 Ist C ein Aprilscherz?
-
-
- Nein, obwohl ein in der Mailbox-Szene kursierender Text (der
- alle paar Monate von einem Neu-User aufgetrieben und als
- vermeintliche große Enthüllung gepostet wird) das behauptet. In
- diesem Text (überschrieben mit "Erfinder von C und Unix geben
- zu: Alles Quatsch") wird davon berichtet, wie Kernighan und
- Ritchie C und Unix als Parodien auf Pascal und Multics
- enthüllen, die als Aprilscherz begonnen und dann außer Kon-
- trolle geraten sind.
-
- Der einzige Aprilscherz an der Sache ist allerdings dieser Text
- selber. Das englische Original enthält als Absender den "Vogon
- News Service" und als Datum den ersten April. Beides ist in der
- deutschen Übersetzung verlorengegangen, und angeblich ist sogar
- 58 Diverses
- ---------------------------------------------------------------
-
-
- die Zeitschrift unix/mail darauf reingefallen und hat den Text
- in der Septemberausgabe 1991 veröffentlicht. (wr)
-
-
- Q8.4 Was ist der OCCC?
-
-
- Der OCCC, bzw. IOCCC, oder International Obfuscated C Code
- Contest, ist ein Wettbewerb, der jährlich im Internet ausge-
- tragen wird. Es geht dabei darum, C-Programme zu schreiben, die
- sich durch trickreiche Algorithmen, Anordnungen des Codes,
- extreme Unleserlichkeit usw. auszeichnen. Zu den Siegern der
- vergangenen Jahre gehört z.B. ein Basic-Interpreter, ein Tetris
- für VT100-Terminals, eine Shell, ein Make-Programm, ein C-
- Source, der sich wie ein Brief liest, ein spiegelsymmetrisches
- Programm, ein Programm, das unverändert in C, FORTRAN und
- /bin/sh läuft, sowie jede Menge, was auf dem ersten Blick nicht
- entfernt so aussieht, als ob irgendein C-Compiler es schlucken
- würde. Einige OCCC-Programme bringen, obwohl syntaktisch
- korrekt, manche Preprozessoren oder Lints zum Absturz.
-
- Die Ergebnisse der vergangenen OCCCs finden sich in vielen
- Mailboxen. Auch wenn die Chancen, die Programme vollständig zu
- verstehen, ziemlich gering sind, sind sie doch extrem unter-
- haltsam, und sei es nur als Beispiel dafür, was man nicht
- machen sollte. (wr)
-
-
- Q8.5 Wie programmiert man Interrupts?
-
-
- Interrupts programmiert man nicht, Interrupts erhält man.
- Standard C kennt allerdings keine Möglichkeit, direkt
- Interrupt-Handler zu schreiben. Es gibt nur den Mechanismus der
- Signale; für einzelne Signale kann man Signal-Handler implemen-
- tieren.
-
- Das direkte Rumfummeln an System-Interrupts kennt man eigent-
- lich nur bei der Betriebssystem- und Treiberprogrammierung.
- Zusätzlich benötigt man so etwas für ein gewisses Möchtegern-
- Betriebssystem, weil selbiges nicht mal ein Minimum an
- Systemdiensten bereitstellt. Diverse Compiler für dieses System
- besitzen spezielle - nicht portable - Spracherweiterungen,
- damit der Anwendungs-Programmierer auch noch schön brav den Job
- des Betriebssystems machen kann... (tw)
-
-
- Q8.6 Wie programmiere ich meine VGA-Karte?
-
-
- Das sind gleich drei Fragen auf einmal:
-
- 1. Dies ist eine Frage nach Algorithmen. Siehe dazu QQ9.5.
-
- 2. Ist dies eine Frage nach speziellen Spracherweiterungen
- für den verwendeten Compiler. Hier hilft das
- Compilerhandbuch weiter.
- Diverses 59
- ---------------------------------------------------------------
-
-
- 3. Ist dies ein Frage über die Funktionsweise einer
- bestimmten Hardware. Dieser Hardware ist es ziemlich
- egal, ob sie in C programmiert wird oder nicht. Über die
- Funktion der Hardware gibt logischerweise das
- entsprechende Handbuch der Hardware Auskunft. (tw)
-
-
- Q8.7 Wie steuere ich meinen Lautsprecher an?
-
-
- putchar(7);
- (wr)
-
- "Strictly conforming" ist (und das ist praktisch alles, was in
- ANSI-C dazu enthalten ist):
-
- putchar('\a');
- (tw)
-
-
- Q8.8 Wie bekomme ich unter DOS ein Array von 1000x1000
- Integers?
-
-
- MS-DOS hat da (und nicht nur da...) durch die 64k-Segmente
- ein echtes Problem. Ohne unstandardisierte Erweiterungs-
- mechanismen ("Dosenöffner", Speichermanager, spezielle inkom-
- patible Funktionen usw.) hat man keine Chance. Einzige
- wirkliche Lösung: ein richtiges Betriebssystem verwenden. Es
- sei allen Dosen-Programmierern versichert, daß es dann ein
- echtes Erlebnis ist, mal ein malloc(1000 * 1000 * sizeof(int))
- zu machen, und den Speicherplatz problemlos zu bekommen... (tw)
- 60 Diverses
- ---------------------------------------------------------------
- Wo gibt's ...? 61
- ---------------------------------------------------------------
-
-
- Kapitel 9
-
- Wo gibt's ...?
-
-
- Als wir die FAQ begannen, dachten wir eigentlich gar nicht
- daran, irgendwelche Bezugsquellen für wichtige Dokumente
- anzugeben. Informationsbeschaffung gehört für uns zum
- Handwerk, ein für uns ein absolut alltägliche Vorgang. Wie sich
- jedoch an vielen Postings gezeigt hat, scheint Informations-
- beschaffung für viele eine unüberwindliche Hürde darzustellen.
- Daher haben wir eine kleine Auswahl von Bezugsquellen für
- diverse Dokumente zusammengestellt, die wir bei unserer Arbeit
- gelegentlich bemühen.
-
- Ebenso scheint häufig nicht klar zu sein, was ein Algorithmus
- ist und wo man einen findet, daher Q9.5.
-
- Soweit nicht anders angegeben, kosten im folgenden erwähnte
- Dokumente etwas. Dabei sollte man "etwas" nicht zu wörtlich
- nehmen. Viele Standardisierungs-Gremien finanzieren sich über
- den Verkauf ihrer Standards und langen daher für ein paar
- Seiten Papier gnadenlos zu.
-
- Alle folgenden Angaben sind natürlich ohne Gewähr. Wir haben
- nicht die Zeit, ständig die Richtigkeit der Daten zu
- überprüfen. Für Rückmeldungen und Ergänzungen sind wir
- natürlich dankbar. (tw)
-
- /Ende von Teil 9/
-
- 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:39]
-
- «-------------------[ 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·
-
-