【问题标题】:Why Klocwork complains that S_IRWXU is an int?为什么 Klocwork 抱怨 S_IRWXU 是一个 int?
【发布时间】:2013-09-02 10:10:38
【问题描述】:

代码如下:

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

对于 if 检查,我得到了 Klocwork misra:
按位运算的操作数类型为“int”而不是“无符号整数”

在同一行,lint 表示:
违反 MISRA 2004 要求的规则 10.1,禁止隐式转换:有符号与无符号

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

#deinf S_IRWXU  (__S_IREAD|__S_IWRITE|__S_IEXEC)

应该没有问题。

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

【问题讨论】:

    标签: linux lint mkfifo klocwork


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2020-08-12
      • 2016-02-27
      • 1970-01-01
      • 2018-11-17
      • 2019-12-04
      • 2022-06-15
      相关资源
      最近更新 更多