gpt4 book ai didi

C 函数指针类型兼容性

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:48 24 4
gpt4 key购买 nike

在编写一个使用函数回调的库时,我经常将函数指针类型转换(并调用)为具有相同调用约定和相同签名的类型,但有一个异常(exception):它们的参数指向不同的类型(所有数据),或空指针。

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

基本上,我的理解是,如果参数的类型是兼容的,那么函数指针类型也是兼容的,应该没有问题。

现在,我有 3 个问题。

首先:这是否意味着,由于指向不同类型的指针在技术上是不兼容的,所以我正在做的事情会导致未定义的行为?

第二:我可以在哪里(在什么架构上)摆脱它?其中有 Windows x86 或 x64 版本吗?

第三:我在哪里不能逃脱?

最佳答案

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

关于C 函数指针类型兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27767392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com