我正在编写一个使用导出符号的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)
这是因为sizeof
int和指针在32位上是相同的,但它们在64位机器上是不同的.
无论是否投射,代码似乎都有效.我只是想摆脱警告.
如何正确地转换指向整数的指针并获得我期望的值,同时没有得到编译器警告?我期望的值本质include/asm-generic/errno-base.h
上是linux内核代码库中列出的整数.
因为我只是看指针就好像它是一个整数,如果IS_ERR()
是真的,我可以肯定它实际上只保留一个整数值.