在没有条件的情况下执行功能条件

Par*_*_me 1 c return function

我宣布我的变量

int exceedLimit = 0;
Run Code Online (Sandbox Code Playgroud)

我叫一个功能

    compareLimit(selectChannel,exceedLimit);
Run Code Online (Sandbox Code Playgroud)

此功能检查选择通道的当前值以及是否超出当前设置限制(上限设置为100,下限设置为50).默认情况下,在用户更改某些值之前不应触发它.

int compareLimit (int channelID, int isLimitExceeded)
{

if (temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit || temperatureChannel[channelID].currentTemperature < temperatureChannel[channelID].lowLimit)
     isLimitExceeded = 2;      
else
    isLimitExceeded = 1;

return isLimitExceeded;

}
Run Code Online (Sandbox Code Playgroud)

现在这是下一行代码中的问题....在上一个函数中我返回isLimitExceeded,然后我尝试匹配该返回值以确定警报状态是否应该触发.这个if语句是在compareLimit之后写的

  if (exceedLimit = 2)
             logSubsystem();
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,我的beyondLimit会立即触发并且我的logsubsystem函数被调用...但是,这是怎么回事,因为我exceedLimit = 0在我的cpp文件的开头声明了?

Mar*_*oun 6

if (exceedLimit = 2)应该是if (exceedLimit == 2).

if (exceedLimit = 2)在这里,您将值2分配给它,exceedLimit而不是将其值与2进行比较.

请注意,赋值的表达式返回赋值,在这种情况下if(exceedLimit = 2)将始终为true,这就是if-statement下面的代码始终执行的原因.

  • 如果你在大多数体面的现代编译器上都设置了足够高的警告级别,它就会警告你.旧学校避免这个问题的方法是扭转它.即如果你不使用==,如果(2 = beyondLimit)将收到错误. (3认同)