为什么在IF语句中检查void函数时会发生语法错误

时间:2010-07-15 11:30:42

标签: c# c++ casting void conceptual

如果我写

,将会是什么输出

在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 Compiler的人

5 个答案:

答案 0 :(得分:5)

在C#中,if语句中的条件类型必须可隐式转换为bool。这减少了各种情况下的错误,基本上是一件好事。它会阻止这样的事情编译:

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

即使在C和C ++中,如果你有一个合理的警告级别,一个不错的编译器会在上面的行上发出警告。

如果void版本在C ++中工作,我感到很惊讶......

答案 1 :(得分:3)

与C / C ++不同,C#条件只能应用于布尔值 请注意,void函数没有返回值,因此不能对其应用任何条件。

答案 2 :(得分:3)

void函数根本不返回任何内容,因此无法使用if语句检查其返回值。

即使C ++也不会让你这样做。

答案 3 :(得分:1)

在C / C ++中,非零整数值与逻辑true相同。原因是C / C ++没有定义布尔类型,所以整数被用作布尔变量。 后来,人们发现当编译器试图找到适当的函数重载版本时,这种隐式类型转换会导致意外行为,因此在C#中不会重复该错误。

要在C#中获得相同的行为,请写if (x!=0) { ... }

答案 4 :(得分: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#