我们都知道c编程语言中没有动态类型。但是借助typeof
GCC中的运算符,我们可以用c编程语言实现一些动态类型特性。最近我阅读了它的源代码talloc
,发现它们做得很优雅.
问题:
- 我们应该在什么场景下使用该
typeof
技能? - 请给我更多的例子,特别是Linux内核中使用的技术。(除了
the container_of()
marco)
根据此链接http://gcc.gnu.org/onlinedocs/gcc/Typeof.html,似乎一种可能的用法类似于 C++ 模板
因此,您可以创建一个模板化的 C 函数来返回基于指定类型的数组的最小值。我确信这个运营商有深远的影响。
typeof
是 GCC 作为扩展提供的编译时构造。它可能用于编写安全宏,例如 gcc 手册中的示例:
#define max(a,b) \
({ typeof (a) _a = (a); \
typeof (b) _b = (b); \
_a > _b ? _a : _b; })
正如您提到的 Linux 内核,container_of()
宏是使用typeof()
构造的一个很好的例子。它大量用于实现子类化,例如在设备驱动程序中。
内核中的另一个例子是数据结构,如链表,其中嵌入了列表。
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})