?
This document uses PHP Chinese website manual Release
語(yǔ)句是按順序執(zhí)行的C程序的片段。任何函數(shù)的主體都是一個(gè)復(fù)合語(yǔ)句,而這個(gè)語(yǔ)句又是一系列的語(yǔ)句和聲明:
int main(void){ // start of a compound statement int n = 1; // declaration (not a statement) n = n+1; // expression statement printf("n = %d\n", n); // expression statement return 0; // return statement} // end of compound statement, end of function body
有五種類(lèi)型的陳述:
1)復(fù)合陳述
2)表達(dá)式語(yǔ)句
3)選擇陳述
4)迭代語(yǔ)句
5)跳轉(zhuǎn)語(yǔ)句
任何語(yǔ)句都可以標(biāo)記,通過(guò)在語(yǔ)句本身之前提供一個(gè)名字后跟一個(gè)冒號(hào)。
identifier : statement | (1) | |
---|---|---|
case constant_expression : statement | (2) | |
default : statement | (3) |
1)轉(zhuǎn)到目標(biāo)。
2)switch語(yǔ)句中的case標(biāo)簽。
3)switch語(yǔ)句中的默認(rèn)標(biāo)簽。
任何語(yǔ)句(但不是聲明)之前都可以有任意數(shù)量的標(biāo)簽,每個(gè)標(biāo)簽聲明標(biāo)識(shí)符是標(biāo)簽名稱(chēng),在封裝函數(shù)中它必須是唯一的(換句話說(shuō),標(biāo)簽名稱(chēng)具有函數(shù)范圍)。
標(biāo)簽聲明對(duì)其本身沒(méi)有影響,不會(huì)改變控制流,或以任何方式修改后面的語(yǔ)句的行為。
復(fù)合語(yǔ)句或塊是括號(hào)括起來(lái)的語(yǔ)句和聲明序列。
{ statement | declaration...(optional) } | (1) |
---|
復(fù)合語(yǔ)句允許將一組聲明和語(yǔ)句分組到一個(gè)單元中,這些單元可用于預(yù)期單個(gè)語(yǔ)句的任何位置(例如,在if語(yǔ)句或迭代語(yǔ)句中):
if (expr) // start of if-statement{ // start of block int n = 1; // declaration printf("%d\n", n); // expression statement} // end of block, end of if-statement
每個(gè)復(fù)合語(yǔ)句都引入了自己的塊范圍。
具有自動(dòng)存儲(chǔ)持續(xù)時(shí)間的變量的初始值設(shè)定項(xiàng)在聲明塊內(nèi)聲明,VLA聲明符在控制流按順序通過(guò)這些聲明時(shí)執(zhí)行,就像它們是聲明一樣:
int main(void){ // start of block { // start of block puts("hello"); // expression statement int n = printf("abc\n"); // declaration, prints "abc", stores 4 in n int a[n*printf("1\n")]; // declaration, prints "1", allocates 8*sizeof(int) printf("%zu\n", sizeof(a)); // expression statement } // end of block, scope of n and a ends int n = 7; // n can be reused}
一個(gè)表達(dá)式后跟一個(gè)分號(hào)是一個(gè)聲明。
expression(optional) ; | (1) |
---|
典型C程序中的大多數(shù)語(yǔ)句都是表達(dá)式語(yǔ)句,例如賦值或函數(shù)調(diào)用。
沒(méi)有表達(dá)式的表達(dá)式稱(chēng)為空語(yǔ)句。它通常用于為for或while循環(huán)提供一個(gè)空的主體。它也可用于在復(fù)合聲明結(jié)尾處或聲明之前攜帶標(biāo)簽:
puts("hello"); // expression statementchar *s;while (*s++ != '\0') ; // null statement
選擇語(yǔ)句根據(jù)表達(dá)式的值在幾個(gè)語(yǔ)句之一之間進(jìn)行選擇。
if ( expression ) statement | (1) | |
---|---|---|
if ( expression ) statement else statement | (2) | |
switch ( expression ) statement | (3) |
1)if 陳述
2)如果語(yǔ)句帶有else子句
3)切換語(yǔ)句
迭代語(yǔ)句重復(fù)執(zhí)行語(yǔ)句。
while ( expression ) statement | (1) | |
---|---|---|
do statement while ( expression ) ; | (2) | |
for ( init_clause ; expression(optional) ; expression(optional) ) statement | (3) |
1) while loop
2) do-while loop
3) for loop
跳轉(zhuǎn)聲明無(wú)條件傳輸流量控制。
break ; | (1) | |
---|---|---|
continue ; | (2) | |
return expression(optional) ; | (3) | |
goto identifier ; | (4) |
1)break語(yǔ)句
2) continue 語(yǔ)句
3)帶有可選表達(dá)式的return語(yǔ)句
4)goto聲明