linux - 为什么 Klocwork 提示 S_IRWXU 是一个整数?

标签 linux lint mkfifo klocwork

代码如下:

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)

应该没有问题。

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

最佳答案

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

关于linux - 为什么 Klocwork 提示 S_IRWXU 是一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18570649/

相关文章:

linux - 如何继续编译过程?

android - Firestore : Invalid package reference in library

linux - PhantomJS:管道输入

php - PHP 和 C 之间的 FIFOS

Android,此 API 被标记为支持库内部,不应从应用错误访问

linux - 如何在linux下使用持久命名管道?

linux - Perl脚本在linux终端中运行,但在浏览器中出现错误

linux - bash:将列表文件放入变量中,但数组的大小为 1

linux - Linux 上的 GPRS 调制解调器和 PPP 问题

c - 如何在 C 中不访问此变量?