C函数指针类型兼容性

编写一个与函数回调一起工作的库,我经常对具有相同调用约定和相同签名的类型进行类型化(和调用)函数指针,但有一个例外:它们具有指向不同类型(所有数据)的参数,或无效指针。

最近,我发现它可能不那么安全,根据这个: https : //stackoverflow.com/a/14044244/3079266

基本上,正如我所理解的那样,如果参数的类型是兼容的,那意味着函数指针类型也是兼容的,并且应该没有问题。

现在,我有3个问题。

第一:这是否意味着,由于指向不同类型的指针在技术上是不兼容的,我所做的可能导致未定义的行为?

第二:在哪里(在什么样的架构上)我可以逃脱它? 其中是Windows x86还是x64版本?

第三:我哪里可以逃脱它?

  1. 是的,这是UB本身
  2. 您可能可以在非优化的非调试版本中使用它。 优化器可以利用指针类型来确定两个指针是否可以别名,如果您对实际类型撒谎,则逻辑可能会失败。 调试版本当然可以直接检查是否存在类型不匹配。
  3. Windows不是编译器,所以这不是一个明智的问题。 常见的Windows编译器可以优化构建,特别是ICC具有高级优化function。