【发布时间】:2013-05-18 05:45:30
【问题描述】:
我已经用 C(不是 C++)实现了一个链表,用于存储指向数据的指针。我想对其函数有多个声明(以提供类型安全),但让它们中的每一个都链接到相同的定义(因为指向不同数据类型的指针之间没有实际区别,所以使用相同的代码可以减少空间)。
有没有人对如何实现这一点(或任何更好的方法)有任何想法?便携式解决方案显然是最好的,但我真的只需要在 GCC 中工作的东西。
【问题讨论】:
-
编写多个声明真的能给你带来任何类型安全吗?我假设您有重载的插入/删除函数 - 是什么阻止您使用一种类型插入并使用另一种类型删除?
-
@derekerdmann:其中一个声明将采用 int*(例如),因此如果您尝试将该声明传递给 myStruct*,编译器会报错。该定义将采用无效*。编译器会将每个声明视为一个单独的函数,并且只有在链接器获取到它们时它们才会变得相同。
-
声明还需要采用
void*才能接受myStruct*- 这是编译器在确定参数是否匹配时所查看的内容,而不是定义。 -
@derekerdmann:对不起;我不够清楚。会有多个 add_int(int*)、add_myStruct(myStruct*) 等形式的声明。这样,编译器就不允许像你说的那样给 add_int 一个 myStruct。这就是类型安全的来源。然后,在链接阶段,所有声明都链接到通用 add(void*) 以消除冗余。
-
除了它并没有真正给你类型安全。链表在
void*上运行,因此没有什么可以阻止您调用add_int来插入一个值,并调用get_myStruct来删除完全相同的值。它实际上并没有让您的操作更安全,而是由您来跟踪哪些类型存储在哪些列表中。
标签: c