函數不加括弧能編譯通過嗎
㈠ if後單條語句不加花括弧,不能通過編譯,為什麼
問題在 f 前面的 FILE,說明了是一個類型變數的定義或者說聲明語句的語法,這只能是存在於函數外或者語句塊內。加了花括弧就是語句塊,注意是個塊。而沒有這對花括弧就只是單一一個語句而已,沒有人能明白這個 f 聲明了要放在什麼地方了。
㈡ case後面的語句不加大括弧為什麼有時候能編譯通過,有時候不能
case後面的語句不需要加大括弧,只要別忘了break就行。不過有的編程規范上會建議用大括弧把case後面的語句括起來。
你說的「不能通過編譯」,可能是下面這個原因。C/C++里規定,不能在case語句里定義局部變數。例如:
int a = 2;
switch (a)
{
case 1:
int c = 10;
break;
case 2:
break;
default:
break;
}
編譯就會出錯,原因是在case 1里定義了局部變數c。
而C/C++還有一個很有意思的規定,用{}包括的語句,認為是一個」語句塊「,而在語句塊里就能想干什麼就干什麼。
比如:
switch (a)
{
case 1:
{
int c = 10;
break;
}
case 2:
break;
default:
break;
}
這樣就能通過編譯了。
再多說兩句廢話。C/C++里這個用{}括起來的語句塊,可以認為是一段完全獨立的代碼。比如:
int a = 2;
{
int a = 3;
}
這樣完全沒問題。而你要是把這對大括弧刪掉,就會出錯。