为什么Klocwork抱怨S_IRWXU是一个int?

时间:2013-09-02 10:10:39

标签: linux lint mkfifo klocwork

以下是代码:

char path = "/temp/abc";
if (mkfifo(path, S_IRWXU) != -1)
{
    /* Other codes. */
}

对于if检查,我得到了Klocwork misra:
按位运算的操作数的类型为'int'而不是'unsigned integer'

在同一行,lint说:
违反MISRA 2004规定的规则10.1,禁止隐式转换:已签名与未签名

但我理解mkfifo采用的第二个参数是 mode_t 类型,它实际上应该是无符号整数。因此我们知道

#deinf S_IRWXU  (__S_IREAD|__S_IWRITE|__S_IEXEC)

应该没有问题。

我知道为什么会收到这样的警告?

1 个答案:

答案 0 :(得分:0)

我不知道Klocwork是什么,但我的猜测是S_IRWXU和其他常量被定义为枚举,或C预处理器#defines到整数文字;在这两种情况下,它们都具有[signed] int类型;因此不匹配。