Statements
Anweisungen sind Fragmente des C-Programms, die in Sequenz ausgeführt werden. Der Körper jeder Funktion ist eine zusammengesetzte Anweisung, die wiederum eine Sequenz von Anweisungen und Deklarationen ist:
int main(void) { // Beginn eines zusammengesetzten Statements int n = 1; // Deklaration (kein Statement) n = n+1; // Ausdrucksstatement printf("n = %d\n", n); // Ausdrucksstatement return 0; // Return-Statement } // Ende des zusammengesetzten Statements, Ende des Funktionskörpers
Es gibt fünf Arten von Anweisungen:
|
Eine Attributspezifizierer-Sequenz ( attr-spec-seq ) kann auf eine unmarkierte Anweisung angewendet werden, wobei (außer bei einem Ausdrucksstatement) die Attribute auf die jeweilige Anweisung angewendet werden. |
(since C23) |
Inhaltsverzeichnis |
Labels
Jede Anweisung kann gelabelt werden, indem ein Name gefolgt von einem Doppelpunkt vor der Anweisung selbst angegeben wird.
attr-spec-seq
(optional)
(seit C23)
identifier
:
|
(1) | ||||||||
attr-spec-seq
(optional)
(seit C23)
case
constant-expression
:
|
(2) | ||||||||
attr-spec-seq
(optional)
(seit C23)
default
:
|
(3) | ||||||||
Jede Anweisung (aber keine Deklaration) kann beliebig vielen Labels vorangestellt werden, die jeweils identifier als Labelnamen deklarieren, der innerhalb der umschließenden Funktion eindeutig sein muss (mit anderen Worten, Labelnamen haben Funktionsbereich ).
Die Deklaration eines Labels hat für sich allein keine Auswirkung, ändert nicht den Kontrollfluss und beeinflusst auch nicht das Verhalten der nachfolgenden Anweisung in irgendeiner Weise.
|
Ein Label muss von einer Anweisung gefolgt werden. |
(bis C23) |
|
Ein Label kann ohne folgende Anweisung erscheinen. Wenn ein Label allein in einem Block erscheint, verhält es sich, als ob es von einer Null-Anweisung gefolgt wäre. Die optionale attr-spec-seq wird auf das Label angewendet. |
(seit C23) |
Zusammengesetzte Anweisungen
Eine zusammengesetzte Anweisung, oder Block , ist eine in geschweifte Klammern eingeschlossene Folge von Anweisungen und Deklarationen.
{
Anweisung
|
Deklaration
...
(optional)
}
|
(bis C23) | ||||||||
Attribut-Spezifizierer-Sequenz
(optional)
{
unmarkierte-Anweisung
|
Marke
|
Deklaration
...
(optional)
}
|
(seit C23) | ||||||||
Die zusammengesetzte Anweisung ermöglicht es, eine Reihe von Deklarationen und Anweisungen zu einer Einheit zusammenzufassen, die überall verwendet werden kann, wo eine einzelne Anweisung erwartet wird (zum Beispiel in einer if -Anweisung oder einer Iterationsanweisung):
if (expr) // Anfang der if-Anweisung { // Anfang des Blocks int n = 1; // Deklaration printf("%d\n", n); // Ausdrucksanweisung } // Ende des Blocks, Ende der if-Anweisung
Jede zusammengesetzte Anweisung führt ihren eigenen Blockgültigkeitsbereich ein.
Die Initialisierer der Variablen mit automatischer Speicherdauer , die innerhalb eines Blocks deklariert sind, und die VLA-Deklaratoren werden ausgeführt, wenn der Ablaufsteuerung über diese Deklarationen in der Reihenfolge hinweggeht, als wären sie Anweisungen:
int main(void) { // Beginn des Blocks { // Beginn des Blocks puts("hello"); // Ausdrucksanweisung int n = printf("abc\n"); // Deklaration, gibt "abc" aus, speichert 4 in n int a[n*printf("1\n")]; // Deklaration, gibt "1" aus, alloziert 8*sizeof(int) printf("%zu\n", sizeof(a)); // Ausdrucksanweisung } // Ende des Blocks, Gültigkeitsbereich von n und a endet int n = 7; // n kann wiederverwendet werden }
Ausdrucksanweisungen
Ein Ausdruck gefolgt von einem Semikolon ist eine Anweisung.
expression
(optional)
;
|
(1) | ||||||||
attr-spec-seq
expression
;
|
(2) | (seit C23) | |||||||
Die meisten Anweisungen in einem typischen C-Programm sind Ausdrucksanweisungen, wie Zuweisungen oder Funktionsaufrufe.
Ein Ausdrucksstatement ohne Ausdruck wird als null statement bezeichnet. Es wird oft verwendet, um einem for - oder while -Loop einen leeren Rumpf zu geben. Es kann auch verwendet werden, um ein Label am Ende eines Verbundstatements oder vor einer Deklaration zu platzieren:
puts("hello"); // Ausdrucksanweisung char *s; while (*s++ != '\0') ; // Leere Anweisung
|
Die optionale attr-spec-seq wird auf den Ausdruck angewendet.
Eine
attr-spec-seq
gefolgt von
|
(seit C23) |
Auswahlanweisungen
Die Auswahlanweisungen wählen zwischen einer von mehreren Anweisungen abhängig vom Wert eines Ausdrucks.
attr-spec-seq
(optional)
(since C23)
if
(
expression
)
statement
|
(1) | ||||||||
attr-spec-seq
(optional)
(since C23)
if
(
expression
)
statement
else
statement
|
(2) | ||||||||
attr-spec-seq
(optional)
(since C23)
switch
(
expression
)
statement
|
(3) | ||||||||
Iterationsanweisungen
Die Iterationsanweisungen führen eine Anweisung wiederholt aus.
attr-spec-seq
(optional)
(since C23)
while
(
expression
)
statement
|
(1) | ||||||||
attr-spec-seq
(optional)
(since C23)
do
statement
while
(
expression
)
;
|
(2) | ||||||||
attr-spec-seq
(optional)
(since C23)
for
(
init-clause
;
expression
(optional)
;
expression
(optional)
)
statement
|
(3) | ||||||||
Sprunganweisungen
Die Sprunganweisungen übertragen die Ablaufsteuerung bedingungslos.
attr-spec-seq
(optional)
(since C23)
break
;
|
(1) | ||||||||
attr-spec-seq
(optional)
(since C23)
continue
;
|
(2) | ||||||||
attr-spec-seq
(optional)
(since C23)
return
expression
(optional)
;
|
(3) | ||||||||
attr-spec-seq
(optional)
(since C23)
goto
identifier
;
|
(4) | ||||||||
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 6.8 Statements and blocks (S: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 6.8 Anweisungen und Blöcke (S: 106-112)
- C11-Standard (ISO/IEC 9899:2011):
-
- 6.8 Statements and blocks (S. 146-154)
- C99-Standard (ISO/IEC 9899:1999):
-
- 6.8 Anweisungen und Blöcke (S: 131-139)
- C89/C90-Standard (ISO/IEC 9899:1990):
-
- 3.6 STATEMENTS
Siehe auch
|
C++ Dokumentation
für
Statements
|