2010-07-15 133 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) { ... }