• Keine Ergebnisse gefunden

Verschiedene Typen im Standard

N/A
N/A
Protected

Academic year: 2022

Aktie "Verschiedene Typen im Standard"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Verifikation von C-Programmen

Vorlesung 2 vom 30.10.2014: Der C-Standard: Typkonversionen und Programmausführung

Christoph Lüth

Universität Bremen

Wintersemester 2014/15

Rev. –revision– 1 [1]

Fahrplan heute

ITypkonversionen (Typwechsel ohne Anmeldung)

IFelder vs. Zeiger — Das C-Speichermodell

IZeiger in C:

I Dynamische Datenstrukturen

I Arrays

I Funktionen höherer Ordnung

2 [1]

Verschiedene Typen im Standard

IObjecttypes,incompletetypes,functiontypes (§6.2.5)

IBasictypes: standard/extended signed/unsigned integer types, floating types (§6.2.5)

IDerivedtypes: structure, union, array, function types IQualifiedType (§6.2.5)

Ifloat const *qualified (qualified pointer to type)

Iconst float *notqualified (pointer to qualified type)

ICompatibleTypes (§6.2.7)

IAssignable Types (§6.5.16, §6.5.2.2)

3 [1]

Typkonversionen in C

IInteger promotion (§6.3.1.1):

I char,enum,unsigned char,short,unsigned short,bitfield

Ifloatpromoted todouble

IT []promoted toT *

IUsual arithmetic conversions (§6.3.1.8)

IKonversion von Funktionsargumenten:

I Nurbei K&R-artigen Deklarationen,nichtbei Prototypen!

I Moral:Stil bei Prototyp und Definition nichtmischen!

4 [1]

Zeiger und Felder

IZeigersind Adressen i n t ∗x ;

IFeld: reserviert Speicherbereich fürnObjekte:

i n t y [ 1 0 0 ] ;

IIndex beginntimmermit 0

IMehrdimensionale Felder . . . möglich IAber:x6∼y

5 [1]

Wann sind Felder Zeiger?

IWann kann einArrayin einZeigerkonvertiert werden?

ExterneDeklaration:extern char a[] KeineKonversion Definition:char a [10] KeineKonversion Funktionsparameter:f(char a[]) Konversionmöglich In einemAusdruck:x= a[3] Konversionmöglich

IWenn Konversionmöglich, dann durch Semantikerzwungen

ITückisch: Externe Deklaration vs. Definition

IGröße:sizeof

6 [1]

Mehrdimensionale Felder

IDeklaration:int foo[2][3][5];

IBenutzung:foo[i][j][k];

IStored inRow major order(Letzter Index variiert am schnellsten) (§6.5.2.1)

IKompatible Typen:

Iint (* p)[3][5] = foo;

Iint (*r)[5]= foo[1];

Iint *t = foo[1][2];

Iint u = foo[1][2][3];

7 [1]

Mehrdimensionale Felder als Funktionsparameter

IRegel 3 giltnichtrekursiv:

I Array of ArraysistArray of Pointers, nichtPointer to Pointer

IMögliches Matching:

Parameter Argument

char (*c)[10]; char c[8][10]; char (*c)[10];

char **c; char *c[10]; char **c;

char c[][10]; char c[8][10]; char (*c)[10];

If(int x[][]);nicht erlaubt

(§6.7.5.2)

I NB. Warum istint main(int argc, char *argv[])erlaubt?

8 [1]

(2)

Mehrdimensionale Felder als Funktionsparameter

IRegel 3 giltnichtrekursiv:

IArray of ArraysistArray of Pointers, nichtPointer to Pointer

IMögliches Matching:

Parameter Argument

char (*c)[10]; char c[8][10]; char (*c)[10];

char **c; char *c[10]; char **c;

char c[][10]; char c[8][10]; char (*c)[10];

If(int x[][]);nicht erlaubt (§6.7.5.2)

INB. Warum istint main(int argc, char *argv[])erlaubt?

8 [1]

Programmausführung (§5.1.2.3)

IStandard definiertabstrakte Semantik

IImplementation darfoptimieren

ISeiteneffekte:

I Zugriff aufvolatileObjekte;

I Veränderung von Objekten;

I Veränderung von Dateien;

I Funktionsaufruf mit Seiteneffekten.

IReihenfolge der Seiteneffektenicht festgelegt!

ISequenzpunkten(Annex C) sequentialisieren Seiteneffekte.

9 [1]

Semantik: Statements

IFull statement, Block §6.8

IIteration §6.8.5

10 [1]

Semantik: Speichermodell

IDer Speicher besteht ausObjekten

Ilvalue§6.3.2.1:Expression with object type or incomplete type other thanvoid

Ilvalues sindReferenzen, keineAdressen

IWerdenausgelesen, außer

I als Operand von&,++,–,sizeof

I als Linker Operand von.und Zuweisung

I lvalue (has) array tyoe IWoher kommen lvalues?

I Deklarationen

I Indirektion (*)

I malloc IAdressen:

I Adressoperator (&)

I Zeigerarithmetik (§6.5.6)

11 [1]

Ausdrücke (in Auszügen)

IEinfache Bezeichner: lvalue

IBezeichner von Array-Typ: Zeiger auf das erste Element des Feldes (§6.3.2.1)

IFelder:6.5.2.1

Ia[i]definiertals*((a)+(i))

IDamit:a[i]=*((a)+(i))=*((i)+(a))=i[a]

IZuweisung:6.5.16

IReihenfolge der Auswerung nicht spezifiziert!

12 [1]

Funktionsaufrufe §6.5.2.2

IImplizite Konversionen:

I Nur wenn kein Prototyp

I Integer Promotions,floattodouble

IArgumente werden ausgewertet, und den Parametern zugewiesen

I Funktionsparameter sind wie lokale Variablen mit wechselnder Initialisierung

IReihenfolge der Auswertung von Funktionausdruck und Argumenten nicht spezifiziert, aber Sequenzpunkt vor Aufruf.

13 [1]

Zusammenfassung

ITypkonversionenin C: meist klar, manchmal überraschend

IAuswertungdurch eineabstrakte Maschinedefiniert

ISpeichermodell:

ISpeicher besteht ausObjekten

IDurchcharaddressiert (byte)

IReferenzen auf Objekte:lvalue

14 [1]

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Keep in mind that OpenGL is not magic pixie dust that makes any sketch faster (though it's close), so other rendering options may produce better results depending on the nature

Hubert Weiger, der BN-Vorsitzende erklärt dazu: „Die Stadt Bamberg erhält im Zuge des US-Abzugs mindestens 155 Hektar Flächen, die sie künftig für Wohngebiete, aber auch

Die Konversion, ein Epiphänomen der kemischen (ägyptisch­koptischen) Sprachgeschichte I s l zunächst außer acht, da uns nur der Ansatzpunkt der Analyse

Externe Deklaration: extern char a[] Keine Konversion Definition: char a [10] Keine Konversion Funktionsparameter: f(char a[]) Konversion möglich In einem Ausdruck: x= a[3]

Externe Deklaration: extern char a[] Keine Konversion Definition: char a [10] Keine Konversion Funktionsparameter: f(char a[]) Konversion m¨ oglich In einem Ausdruck: x= a[3]

BS backspace löscht Zeichen vor Cursor CR carriage return Zeilenvorschub HT horizontal tab Tabulatorsprung LF line feed folgt auf CR. ESC escape FF form

true, wenn ein Java- Name mit ch beginnen kann true, wenn ch in einem Java- Namen vorkommen kann. ch1