有没有办法阻止隐式指针转换为void*

RYU*_*AKI 6 c c++ pointers void-pointers implicit-conversion

我需要在源代码中找到所有这些地方,其中隐式转换任何类型的指针void *或停止这些隐式转换的方法.

例如:

  1. int *void *
  2. char *void *
  3. Base *void *

是否有任何gcc警告或错误标志,它会检测指针被隐式转换为的所有这些行void *

cup*_*cup 4

假设你有一个简单的程序,例如

#include <string.h>
int main()
{
   char* apples = "apples and pears";
   char fruit[1024];
   void* avoid;
   int aint;
   float afloat;

   avoid = &aint;
   avoid = &afloat;
   memcpy(fruit, apples, strlen(apples) + 1);
}
Run Code Online (Sandbox Code Playgroud)

这里有一个技巧,可以告诉您一些隐式转换发生在哪里。将其添加到程序的开头

#define void double
Run Code Online (Sandbox Code Playgroud)

你会得到很多编译错误:包括发生隐式转换的地方。它不会发现 void* = double* 所以你需要重试

#define void int
Run Code Online (Sandbox Code Playgroud)

发现其余的。