pthread_mutex_lock() // POSIX/UNIX, used for locking a mutex
CGRectMake() // iOS, used to fill in a CGRect structure
RtlZeroMemory() // WinNT, "Rtl" indicates the module it belongs to
#define TYPE int
typedef struct tagStruct{
TYPE *dataBuffer;
void (*add)(TYPE data);
void (*modify)(TYPE data, int index);
void (*deleteEverything)()
}stack;
2条答案
按热度按时间4ngedf3f1#
如果这是纯C语言,最简单的通用解决方案是在函数上使用与它们所应用的模块或数据结构的名称相关的DIY命名空间。
在几乎所有的大型纯C项目中都可以找到这样的例子:
您的问题是关于“导出的”(公共)函数名,但也要注意,当您的.c文件有私有的helper函数时,您可以将它们标记为
static
,这告诉编译器它们只在该文件中使用,因此您的命名可以稍微宽松一些,因为它们在其他地方不会冲突。zlhcx6iw2#
如果你已经测试了一个队列和一个栈的实现,并且在其他地方引用了它,你可以做一些预处理器的技巧,如下所示:
我的建议是-重构代码库,使用非冲突的命名约定,而不是通用的函数名,如
add
和subtract
等。如果你是面向对象编程风格的爱好者,喜欢整个“添加”、“修改”概念,那么就在队列和堆栈结构内使用函数指针。
在
init(stack)
方法中,将add()
、modify()
和deleteEverything()
分配给没有名称冲突的不同函数(队列也是如此)然后,你开始把
stack
和queue
看作实体,而不是函数束。然后,您可以执行以下操作: