我只是想知道爲什麼這是允許的。爲什麼編譯多個分號的代碼?
int i=0;;
我意外地打了那個。但程序編譯。我注意到它之後很多天我已經輸入;;
之後,我用不同的符號試圖像~, !, : etc etc
爲什麼不允許作爲第一個被允許在那裏。
只是好奇知道。
我只是想知道爲什麼這是允許的。爲什麼編譯多個分號的代碼?
int i=0;;
我意外地打了那個。但程序編譯。我注意到它之後很多天我已經輸入;;
之後,我用不同的符號試圖像~, !, : etc etc
爲什麼不允許作爲第一個被允許在那裏。
只是好奇知道。
你輸入一個空聲明:
int i=0; // that's one statement
; // that's another
這是合法的,在C#中的語句有沒有身體。
從C# Language Specification的第8.3節:
空語句什麼也不做。
空聲明:
;
如果在需要語句的上下文中沒有要執行的操作,則使用空語句。
優秀!!!回答。 – 2010-09-23 20:44:30
也是這樣;它自己被編譯器刪除還是插入noop? – 2010-09-23 23:27:47
@熊:好問題。我不知道,但是來自同一規範部分的這一行 - 執行一個空語句只是將控制轉移到語句的終點。* - 使我傾向於NOP或類似語言。只有編譯的代碼纔會執 – 2010-09-23 23:42:52
額外的;
只是標出了一個額外的,儘管空白,'行'的C#代碼。其他符號在他們自己放置時沒有意義。
因爲分號表示語句的結尾。其他人不。你可以有一個空白的聲明。
空語句實際上可能有用。看看這個有趣的無限循環示例:
for (;;)
{
// loops infinitely
}
運行以下版本作爲證明,但與無限休息:
int count = 0;
for (;;)
{
count++;
if (count > 10) break;
}
Console.WriteLine("Done");
但是,如果你真的想要做一個無限循環,使用:while (true) {}
而不是for (;;) {}
。 while(真)不那麼簡潔,更易於閱讀並且無限期地容易地傳達循環的意圖。
C#(和很多其他語言)使用分號分隔語句,而不是關注換行符。空語句是有效的,所以你可以放置儘可能多的分號。這也意味着你可以在一行中放置多個語句,或者將多個語句分成多行 - 編譯器不會在意。
大家問這個問題是C語言的語言不明白';'的意思。或者可能沒有正確解釋(「當你進行換行時,你必須輸入一個分號,這太神奇了!」)oO – delnan 2010-09-23 20:33:22
';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (也是有效的語法) – 2010-09-23 20:39:17
此外,''{{{{{{}}}}}}}}}}}}''是有效的語法,製作多個嵌套的作用域。 – 2010-09-23 22:03:21