我试图找出以下代码的含义。
在此处if (!msize)
检查msize
是否为零或msize
是NULL
?
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
答案 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