2010-07-15 162 views
-2

將輸出什麼,如果我寫爲什麼語法錯誤

在C++ if(5)將沒有任何問題,但不是在C#同樣的方式將它能夠運行執行。

if(func()){} //in C# it doesn't runs Why how does C# treats void and how in Turbo C++ 

void func() 
{ 
return; 
} 

if(null==null){}//runs in C# 

編輯

if(printf("Hi"){} //will run and enter into if statement 

if(printf(""){}//will enter into else condition if found. 

這個問題並不意味着對那些誰不知道的Turbo編譯器的

+3

'null'不是'void'。 – Amadan 2010-07-15 11:35:22

+0

你是說'如果(無效)'在Turbo C++中工作? – 2010-07-15 11:36:02

+0

這也是C++中的錯誤。問題不在於__runs__,而在於__compiles__。 C++和C#都是_compiled_語言,而不是_interpreted_。所以這個問題根本就沒有意義。 '-1'。 – sbi 2010-07-15 11:47:28

回答

0

在C和C++中的int,指針的隱式轉換和大多數其他類型bool

爲清晰起見,C#的設計者選擇了而不是

因此,與

int i = 1; 
int* P = null; 

if (i && p) { } // OK in C++ 

if (i != 0 && p != null) { } // OK in C++ and C# 
+0

這就是我在使用C,C++時所經歷的。這在Turbo Compiler上也是如此。對於其他編譯器我不知道。 – 2010-07-15 11:57:16

3

與C/C++,C#條件只適用於布爾值。
請注意,void函數沒有返回值,所以沒有條件可以應用於它。

+0

'if(true)'是vaid,'if(someString == Strings.Empty)'是有效的,因爲您使用比較運算符來驗證某些上下文。 +1 – RobertPitt 2010-07-15 11:35:20

3

一個void函數根本不返回任何東西,因此它的返回值不能用if語句檢查。

即使C++不會讓你這樣做。

5

在C#中,if語句中的條件類型必須隱式轉換爲bool。這可以減少各種情況下的錯誤,基本上是一件好事。它可以防止這樣的事情從編譯:

int x = ...; 
if (x = 10) // Valid in C/C++, not in C# 

即使在C和C++,一個體面的編譯器會警告你,以上行不過,如果你有警告的合理的水平。

我感到驚訝,如果void版本C工作++雖然...

+0

void版本在C++中也不起作用。 – Christian 2010-07-15 11:35:52

+3

「if」語句中的條件類型必須也可以在C++中隱式轉換爲「bool」。 – sbi 2010-07-15 11:45:31

+0

'if(x = 10)'會在最新的編譯器上產生一個警告。 – ereOn 2010-07-15 11:48:26

1
在C/C++

,非零的整數值是相同的邏輯真。原因是C/C++沒有定義布爾類型,所以整數被用作布爾變量。 稍後,人們發現,當編譯器試圖找到適當的重載版本的函數時,這種隱式類型轉換會導致意外的行爲,因此在C#中不會重複該錯誤。

爲了獲得在C#中相同的行爲,寫if (x!=0) { ... }