Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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++ 警告:逗号的右侧操作数对gcc 4.4.7无效_C++_C_Gcc - Fatal编程技术网

C++ 警告:逗号的右侧操作数对gcc 4.4.7无效

C++ 警告:逗号的右侧操作数对gcc 4.4.7无效,c++,c,gcc,C++,C,Gcc,Linux gcc 4.4.7中的以下警告需要您的帮助 for (int iLoop1= 0; iLoop1< iLoopN; ++iLoop1, ++iLoop2, !iIsOk) 我已经阅读了关于逗号运算符的wiki页面,但我不理解这个问题 编辑: 有效地伊索克什么也不做 我已经测试了以下代码 // Example program #include <iostream> #include <string> #include <iostream>

Linux gcc 4.4.7中的以下警告需要您的帮助

for (int iLoop1= 0; iLoop1< iLoopN; ++iLoop1, ++iLoop2, !iIsOk)
我已经阅读了关于逗号运算符的wiki页面,但我不理解这个问题

编辑: 有效地伊索克什么也不做 我已经测试了以下代码

// Example program
#include <iostream>
#include <string>
#include <iostream>

int main()
{

    int iIsOk = 0;

    for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, !iIsOk)
    {
       std::cout << "IsOk=" << iIsOk << std::endl;
    }

      for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, iIsOk = !iIsOk)
    {
       std::cout << "IsOk2=" << iIsOk << std::endl;
    }
}
!!iIsOk应该是iIsOk=!伊索克

若C有像i++或++i这样的操作符,你们用它做的事情!伊索克什么都不做。如果你想得到结果,你必须在某个地方把它分配

要对变量求反,请使用iIsOk=!伊索克;你会得到想要的效果。

!iIsOk虽然经过评估,但不做任何事情;i、 e.删除它对程序绝对没有影响

您有用的编译器正在警告您这一点

你是不是想写啊!iIsOk作为循环中停止条件的一部分:

iLoop1 或者使用

iLoop1++,iIsOk=!伊索克

或者是因为变量重复次数少,所以我个人觉得更清晰的浮华


首先,让我告诉你警告消息背后的原因。根据C11第§6.5.17章中的逗号运算符属性

逗号运算符的左操作数作为空表达式计算;有一个 其求值与右操作数求值之间的序列点。然后右转 计算操作数;结果有其类型和值

这里,在你的例子中,最后的RHS操作数是!iIsOk,对于它,生成的值是未使用的。因此发出警告。您需要使用该值,或者您可以删除该语句,因为在它的当前状态下,它对程序没有任何影响


也就是说,正如和在其他回答中提到的,根据您的具体要求,声明应该是iIsOk=!我知道,但为了可读性,我建议将此作为循环体中的最后一条语句。

哇……你是如何得出这个结论的?你介意稍微细化一下吗?因为在你的例子中,++iLoop与iLoop=iLoop+1相同,因为C知道这个操作符。另一方面,C不知道!iLoop和result必须分配到某个地方。@SouravGhosh我已经更新了答案。如果你不介意的话。不,作业不是命令,比较两者都可以。@tilz0R幸运猜测。不过,你不应该仅仅凭猜测来回答。你想用这个表达达到什么目的呢!iIsOk?最后一个变量不应该是iAmOk吗?我的意思是int,我根据类型使用前缀
// Example program
#include <iostream>
#include <string>
#include <iostream>

int main()
{

    int iIsOk = 0;

    for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, !iIsOk)
    {
       std::cout << "IsOk=" << iIsOk << std::endl;
    }

      for (int iLoop1 = 0; iLoop1 < 2; iLoop1++, iIsOk = !iIsOk)
    {
       std::cout << "IsOk2=" << iIsOk << std::endl;
    }
}
IsOk=0
IsOk=0
IsOk2=0
IsOk2=1