gpt4 book ai didi

c - typedef 一个函数指针

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:44 25 4
gpt4 key购买 nike

就下面的代码而言,我有两个可能很简单的问题:

#include <windows.h>//IN and OUT prefixes are defined here

typedef int(__cdecl *FOO)(IN int input);
int my_int_func(IN int x) {
return x;
}

int main() {
int res = 0;
FOO foo = &my_int_func;
res = (*foo)(5);
return 0;
}

该代码实际上可以完美运行。以下是问题:

1) IN 前缀在 typedef 行中是什么意思?前缀在 windows.h header 中定义。如果省略 header ,代码将挂起。

2) 如果我将 __cdecl 调用约定更改为 __stdcall,编译器会在 &my_int_func 下划线并输出错误消息“Error: a value “int (*)(int x)”类型的实体不能用于初始化“FOO”类型的实体。我的问题是为什么?

我使用 MS Visual Studio Ultimate 2013。

最佳答案

  1. IN 和 OUT 最有可能指示参数的方向。它们可以用作用户或第三方工具的文档,或者它们可以提示编译器以帮助优化。无论如何,这些都是不可移植的,您必须考虑它们是否值得使用。

  2. 调用约定决定了函数参数的传递方式、返回值的传递方式以及函数调用结束后在何处进行清理。您显然不能混合不同的调用约定,这就是编译器所提示的。调用约定也不是很便携,因此您不应指定它,除非您有充分的理由这样做。

关于c - typedef 一个函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754370/

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