首页 > 解决方案 > 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(...); 

标签: cfunction-pointerstypedef

解决方案


一个粗略而简单的解决方案:

// 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.


推荐阅读