我在 ATtiny85 音核库中找到了以下函数定义。我无法弄清楚这是什么意思,或者它是如何工作的。它经常用于创建函数名称,但不确定语法如何工作。
这是我对该函数所做的追溯。定义有很多定义:
第一个例子:
void tone( uint8_t _pin, unsigned int frequency, unsigned long duration )
{
tonetimer_(ocr_t) ocr;
tonetimer_(prescale_value_t) csv;
tonetimer_(cs_t) csi; //and the function continue...
然后我跟踪要定义为的函数tonetimer_:
#define tonetimer_(t) TIMER_PASTE_A( timer, TIMER_TO_USE_FOR_TONE, t )
#define ToneTimer_(f) TIMER_PASTE_A( Timer, TIMER_TO_USE_FOR_TONE, f )
#define TONETIMER_(c) TIMER_PASTE_A( TIMER, TIMER_TO_USE_FOR_TONE, c )
然后我发现 TIMER_PASTE_A 函数定义为:
#define TIMER_PASTE_A(lft,t,rgt) TIMER_PASTE_B(lft,t,rgt)
最后我发现 TIMER_PASTE_B 的定义为:
#define TIMER_PASTE_B(lft,t,rgt) lft##t##_##rgt
这就是我卡住的地方。我无法遵循这种语法。我很好地进行了简单的替换。然而,## 让我失望了。
所以在进行替换之后,我可以看到最终的命令是这样的:
timer##TIMER_TO_USE_FOR_TONE##_##ocr_t ocr;
但不确定该功能将如何执行。这既不是定义也不是功能。
有人知道吗?
谢谢你。