在define宏中使用typedef定义函数
defining a function using a typedef inside a define macro
我见过在不同的场景中使用typedef和#define。然而,我从来没有遇到过一个在另一个里面的代码。即,以下
#define DECL_STDXL_FUNC(apiname, apitype, args)
typedef XLstatus (_XL_EXPORT_API *apitype) args
后面用来声明函数原型(显然)像这样
DECL_STDXL_FUNC ( xlGetChannelTime, XLGETCHANNELTIME, (
XLportHandle portHandle,
XLaccess accessMask,
XLuint64 *pChannelTime )
);
基本上,头文件应该定义我只有dll的函数。这向我建议,我需要使用_declspec(dllimport)和相应的导出。但以上对我来说没有任何意义。有人能帮我解释一下这个定义吗?如果你需要更多的代码澄清,我绝对可以提供它。这是迄今为止我见过的最令人沮丧和复杂的函数原型编写方式。
通过预处理器运行它,至少在心理上(这就是我正在做的):
#define DECL_STDXL_FUNC(apiname, apitype, args)
typedef XLstatus (_XL_EXPORT_API *apitype) args
有趣的是:宏的apiname
参数没有使用。
DECL_STDXL_FUNC ( xlGetChannelTime, XLGETCHANNELTIME, (
XLportHandle portHandle,
XLaccess accessMask,
XLuint64 *pChannelTime )
);
翻译后,它变成:
typedef XLstatus (_XL_EXPORT_API *XLGETCHANNELTIME)(XLportHandle portHandle,
XLaccess accessMask, XLuint64 *pChannelTime);
也就是说,XLGETCHANNELTIME
成为指向函数类型的特定指针的名称。_XL_EXPORT_API
可能与从共享库(DLL)符号列表导入或导出有关。各种XLlowercase
名称是代码定义的类型。
你可以定义如下类型的变量:
XLGETCHANNELTIME get_channel_time = …;
可能需要通过某种符号查找函数(在最常见的类unix系统中为dlopen()
)初始化
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 如何重新定义MPI_FLOAT,MPI_DOUBLE以 typedef 的方式
- 使用LASlib时BOOL typedef重新定义
- "typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
- 具有未声明/未定义类型的 typedef 结构
- typedef 应该同时在类定义和类声明中吗?
- 定义 ostream 运算符<<用于类中定义的 typedef
- 模板化类,包含由 typedef 定义的类对象的向量.如何称呼它们
- C 通过Typedef定义新类型
- Typedef已定义的功能
- 这个 typedef 定义是什么意思
- C++ - 有没有办法将字段\方法添加到使用"typedef"定义的类型?
- C++:使用"typedef"定义的类作为参数进行传递
- 如何检查类型是通过 typedef 定义的还是在模板参数中使用定义的
- 奇怪的typedef定义C++
- 在类中使用typedef定义指向父类函数的函数指针
- 如何使用typeid获取使用typedef定义的类型名称
- 类型由其他模板类的内部typedef定义的模板实参
- 2个相似的typedef定义的差异
- 在define宏中使用typedef定义函数