相关疑难解决方法(0)

在64位拱上投射指向整数问题警告的指针

我正在编写一个使用导出符号的linux内核模块 open_exec

struct file *open_exec(const char *name)
Run Code Online (Sandbox Code Playgroud)

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

if (IS_ERR(file))
    return file;
Run Code Online (Sandbox Code Playgroud)

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

warning: return makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)

这是因为我的函数返回一个整数.如果我尝试施放它:

return (int) file;
Run Code Online (Sandbox Code Playgroud)

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

warning: cast from pointer to integer of different size
Run Code Online (Sandbox Code Playgroud)

这是因为sizeofint和指针在32位上是相同的,但它们在64位机器上是不同的.

无论是否投射,代码似乎都有效.我只是想摆脱警告.

如何正确地转换指向整数的指针并获得我期望的值,同时没有得到编译器警告?我期望的值本质include/asm-generic/errno-base.h上是linux内核代码库中列出的整数.

因为我只是看指针就好像它是一个整数,如果IS_ERR()是真的,我可以肯定它实际上只保留一个整数值.

c pointers kernel-module compiler-warnings linux-kernel

4
推荐指数
1
解决办法
3037
查看次数