gpt4 book ai didi

在 64 位 arch 上转换一个指向整数的问题警告

转载 作者:太空狗 更新时间:2023-10-29 15:20:35 25 4
gpt4 key购买 nike

我正在编写一个使用导出符号 open_exec

的 linux 内核模块
struct file *open_exec(const char *name)

它返回一个指针,我可以使用 IS_ERR 宏检查错误:

if (IS_ERR(file))
return file;

在编译期间,我收到此警告:

warning: return makes integer from pointer without a cast

这是因为我的函数在这里返回一个整数。如果我尝试转换它:

return (int) file;

我在 32 位机器上没有收到警告,但在 64 位机器上收到警告:

warning: cast from pointer to integer of different size

这是因为 int 和指针的 sizeof 在 32 位机器上相同,但在 64 位机器上不同。

不管是否强制转换,代码似乎都有效。我只想去掉警告。

我如何正确地将指针转换为整数并获得我期望的值,同时不会收到编译器警告?我期望的值本质上是一个整数,列在 linux 内核代码库的 include/asm-generic/errno-base.h 中。

因为在 IS_ERR() 为 true 的情况下,我只将指针视为一个整数,所以我可以确定它实际上只包含一个整数值.

最佳答案

linux/err.h 中的 PTR_ERR() 宏也定义了 IS_ERR(),它将一个指针转换为实际上是将错误代码转换为适当的类型(long)。

你应该使用类似的东西:

if (IS_ERR(file))
return PTR_ERR(file);

在源代码中搜索 PTR_ERR() 的现有用法,您会发现这是一种常见模式。

您的函数返回 long 而不是 int 可能更合适 - 但所有错误代码都应该可以用 int 表示.

关于在 64 位 arch 上转换一个指向整数的问题警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825640/

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