首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typedef函数指针

Typedef函数指针
EN

Stack Overflow用户
提问于 2014-11-05 18:07:13
回答 1查看 109关注 0票数 0

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

代码语言:javascript
复制
#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) typedef行中的IN前缀是什么意思?前缀在windows.h头中定义。如果省略了头部,代码就会挂起。

2)如果我将__cdecl调用约定更改为__stdcall,编译器在&my_int_func下面加下划线并输出错误消息" error :无法使用类型为"int (*)(int x)“的值初始化类型为”FOO“的实体。我的问题是为什么?

我使用的是MS Visual Studio Ultimate 2013。

EN

回答 1

Stack Overflow用户

发布于 2014-11-05 18:42:38

  1. IN和OUT最有可能指示参数的方向。它们可以作为用户或第三方工具的文档,也可以作为编译器的提示,以帮助优化。在任何情况下,这些都是不可移植的,您必须考虑它们是否值得使用。
  2. 调用约定决定了如何传递函数参数,如何传递返回值,以及在函数调用结束后在何处进行清理。显然,您不能混合不同的调用约定,这就是编译器所抱怨的。调用约定也不是很容易移植,所以您不应该指定它,除非您有很好的理由这样做。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26754370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档