Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在IF语句中签入void函数时出现语法错误_C#_C++_Casting_Void_Conceptual - Fatal编程技术网

C# 为什么在IF语句中签入void函数时出现语法错误

C# 为什么在IF语句中签入void函数时出现语法错误,c#,c++,casting,void,conceptual,C#,C++,Casting,Void,Conceptual,如果我写的话,输出是什么 < C++ >代码>如果(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 stateme

如果我写的话,输出是什么

< C++ >代码>如果(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编译器的人

与C/C++不同,C#条件只能应用于布尔值。

请注意,void函数没有返回值,因此不能对其应用任何条件。

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

<> P> C++也不会让你这样做.< /P> < P> >代码中的条件类型>如果语句必须隐式转换为<代码>布尔O/COD>这减少了各种情况下的错误,基本上是一件好事。它可以防止编译以下内容:

int x = ...;
if (x = 10) // Valid in C / C++, not in C#
<>即使在C和C++中,一个不错的编译器也会警告你在上面的行,如果你有一个明智的警告等级。
< C++ > C++中的

> P> >“代码> INT/CUT>、指针和其他大多数类型到 BOOL 为了清楚起见,C#的设计者选择了不这样做

所以

int i = 1;
int* P = null;

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

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

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


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

if(true)
是vaid,而
if(someString==Strings.Empty)
是有效的,因为您使用了比较运算符来验证某些上下文+你是说,代码>如果(空)在Turbo C++中工作吗?这也是C++中的错误。问题不在于它是否运行,而在于它是否编译。C++和C语言都是编译语言,而不是解释语言。所以这个问题毫无意义<代码>-1来自我。@sbi:您的-1没有问题,谢谢。我没有考虑VS C++,我明确地为Turbo编译器指定了。亨克:是的,我的意思是一样的,但只适用于涡轮增压器Compiler@Shantanu对不起,但是我不相信任何版本的TC都允许你编译<代码>(函数)(<代码)>如果代码>函数():返回<代码>空白> /COR> > @ Shantanu:你可能想改变你的问题的文本:“当我在用一个坏的C++编译器工作……”在<代码>条件下,如果语句必须在C++中隐式转换为<代码>布尔O/COD>。<代码>(x=10)< /C> >将在最近编译器乔恩上生成一个警告,@,@:克里斯汀:Turbo编译器中的空格工作。在我上学的时候,我使用了turbo编译器,它似乎是一种松散类型的语言think@Shantanu:不,它不是一种松散类型的语言。它是一个破译的C++编译器。它不是一种独立的语言(C++是C++,不管编译器),它只是一个没有人使用的Bug,过时的编译器。或者只是相当多的(指针类型,整数等)?这就是我在C、C++上工作时所经历的。这在Turbo编译器上太重要了。对于其他编译器,我不知道。