- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在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;
但不确定该函数将如何执行。这不是一个定义,也不是一个函数。
有人知道吗?
谢谢。
最佳答案
##
是拼接
#define TIMER_PASTE_B(lft,t,rgt) lft##t##_##rgt
预处理器将定义扩展为 lft
、t
、_
和 rgt
的串联。
例如
TIMER_PASTE_B(ABC,DEF,GHI)
将标记 ABC、DEF、GHI 和 _ 连接到
ABCDEF_GHI
编辑
例如,假设您将 TIMER_TO_USE_FOR_TONE 定义为定时器 3
#define TIMER_TO_USE_FOR_TONE 3
结果是
void tone( uint8_t _pin, unsigned int frequency, unsigned long duration )
{
timer3_ocr_t ocr;
timer3_prescale_value_t csv;
timer3_cs_t csi;
}
关于c - 这是什么意思? #define TIMER_PASTE_B(lft,t,rgt) lft##t##_##rgt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514938/
我在ATTiny85音调核心库中找到了如下函数定义。我无法弄清楚这是什么意思,或者它是如何工作的。它经常用于创建函数名称,但不确定语法是如何工作的。 这是我对该函数所做的回溯。有很多定义过度定义: 一
我正在尝试为网站 (PHP/MySQL) 创建一个评论部分,用户可以在其中发表评论或回复已发布的。我了解到这有点棘手,因为诸如 MySQL 之类的 RDBMS 并不是真正为存储分层数据而创建的。我找到
您好,我可以隐藏元素:在我们所有的网站中,但我只想隐藏在某些页面上。我可以使用哪个 CSS 代码来隐藏某些数据 ID: 最佳答案 在你的 CSS 中,使用 attribute selectors你
我是一名优秀的程序员,十分优秀!