|
|
1
2
我喜欢你的第二个解决方案。我只希望每个函数声明两次,而不是在public头中声明PARAM宏。我更喜欢将宏hijinks放在隐藏的C文件中。
|
|
|
2
2
您可以使用全局
例如:
另一种选择是使用可变参数,并传递和获取一个额外的参数(其中包含要使用的接口)#ifdef MULTI,但这很可怕,因为您失去了类型安全性,并且会阻止在您的平台上可能非常关心的寄存器中传递参数。另外,所有带有可变参数的函数都必须至少有一个命名参数,您的问题是如何避免参数!但不管怎样:
我个人更喜欢你的第一个解决方案:-) |
|
|
3
1
然后
使用此方法时,必须确保所有API函数对设备指针使用相同的名称,但所有函数定义和声明看起来都需要完整的参数。如果这对你不重要,你可以:
然后
但这最终看起来好像dev从未向阅读您的代码的人声明过。 尽管如此,您可能会发现在单个设备的小型平台上,使用全局设备结构的成本比传递指针的成本要高,因为必须重新加载该结构的地址的次数太多。如果API是堆叠的(一些函数调用其他函数并将dev指针传递给它们),使用大量尾部递归,和/或平台使用寄存器传递大多数参数而不是堆栈,则更可能出现这种情况。
编辑:
我刚刚意识到,如果您的api函数不带任何附加参数,那么这个方法可能会有问题,即使您确实使用了##运算符,如果您的编译器想要强制您说
|