警告:return在没有强制转换的情况下从整数生成指针但是根据需要返回整数

use*_*982 10 c integer casting function void

我试图找出从C中的void*函数调用返回一个整数的正确方法.

即......

#include <stdio.h>

void *myfunction() {
 int x = 5;
 return x;
}

int main() {
  printf("%d\n", myfunction());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我一直在:

警告:返回从整数中生成指针而不进行强制转换

我需要做一个演员来完成这项工作吗?它似乎没有问题地返回x,真正的myfunction返回指向结构和字符串的指针,它们都按预期工作.

小智 8

你在这里想要完成的事情并不明显,但是我假设你正在尝试用x进行一些指针运算,并希望x是这个算术的整数,但是返回时是一个void指针.在没有理解为什么这样做或没有意义的情况下,您可以通过将x显式地转换为void指针来消除警告.

void *myfunction() {
 int x = 5;
 return (void *)x;
}
Run Code Online (Sandbox Code Playgroud)

这很可能会引发另一个警告,具体取决于系统如何实现指针.您可能需要使用long而不是int.

void *myfunction() {
 long x = 5;
 return (void *)x;
}
Run Code Online (Sandbox Code Playgroud)