树莓派Pico示例中#define声明里的‘_u’是什么数据类型?
树莓派Pico代码里
_u(value)的语法说明 _u不是内置类型,是SDK自定义的宏
别被它的写法迷惑,_u不是C语言标准里的类型,而是树莓派Pico SDK提前定义好的预处理宏。你去翻SDK的头文件,能找到它的定义大概是这样:
#define _u(x) ((unsigned int)(x))
说白了就是个“语法糖”,帮你把括号里的数值强制转换成unsigned int(无符号整数)类型。
为啥不用常见的后缀U?
你说的没错,C语言里确实可以用后缀U来表示无符号数(比如0xF5U),但SDK用_u()宏有两个实际好处:
- 更醒目:尤其是在长代码或者复杂表达式里,
_u(0xF5)比0xF5U更容易一眼看出是在做无符号转换 - 方便统一修改:哪天SDK要把无符号类型从
unsigned int改成unsigned long,只需要改_u的宏定义就行,不用挨个找代码里的U后缀修改
回到你看到的代码
#define REG_CONFIG _u(0xF5)这句预处理指令,展开后其实是:
#define REG_CONFIG ((unsigned int)0xF5)
目的就是保证REG_CONFIG是一个无符号整数常量,避免后续和有符号数运算时出现符号扩展这类容易踩的坑。
同类的宏还有这些
Pico SDK里还有类似的宏,比如_ul()用来转成unsigned long,_s()转成有符号整数,都是为了让类型转换更直观,代码风格更统一。
内容的提问来源于stack exchange,提问作者user5395338
相关产品推荐
相关产品推荐

