在C/C++中通过指针调用函数时,编译器如何正确处理ABI?

Jia*_* Xu 2 c c++ function-pointers function

编译器如何知道函数指针指向的函数的ABI?

在计算机软件中,应用程序二进制接口(ABI)是两个程序模块之间的接口.

因为在C/C++中,函数指针只指定API,不知道它实际使用的是哪种ABI,这对编译器来说不是一个问题,特别是当他们无法静态地解决这个问题时?

这是否意味着使用这种指针的程序员需要手动指定调用约定?

如果是这样,怎么办?任何人都可以给我一些关于这个编译器文档的链接吗?

bin*_*y01 7

如果函数使用的调用约定不同于您所使用的平台的默认约定,那么是的,您需要手动指定调用约定.大多数平台尝试使用单个ABI,但具有单个或可预测的一组调用约定,因此任何编译器都知道如何调用任何函数.

虽然这超出了C++的范围,但是如果您可以或者需要指定调用约定,则可以使用您正在使用的编译器的非标准扩展来完成.