2011-05-05 82 views
3

我的教授通常會問我的班級在給定的程序中有多少語句,但我無法確定他定義的語句。似乎if/else是一個語句,for循環是一個語句,不管其中是否有其他假設的語句。這個問題有沒有治理規則,還是他對自己發明的定義?什麼被認爲是C++語句?

謝謝

+3

我從來沒有見過任何人都擔心給定程序中的語句數量。 – 2011-05-05 02:08:36

+0

是的,我知道,但我想他不夠邪惡,只是在沒有動機的情況下從我的平均數中刪除積分。 – Sam 2011-05-05 02:13:23

+0

我想他想知道學生已經掌握了一個陳述開始和結束的地方。他的計數方法似乎是有效的(但不是唯一有效的計數方法)。 – 2011-05-05 02:16:40

回答

3

對於聲明的精確definition

定義:語句的代碼塊做一些事情。賦值語句爲變量賦值。 for語句執行循環。 在C,C++和C#語句可以使用大括號作爲一個語句分組在一起

{ statement1; statement2; }

就計算報表而言,我認同其他人,沒有多少意義。計算代碼行(LOC)雖然實際上具有一定的價值,但有很多研究嘗試將LOC的數量與開發人員的工作量相關聯。你的老師有可能把你的陳述計算在內,並且把陳述想象成僅僅是一個LOC,但情況並非如此。

1

語句嵌套,即較小的語句可以連接到較大的語句,如複合語句。出於這個原因,「這個程序中有多少陳述」這個問題是不明確的。首先必須定義計數方法。沒有它,「多少」這個問題就沒有意義了。

+0

是的,這就是爲什麼我很困惑,哦。 – Sam 2011-05-05 02:14:16

0

在計算機編程語句 可以被認爲是一個必要 編程語言的最小 獨立的元素。程序是由一個或多個 語句的序列組成的 。一個聲明將有 內部組件(例如, 表達式)。

More at Statement (Computer Science) at Wikipedia

+0

這是不正確的,因爲您可以有塊或複合語句,它們不是最小的獨立元素。 – Hazok 2011-05-05 02:17:58

+0

@Zach:複合或塊聲明仍然是一個聲明。 – 2011-05-05 02:31:00

+0

是的,這是我試圖做的。正如您所描述的,複合語句或塊語句不一定是命令式編程語言的最小獨立元素。爲了快速設計一個例子,你可以隨意採取一系列的語句,在它們周圍放置一些花括號,現在你有一個塊語句,它不是最小的獨立元素,但實際上可能是一個龐大而複雜的元素。 – Hazok 2011-05-17 21:05:07

0

這裏是處理報表JS一樣的語言解析功能:

static void do_statement(CsCompiler *c) 
{ 
    int tkn; 
    switch (tkn = CsToken(c)) { 

    case T_IF:   do_if(c);  break; 
    case T_WHILE:  do_while(c); break; 
    case T_WITH:  do_with(c);  break; 
    case T_DO:   do_dowhile(c); break; 
    case T_FOR:   do_for(c);  break; 
    case T_BREAK:  do_break(c); CsSaveToken(c,CsToken(c)); break; 
    case T_CONTINUE: do_continue(c); CsSaveToken(c,CsToken(c)); break; 
    case T_SWITCH:  do_switch(c); break; 
    case T_CASE:  /*do_case(c);*/ CsParseError(c,"'case' outside of switch"); break; 
    case T_DEFAULT:  /*do_default(c);*/ CsParseError(c,"'default' outside of switch"); break; 
    case T_RETURN:  do_return(c); break; 
    case T_DELETE:  do_delete(c); break; 
    case T_TRY:   do_try(c);  break; 
    case T_THROW:  do_throw(c); break; 
    case '{':   do_block(c, 0); break; 
    case ';':   ;    break; 
    default: 
     { 
     CsSaveToken(c,tkn); 
     do_expr(c); 
     break; 
     } 
    } 
} 

正如你看到它包括像forwhile也表達(由;分隔)