1

我们都知道c编程语言中没有动态类型。但是借助typeofGCC中的运算符,我们可以用c编程语言实现一些动态类型特性。最近我阅读了它的源代码talloc,发现它们做得很优雅.


问题:

  • 我们应该在什么场景下使用该typeof技能?
  • 请给我更多的例子,特别是Linux内核中使用的技术。(除了the container_of()marco)
4

2 回答 2

2

根据此链接http://gcc.gnu.org/onlinedocs/gcc/Typeof.html,似乎一种可能的用法类似于 C++ 模板

因此,您可以创建一个模板化的 C 函数来返回基于指定类型的数组的最小值。我确信这个运营商有深远的影响。

于 2012-11-12T02:53:55.590 回答
0

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) );})
于 2012-11-12T03:15:59.190 回答