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(...); 
卡米尔库克

是否可以为代码创建一个新的头文件和 c 文件,以便使用新的适当描述性声明“继承”这些特定类型和函数?

C 是一种非常(现在;)简单的语言,您必须自己编写很多。其他语言——尤其是面向对象的语言、C++、Java——具有内置的“继承”功能,该语言本身允许将所有功能从一个地方“导入”到另一个地方。

C 没有这个功能。在 C 中,您必须自己从头开始编写所有内容。

我不确定这是否正确

  1. 不要在头文件中定义函数。不要:

// function1.h
src_data* process_src_data(void) { /* NO */ }

而是将函数声明放在源文件中的头文件和定义中。

// function1.h
src_data* process_src_data(void); //ok
// function1.c
src_data* process_src_data(void) { ok(); }

否则它不是“正确的”,从某种意义上说.c,包含链接在一起的头文件的多个文件将导致“多重定义”问题。

  1. 与函数指针声明类似:

// function2.h
process_dest process_dest_data = &process_src_data;

要么制作函数指针static,要么将其移动到单独的 C 源文件并添加extern到头文件中。const如果它打算保持不变,则另外添加它,因此可以将其优化为只读部分而不使用 RAM。

// function2.h
extern const process_dest process_dest_data;
// function2.c 
const process_dest process_dest_data = &process_src_data;

工具来实现我所追求的。

函数指针占用内存。调用函数指针需要取消对它们的引用。它们很难优化。

在 C 中编写短static包装函数是很典型的

// function2.h
static process_dest process_dest_data(void) {
     return process_src_data();
}

如果函数很短,它将被编译器内联并从生成的可执行文件中删除。对于更长的时间,只需编写一个调用底层实现的常规函数​​即可。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中的typedef和函数指针

来自分类Dev

C函数指针和typedef

来自分类Dev

Typedef指向C ++中C函数的指针

来自分类Dev

C中的结构,typedef和指针

来自分类Dev

如何在C#中创建“指向函数指针的typedef”?

来自分类Dev

C 中的结构和 typedef

来自分类Dev

C中带有指针的typedef

来自分类Dev

C 中函数 typedef 的前向声明

来自分类Dev

对C ++中的类内的typedef函数的怀疑

来自分类Dev

C中数组的const和typedef

来自分类Dev

如何在必须返回类模板的函数指针上使用C ++中的typedef?

来自分类Dev

C:Typedef结构和指针异常

来自分类Dev

C中的函数指针和枚举

来自分类Dev

Typedef与C中的数组

来自分类Dev

了解c中的typedef

来自分类Dev

C函数中双指针和单指针的区别

来自分类Dev

来自c中typedef定义的指针的不兼容类型

来自分类Dev

C typedef 定义的函数

来自分类Dev

BST的C ++中的回调函数和函数指针故障

来自分类Dev

Typedef函数与函数指针

来自分类Dev

C ++中具有构造函数的模板化typedef结构

来自分类Dev

const成员函数和typedef,C ++

来自分类Dev

Typedef结构混乱中的指针

来自分类Dev

类模板中的Typedef指针

来自分类Dev

C typedef:指向结构的指针

来自分类Dev

C ++ 11中的'typedef'和'using'有什么区别?

来自分类Dev

C ++中“ struct”和“ typedef struct”之间的区别?

来自分类Dev

C#中Action <>和/或Func <>的typedef等效项

来自分类Dev

在C中从typedef结构设置和获取数组的值