所有关于电路

使用函数指针在'C'中模拟名称空间。

ApacheKid

线程启动

ApacheKid

2015年1月12日加入
384
BobaMosfet

BobaMosfet

2009年7月1日加入
1579年
我偶然发现了这个建议当我们在c中工作时,它给了我们类似于名称空间的能力。
这是使用函数指针通过一个称为参数块的结构来抽象访问设备等事物的最常见方式。这在O/S队列、窗口和控制管理器等中大量使用。

不要从名称空间的角度考虑它——如果这样做,就限制了您对使用名称空间所能做的事情的理解。记住,c++最初只是C编译器的头文件。c++编译器在此之后逐步改进。

很少有人意识到C语言的全部威力和力量——它允许人们不受限制地用代码做任何事情。一个人必须有足够的经验和足够的智慧来理解如何明智地利用这种力量。
ApacheKid

线程启动

ApacheKid

2015年1月12日加入
384
哦,我明白了,这篇文章的重点是展示如何在使用C时设置类似于名称空间的机制。

我试图解决的问题是能够将函数合并到命名的“库”中。

然后我们可以编写如下代码:

Peripherals.ADC.Initialize(…)



System.Reboot(…)

在普通的C语言中,没有开箱即用的方法来获得类似于名称空间的功能,没有它,随着时间的推移,我们最终会得到大量名称奇怪的函数。
4

402年df855

2013年2月9日加入
271
IMO应该注意帮助后面的程序员(包括作者)知道所指向的函数是什么。我第一次在JPEGLIB中遇到这类东西,其中很多图像格式可以涉及各种选择,而这个方法确实有助于实现它们。最近我在使用openssl,例如,它使用了相同的技术,只是提供了不同的散列和加密选项。

在这两种情况下,查看调用了什么函数的唯一方法是在调试器可用的情况下设置断点,或者更糟的是,使用printfs查看调用了什么。为了找到用于执行验证证书中的签名的解密的精确子例程,我需要使用后者。找到正确例程的最快方法是为候选例程使用grep,将printfs放入代码中,重新编译openssl并以这种方式跟踪它。

伴随着权力而来的是巨大的责任。