Re: [問題] 類別跟迴圈加不加分號的問題
大括號 {},也就是指區塊。
區塊本身不需要分號結尾。
要不要加分號結尾?不需要猜,只要記得,
敘述、宣告才要加分號結尾。
以下 {} 故意寫成一行,用於說明區塊的效果。
多個敘述、宣告可以用 {} 包起來,視為一整體 (或單一行) 看待:
i = i + 1;
k += i * 10;
j = foo(k);
若改成:
{i = i + 1; k += i * 10; j = foo(k);}
區塊沒有分號結尾。
while / do-while 敘述則是:
do 單行敘述; while(條件); --> do {敘述; 敘述; ... 多行敘述;} while(條件);
真正加分號結尾的是 while,與 {} 無關。
區塊只是為了當條件成立,則要一次做一堆事情而設定的;
所以反過來也一樣:
while(條件) 單行敘述; --> while(條件) {敘述; 敘述; ... 多行敘述;}
區塊將視為一整體邏輯,光是 {} 本身就已經等效於一行敘述,
所以寫成 {}; ,其中分號其實是多餘的,甚至會發生錯誤:
if(條件)
{}; <-- 錯的其實是這裡 (多了分號,讓後續 else 斷頭了)
else <-- 但是編譯器會說這裡錯 (預期應該要有 if,但是找不到)
{}; <-- 不會錯,但是多餘,只會把分號當作空敘述。
同樣的例子,還可以應用在 switch-case,請再自己試試看。
另外,我想多個宣告用區塊包起來 (變成結構),是容易誤會的地方:
struct _MY_STRUCT {int i; int j; int k;} MyStruct;
其中 {} 一樣不加分號結尾;真正加分號的是 MyStruct。
再一個例子:
class _MY_CLASS {int i; int j; int k;} MyClass;
道理和 struct 相同。
但是因為可以省略宣告對象,後面用到再用來實際宣告變數物件,
就變成了:
struct _MY_STRUCT {int i; int j; int k;};
class _MY_CLASS {int i; int j; int k;};
這大概是容易誤會的地方。
列舉也是一樣道理:
enum _MY_ENUMERATE {A, B, C, D};
區塊本身不需要分號結尾。
但若變成宣告的一部份,為了宣告的完整性,才給一個分號作結尾,
所以,真正需要分號的,其實是宣告,不是區塊本身。
同樣的道理,一樣適用於函數。
這是原型宣告:
int foo(int i);
這是函數 (本體):
int foo(int i) {return (i * i);}
一樣,區塊沒有分號結尾,需要分號結尾的是裡面的敘述。
(若有謬誤,煩請指正)
--
精密才是美,複雜不是罪!
這是將事物的描述給自己最鉅細靡遺的交代!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.195.20
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1547467735.A.67F.html
推
01/14 21:12,
5年前
, 1F
01/14 21:12, 1F
推
01/14 22:54,
5年前
, 2F
01/14 22:54, 2F
推
01/15 00:59,
5年前
, 3F
01/15 00:59, 3F
推
01/15 01:02,
5年前
, 4F
01/15 01:02, 4F
推
01/15 13:06,
5年前
, 5F
01/15 13:06, 5F
→
01/15 13:06,
5年前
, 6F
01/15 13:06, 6F
→
01/15 13:06,
5年前
, 7F
01/15 13:06, 7F
→
01/15 13:06,
5年前
, 8F
01/15 13:06, 8F
推
01/15 13:23,
5年前
, 9F
01/15 13:23, 9F
→
01/15 13:25,
5年前
, 10F
01/15 13:25, 10F
→
01/15 13:29,
5年前
, 11F
01/15 13:29, 11F
→
01/15 13:30,
5年前
, 12F
01/15 13:30, 12F
推
01/15 21:36,
5年前
, 13F
01/15 21:36, 13F
→
01/15 21:37,
5年前
, 14F
01/15 21:37, 14F
推
01/16 08:24,
5年前
, 15F
01/16 08:24, 15F
→
01/16 08:25,
5年前
, 16F
01/16 08:25, 16F
→
01/16 08:26,
5年前
, 17F
01/16 08:26, 17F
→
01/16 08:26,
5年前
, 18F
01/16 08:26, 18F
→
01/16 09:40,
5年前
, 19F
01/16 09:40, 19F
→
01/16 20:29,
5年前
, 20F
01/16 20:29, 20F
→
01/16 20:29,
5年前
, 21F
01/16 20:29, 21F
→
01/16 20:29,
5年前
, 22F
01/16 20:29, 22F
→
01/16 20:29,
5年前
, 23F
01/16 20:29, 23F
→
01/16 20:29,
5年前
, 24F
01/16 20:29, 24F
→
01/16 20:30,
5年前
, 25F
01/16 20:30, 25F
推
01/18 00:31,
5年前
, 26F
01/18 00:31, 26F
推
01/18 13:37,
5年前
, 27F
01/18 13:37, 27F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
問題
8
17