c - C 中的 typedef 和函数指针
问题描述
我有一些结构和相应的函数可以在它们自己的头文件和 c 文件中对它们进行操作。
我想知道是否可以为代码创建一个新的头文件和 c 文件,以使用新的适当描述性声明“继承”那些特定类型和函数?是否可以以这种方式对函数和结构进行 typedef 以重用代码?
我已经研究过函数指针,但我不确定这是否是实现我所追求的正确工具。我想另一种选择是重构代码,以便名称是通用的。
代码示例:
// function1.h
typedef struct src_data {
...
} src_data;
src_data* process_src_data(...) {
...
return new_data;
}
// function2.h
#include "function1.h"
typedef src_data dest_data;
typedef dest_data* (*process_dest)(void);
process_dest process_dest_data = &process_src_data;
用法如下:
#include "function1.h"
#include "function2.h"
src_data *sourceData = process_src_data(...);
dest_data *destinationData = process_dest_data(...);
解决方案
一个粗略而简单的解决方案:
// function2.h
#define process_dest_data process_src_data
一个更好的方法是使用static inline
函数作为包装器:
// function2.h
static inline dest_data* process_dest_data(void) {
return process_src_data();
}
Usinginline
将帮助您避免有关未使用函数的警告。
两者都可能导致相似的目标代码。
与包装器相比,宏有一个微妙的优势。假设process_src_data
有外部链接。表达式在每个翻译单元中&process_dest_data
可能具有不同的值。如果使用宏,则值将相同,等于&process_src_data
.
推荐阅读
- swift - UITextField 不能成为 UITableView 中的第一响应者
- python - 如何使我的输出打印为“+”字母出现在列表中的次数?
- amazon-web-services - 终止 AWS Elastic Beanstalk 环境并删除数据库
- java - ParquetWriter 无法运行程序“chmod”
- ruby-on-rails - Spree 状态机在生产模式下缺少回调
- sql - 如何foreach sql结果
- angular - 我们如何增加 ng-multiselect-dropdown 中选定值的宽度?
- javascript - 在 Node.js 和 Typescript 中给定一个数组,链式逻辑 AND 没有固定长度
- c# - 如何以高效的方式运行大量阻塞操作?
- reactjs - GUN 不会在父组件 React.js 中获取数据