Joh*_*all 6 c standards posix libc
glibc的文档保持它们是整数类型(不比unsigned int窄),但我找不到标准引用,它说它们必须是整数类型(另请参见time_t).
所以最后,问题变成:是
#include <stdio.h>
#include <stdint.h>
struct stat st;
if (stat("somefile", &st) == 0) {
printf("%ju %ju\n", (uintmax_t)st.st_dev, (uintmax_t)st.st_ino);
}
Run Code Online (Sandbox Code Playgroud)
便携.
POSIX标准要求dev_t是整数类型并且ino_t是无符号整数.
dev_t应为整数类型.
fsblkcnt_t,fsfilcnt_t和ino_t应定义为无符号整数类型.
由于intmax_t并且uintmax_t应该是"最大宽度"整数,因此您的代码是安全的.为了确保以防万一st_dev,你可以把它写成:
printf("%jd %ju\n", (intmax_t)st.st_dev, (uintmax_t)st.st_ino);
Run Code Online (Sandbox Code Playgroud)
否则,您的代码是安全的.