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

4

5 回答 5

5

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

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

即使在 C 和 C++ 中,如果您有合理的警告级别,一个体面的编译器也会在上面的行中警告您。

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

于 2010-07-15T11:34:29.453 回答
3

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

于 2010-07-15T11:32:57.023 回答
3

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

甚至 C++ 也不会让你这样做。

于 2010-07-15T11:33:54.323 回答
1

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

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

于 2010-07-15T11:37:30.207 回答
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#
于 2010-07-15T11:34:50.383 回答