if(!msize)是什么意思?

时间:2014-02-22 14:37:35

标签: c

我试图找出以下代码的含义。

在此处if (!msize)检查msize是否为零或msizeNULL

if (!msize)
    msize = 1 / msize; /* provoke a signal */

//Example 1: A division-by-zero misuse, in lib/mpi/mpi-pow.c of the Linux kernel, where the entire code will be optimized away. 
//Compilers, GCC 4.7 and Clang 3.1

3 个答案:

答案 0 :(得分:5)

if (msize == 0)
    msize = 1 / msize; /* provoke a signal */

检查msize是否为0,相当于写if (msize == 0)。如果是,它故​​意执行零除。

答案 1 :(得分:2)

表示“如果msize等于0”。请记住,在这种情况下,NOT不是逻辑运算符。 NULL也是C中的标准MACRO。

但是如果msize是布尔值,则“if (!msize)”相当于“if (msize == false)”。

旁注: -

5.6乘法运算符

  

4)二进制/运算符产生商和二进制%   运算符从第一个除法中得到余数   表达由第二个。 如果/或%的第二个操作数为零   行为未定义;否则(a / b)* b + a%b等于a。如果两者   操作数是非负的,其余的是非负的;如果不,   余数的符号是​​实现定义的79)。 (重点   矿)


你也可以得到 1.#IND000 的结果,它基本上是 NaN 的表示,基本上IND是Windows中NaN(非数字)的表示系统。 IND代表“不确定形式”,主要来自非法操作,如除以零。

答案 2 :(得分:2)

如果(!msize)与if(msize)完全相反 这里       if(!msize)如果msize == 0或NULL ...

,则此表达式变为true