24.02.2014 Aufrufe

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

4 in 1 - Medieninformatik - Hochschule RheinMain

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Programmieren <strong>in</strong> C<br />

Getrennte Übersetzung<br />

Programmieren <strong>in</strong> C<br />

Getrennte Übersetzung<br />

Komplettes Makefile für schalter /1<br />

1,2 Def<strong>in</strong>ition Compiler und Optionen<br />

3,4 Def<strong>in</strong>ition Programme und Quellen<br />

7 all per Konvention erstes Ziel, soll<br />

“alles” machen<br />

9 Es wird die Datei make.depend<br />

e<strong>in</strong>gelesen und als Teil des Makefiles<br />

<strong>in</strong>terpretiert<br />

11-15 : Wie wird schalter erstellt<br />

17 Die Datei make.depend wird nicht<br />

selbst erstellt, der Gnu-C Compiler<br />

kann das auf Basis der Quellen<br />

machen. Das erste Mal e<strong>in</strong>e leere<br />

Datei erstellen ($ touch<br />

make.depend), damit es los geht.<br />

Ansonsten bei Strukturänderungen<br />

#<strong>in</strong>clude im Quellcode.<br />

1 CC=gcc<br />

2 CFLAGS= -Wall -g -ansi<br />

3 PROGS=schalter<br />

4 SRC=schalter.c reset.c wechsel.c \<br />

5 zustaende.c<br />

6<br />

7 all: $(PROGS)<br />

8<br />

10<br />

9 <strong>in</strong>clude make.depend<br />

11 schalter: schalter.o wechsel.o \<br />

12 reset.o zustaende.o<br />

13 $(CC) $(CFLAGS) schalter.o \<br />

14 wechsel.o reset.o zustaende.o \<br />

15 -o schalter<br />

16<br />

17 depend:<br />

18 $(CC) -MM $(SRC) > make.depend<br />

Komplettes Makefile für schalter /2<br />

Fortsetzung Makefile<br />

1,2 E<strong>in</strong> beliebtes Ziel ist test zur<br />

Test-Automatisierung, e<strong>in</strong> anderes<br />

übliches Ziel wäre run<br />

4 clean ist ke<strong>in</strong>e Datei und muss daher<br />

immer “erstellt” werden<br />

6 clean räumt Projekt auf. Alle<br />

generierten Dateien werden gelöscht.<br />

9 Endungen von zu verarbeitenden<br />

Dateien s<strong>in</strong>d .o, .c und .h<br />

11 Generische Regel: Um e<strong>in</strong>e .o Datei<br />

aus e<strong>in</strong>er .c Datei mit gleichem<br />

Namen zu machen . . .<br />

12 $< für erste Abhängigkeit (.c-Datei),<br />

$@ für Ziel (die .o-Datei)<br />

1 test: $(PROGS)<br />

2 ./schalter<br />

3<br />

4 .PHONY: clean<br />

5<br />

6 clean:<br />

7 -/b<strong>in</strong>/rm *.o $(PROGS)<br />

8<br />

10<br />

9 .SUFFIXES: .o .c .h<br />

11 %.o : %.c<br />

12 $(CC) -c $(CFLAGS) $< -o $@<br />

13 %.o : %.c %.h<br />

14 $(CC) -c $(CFLAGS) $< -o $@<br />

13 Wenn auch von .h Datei abhängig<br />

Weitere Abhängigkeiten nicht generisch,<br />

make.depend<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 61 / 326<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 62 / 326<br />

Programmieren <strong>in</strong> C Zeiger<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 63 / 326<br />

Programmieren <strong>in</strong> C Getrennte Übersetzung<br />

1<br />

Nutzen des Makefiles<br />

$ make -f clean<br />

/b<strong>in</strong>/rm *.o schalter<br />

$ make depend<br />

gcc -MM schalter.c reset.c wechsel.c zustaende.c > make.depend<br />

$ cat make.depend<br />

schalter.o: schalter.c reset.h zustaende.h wechsel.h<br />

reset.o: reset.c reset.h zustaende.h<br />

wechsel.o: wechsel.c wechsel.h zustaende.h<br />

zustaende.o: zustaende.c zustaende.h<br />

$ make<br />

gcc -c schalter.c -o schalter.o<br />

gcc -c wechsel.c -o wechsel.o<br />

gcc -c reset.c -o reset.o<br />

gcc -c zustaende.c -o zustaende.o<br />

gcc schalter.o wechsel.o \<br />

Zeiger<br />

Arbeitsspeicher<br />

• . . . ist <strong>in</strong> Speicherzellen e<strong>in</strong>geteilt<br />

• . . . ist Byte-weise adressierbar<br />

• . . . ist Wort-weise strukturiert<br />

• Adressraum meist 2 32 oder 2 64 Bytes<br />

Zeiger<br />

• Speicherzelle, die Adresse e<strong>in</strong>er<br />

anderen Speicherzelle be<strong>in</strong>haltet<br />

• Typisiert, Anfangsadresse e<strong>in</strong>es Werts<br />

Notation Zugriff<br />

• * ptr: Wert auf den der Zeiger ptr<br />

verweist, Inhaltsoperator *<br />

reset.o zustaende.o -o schalter<br />

• &val: Adresse von Wert val,<br />

$ make test<br />

Adressoperator &<br />

./schalter<br />

0<br />

0x0A0 42<br />

0x0A4<br />

*ptr<br />

0x100 0x0A0<br />

&val<br />

Prof. Dr. Peter Barth (HS-Rhe<strong>in</strong>Ma<strong>in</strong>) Programmieren 3 29. Januar 2013 64 / 326

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!