• Keine Ergebnisse gefunden

¨Ubungspaket 17 Der gcc Compiler

N/A
N/A
Protected

Academic year: 2021

Aktie "¨Ubungspaket 17 Der gcc Compiler"

Copied!
9
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Ubungspaket 17 ¨ Der gcc Compiler

Ubungsziele: ¨

1. Sicherer Umgang mit gemischten Ausdr¨ ucken

2. Herleiten der unterschiedlichen Datentypen in gemischten Aus- dr¨ ucken

3. Kenntnis ¨ uber die implizite Durchf¨ uhrung von Typanpassungen Skript:

Kapitel: 38, 39 und 40 Semester:

Wintersemester 2021/22 Betreuer:

Thomas, Tim und Ralf Synopsis:

Eines haben wir alle bis jetzt sicherlich gelernt, durch Eintippen von

gcc quelltext.c wird ein C-Programm in Maschinencode ¨ ubersetzt

und damit lauff¨ ahig gemacht. Doch wenn etwas schiefgeht, fangen die

Probleme an. Der Compiler selbst ist wie die meisten Programmier-

werkzeuge ein recht komplexes Programm. Daher f¨ allt es vielen Pro-

grammieranf¨ angern sehr schwer, den ¨ Uberblick ¨ uber die einzelnen Tei-

le des Compilers zu behalten und die aufgetretenen Fehlerursachen zu

lokalisieren. Um hier Abhilfe zu schaffen, schauen wir uns in diesem

Ubungspaket den Compiler ¨ gcc und seine Komponenten ein wenig ge-

nauer an.

(2)

Teil I: Stoffwiederholung

Aufgabe 1: Grobaufbau des gcc Compilers

Durch den Aufruf gcc datei.c werden eigentlich vier gr¨ oßere Programme nacheinander aufgerufen. Benenne diese vier Programme und erl¨ autere kurz, was ihre Aufgaben sind.

1. Programm:

Funktion:

2. Programm:

Funktion:

3. Programm:

Funktion:

4. Programm:

(3)

Aufgabe 2: Die Syntax der Pr¨ aprozessor-Direktiven

Erkl¨ are kurz in eigenen Worten die Syntax der C-Pr¨ aprozessor-Direktiven:

Aufgabe 3: Die Pr¨ aprozessor-Direktiven

Erkl¨ are jede Pr¨ aprozessor-Direktive anhand je eines oder zweier Beispiele:

1. #include

2. #define

3. #ifdef ... #else ...#endif

(4)

Teil II: Quiz

Aufgabe 1: Die Definition von

” Namen“

Gegeben sei folgendes Programmst¨ uck:

1 # d e f i n e Tag M o n t a g /* m e i n A r b e i t s t a g */

2 # d e f i n e W O C H E 34 /* m e i n e U r l a u b s w o c h e */

3

4 # d e f i n e T e l e f o n 0 3 8 1 498 72 51

5 # d e f i n e FAX /* 0 0 4 9 */ 0 3 8 1 498 118 72 51 6

7 # d e f i n e F e r i e n 8

9 # d e f i n e MSG " h e u t e g e h t es mir s e h r gut "

10

11 # d e f i n e N A M E 1 ein n a m e 12 # d e f i n e N A M E 2 N A M E 1 13

14 # d e f i n e Z W E I _ Z E I L E N ZEILE -1 /* das ist die e r s t e Z e i l e 15 # d e f i n e Z W E I T E _ Z E I L E h i e r ist Z e i l e 2 */

16

17 # d e f i n e E N D E " j e t z t ist s c h l u s s "

Finde heraus, welche Namen in obigem Programmst¨ uck definiert werden und welche Werte diese haben. Trage die definierten Namen nebst ihrer Werte in folgende Tabelle ein.

Zeile Name Wert

1

. . . .

2

. . . .

4

. . . .

5

. . . .

(5)

Aufgabe 2: Definition von Makros

Gegeben sei folgendes Programmst¨ uck:

1 // m a c r o i m p l e m e n t i o n of the f o r m u l a : 2* x + 3* y 2

3 # d e f i n e F o r m u l a _ 1 ( x , y ) 2 * x + 3 * y 4 # d e f i n e F o r m u l a _ 2 ( x , y ) 2 * ( x ) + 3 * ( y ) 5

6 i = F o r m u l a _ 1 ( 1 , 2 ) ; j = F o r m u l a _ 2 ( 1 , 2 ) ; 7 i = F o r m u l a _ 1 ( 4 , 2 ) ; j = F o r m u l a _ 2 ( 4 , 2 ) ; 8 i = F o r m u l a _ 1 ( 1+2 , 2+3 ) ; j = F o r m u l a _ 2 ( 1+2 , 2+3 ) ; 9 i = F o r m u l a _ 1 ( 2+1 , 3+2 ) ; j = F o r m u l a _ 2 ( 2+1 , 3+2 ) ; Notiert in der folgenden Tabelle die Werte der Parameter x und y, das erwartete Ergebnis res = 2 * x + 3 * y, sowie die Resultate, die in den Variablen i und j abgelegt werden:

Zeile x y res i j

6

. . . .

7

. . . .

Zeile x y res i j

8

. . . .

9

. . . .

Wie werden die Makros vom Pr¨ aprozessor expandiert (ersetzt)?

Uberpr¨ ¨ uft eure Annahme durch Aufruf des Pr¨ aprozessors. Nehmen wir an, ihr habt die

paar Zeilen abgetippt und in der Datei quiz.c gespeichert. Dann einfach cpp quiz.c

oder alternativ gcc -E quiz.c aufrufen; die Ergebnisse erscheinen dann direkt auf dem

Bildschirm. ¨ Uberpr¨ uft nochmals eure Ergebnisse, wie ihr sie in obiger Tabelle eingetra-

gen habt. Erkl¨ art, sofern sich Unterschiede auftun, was hierf¨ ur die Ursachen sind. Welche

Schlussfolgerungen zieht ihr daraus f¨ ur die Definition von Makros?

(6)

Aufgabe 3: Einbinden von (Header-) Dateien

Gegeben sei folgendes Programmst¨ uck:

1 # i n c l u d e < s t d i o . h >

2 # i n c l u d e < m a t h . h >

3

4 # d e f i n e C _ T Y P E S < c t y p e . h >

5 # i n c l u d e C _ T Y P E S 6

7 //# i n c l u d e < s i g n a l . h >

Welche Dateien werden dadurch vom Pr¨ aprozessor eingebunden?

Aufgabe 4: Bedingtes ¨ Ubersetzen

Gegeben sei folgendes Programmst¨ uck:

1 # d e f i n e A 4 7 1 1 2

3 # i f d e f A

4 # d e f i n e N1 17

5 # i f d e f B

6 # d e f i n e N2 2

7 # e l s e

8 # d e f i n e N2 4

9 # e n d i f 10 # e l s e

11 # d e f i n e N1 12

12 # d e f i n e N2 -3

13 # e n d i f 14

15 int i = N1 * N2 ;

(7)

Teil III: Fehlersuche

Aufgabe 1: Praktische Fehlersuche

Das folgende Programm soll den Text Fehler beheben drei Mal ausgeben, jeweils eine Ausgabe pro Zeile. Diesmal war unser Starprogrammierer Dr. Bit-Byte zugange. Aber auch ihm sind einige Fehler unterlaufen. Finde und korrigiere diese. Zeige anschließend mittels einer Handsimulation, dass dein Programm korrekt arbeitet.

1 # d e f i n e A N Z A H L 3;

2 # d e f i n e L O O P _ C O N D I T I O N ( f e h l e r >= 0) 3 # d e f i n e MSG " F e h l e r " e h e b e n "

4

5 int m a i n ( int argc , c h a r ** a r g v ) ;

6 {

7 int f e h l e r = A N Z A H L ;

8 do

9 p r i n t f ( MSG ) ; f e h l e r = - 1;

10 w h i l e ( L O O P _ C O N D I T I O N ) ;

11 r e t u r n 0;

12 }

(8)

Teil IV: Anwendungen

Aufgabe 1: Fehler Finden und Eliminieren

Es ist ganz normal, dass man beim Entwickeln und Eintippen eines Programms viele Tipp- fehler macht. Da der Compiler ein recht pingeliger Zeitgenosse ist, findet er viele dieser Tippfehler und gibt entsprechende Fehlermeldungen und Hinweise aus. Die Kunst besteht nun darin, dieser Ausgaben richtig zu deuten und die wirklichen Fehlerursachen zu finden.

Um dies ein wenig zu ¨ uben, greifen wir nochmals das fehlerhafte Programm aus dem vor- herigen Abschnitt (vorherige Seite) auf, wobei wir davon ausgehen, dass ihr sowieso alle Fehler gefunden habt. Arbeite nun wie folgt:

Arbeitsanleitung:

1. Tippe das fehlerhafte Programm ab und speichere es in einer Datei deiner Wahl.

2. ¨ Ubersetze das fehlerhafte Programm mittels gcc.

3. Fahre mit Arbeitsschritt 6 fort, falls der Compiler keine Fehlermeldung oder Warnung ausgegeben hat.

4. Lese die erste(n) Fehlermeldung(en) aufmerksam durch und korrigiere einen Fehler.

5. Gehe zur¨ uck zu Arbeitsschritt 2.

6. Starte das Programm und ¨ uberpr¨ ufe, ob es korrekt arbeitet.

7. Sollte das Programm korrekt arbeiten gehe zu Schritt 10 8. Korrigiere einen inhaltlichen Fehler (Semantikfehler).

9. Gehe zur¨ uck zu Arbeitsschritt 2.

10. Fertig!

Hinweis: Diese Herangehensweise empfiehlt sich auch in Zukunft :-) !

(9)

Aufgabe 2: Eigene Makro-Definitionen

Definiere je ein Makro f¨ ur die folgenden drei Formeln : f(x) = 3x 2 + x/2 − 1

g(x, y) = x 2 − 3xy + y 2 h(x, y, z) = 2x 3 − 3y 2 + 2z

Zu welchen Ergebnissen f¨ uhren die folgenden drei Aufrufe (Einsetzen)?

Aufruf Resultat Mathematik Resultat C-Programm

f (1 + z)

. . . .

g(x, A + 1)

. . . .

h(a, b, a + b)

. . . .

Uberpr¨ ¨ uft eure Makro-Definitionen durch Eintippen eines kleinen Programmst¨ ucks und

Aufruf des Pr¨ aprozessors (entweder mittels cpp <datei>.c oder gcc -E <datei>.c).

Referenzen

ÄHNLICHE DOKUMENTE

[r]

[r]

The attitudes of university students are important because the Middle East and North Africa (MENA) region has experienced a substantial increase in the 17 to 23 years of

Unfortunately, the speed and enthusiasm of the initial days were not maintained over time, as the Arab countries’ efforts to form an economic union were slow as compared to that

One of the reasons for SAARC’s poor showing is the distrust of the smaller countries, which perceived the forum as an “Indian project.” It is feared that broadening

Having matured into a credible regional body, emerging as the MENA system’s most important regional actor, the leading regional body in dialogue with such other regional

In order to protect the marine and coastal environment from environmental threats such as oil spills, land-based sources of pollution as well as challenges from global climate

Since the transfer of power, Yemeni poli- tics have been moving toward a tri-polar elite constellation: interim President Abd Rabbu Mansur Hadi; the alliance of the Ahmar family