![]() |
1
2
我喜欢你的第二个解决方案。我只希望每个函数声明两次,而不是在public头中声明PARAM宏。我更喜欢将宏hijinks放在隐藏的C文件中。
|
![]() |
2
2
您可以使用全局
例如:
另一种选择是使用可变参数,并传递和获取一个额外的参数(其中包含要使用的接口)#ifdef MULTI,但这很可怕,因为您失去了类型安全性,并且会阻止在您的平台上可能非常关心的寄存器中传递参数。另外,所有带有可变参数的函数都必须至少有一个命名参数,您的问题是如何避免参数!但不管怎样:
我个人更喜欢你的第一个解决方案:-) |
![]() |
3
1
然后
使用此方法时,必须确保所有API函数对设备指针使用相同的名称,但所有函数定义和声明看起来都需要完整的参数。如果这对你不重要,你可以:
然后
但这最终看起来好像dev从未向阅读您的代码的人声明过。 尽管如此,您可能会发现在单个设备的小型平台上,使用全局设备结构的成本比传递指针的成本要高,因为必须重新加载该结构的地址的次数太多。如果API是堆叠的(一些函数调用其他函数并将dev指针传递给它们),使用大量尾部递归,和/或平台使用寄存器传递大多数参数而不是堆栈,则更可能出现这种情况。
编辑:
我刚刚意识到,如果您的api函数不带任何附加参数,那么这个方法可能会有问题,即使您确实使用了##运算符,如果您的编译器想要强制您说
|
![]() |
conopizda2 · 为什么我的静态数组没有被memset清除? 2 年前 |
![]() |
jhe4x · C按位OR返回的值不正确 2 年前 |
![]() |
Tim · 如何用c语言打印程序的执行流程# 6 年前 |
![]() |
jatinBatra · 关于嵌入式固件开发[已关闭] 6 年前 |
![]() |
Will · 嵌入链接器脚本-是否正确放置“堆栈”和“堆”区域? 6 年前 |
![]() |
K. Crow · 不等于PIC32上启用中断时操作员不工作[关闭] 6 年前 |
![]() |
spiff42 · 清除位时唯一的最大不同字节值集 6 年前 |