gpt4 book ai didi

c - sizeof(int[1]) 是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 16:53:48 26 4
gpt4 key购买 nike

我是 Linux 内核的新手。我正在阅读文件 ioctl.h,在那里我遇到了一个宏_IOC_TYPECHECK(t),看起来像这样:

#define _IOC_TYPECHECK(t) \
((sizeof(t) == sizeof(t[1]) && \
sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
sizeof(t) : __invalid_size_argument_for_IOC)

你能解释一下这段代码吗?在这段代码中,sizeof(t[1]) 是什么意思?

最佳答案

这用于检查 _IOR 的第三个参数的有效性。/_IOW/_IOWR宏,这应该是一种类型。它检查参数实际上是一个类型(而不是变量或数字),否则会导致编译器或链接器错误。

  • 如果 t是一个类型,那么 t[1]是类型“1 t 的数组”。此类型的大小与 t 相同,因此 sizeof(t) == sizeof(t[1])是真的。

  • 如果 t是一个数字,sizeof(t)将无法编译。

  • 如果 t是一个简单的(非数组)变量,那么 t[1]将导致编译器错误。

  • 如果 t是一个数组变量,sizeof(t) == sizeof(t[1])将为 false,并导致链接器错误(因为未定义 __invalid_size_argument_for_IOC)。

表达式sizeof(t) < (1 << _IOC_SIZEBITS)检查类型的大小 t不超过 ioctl 允许的最大值,否则会导致相同的链接器错误。

仍然有一些无效的情况不会被这个宏捕获 - 例如,当 t是指向指针的指针。

关于c - sizeof(int[1]) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com