C++ 没有数据类型的Arduino静态变量声明?
我是Arduino的新手,尝试理解以下变量声明:C++ 没有数据类型的Arduino静态变量声明?,c++,c,variables,definition,C++,C,Variables,Definition,我是Arduino的新手,尝试理解以下变量声明: static btn_state_t nav_btn, joy_btn; 首先,我希望在static之后使用integer或float之类的数据类型。 我只找到了一个答案,变量将被指定为默认类型? 其次,我不理解以下逗号分隔的名称或其他变量。 在程序中,看起来它们都可以用于btn_状态 到目前为止,我还没有找到我的问题的答案……或者也许有人可以给我一个提示,告诉我应该寻找什么搜索词 感谢Steve给出了下面深刻而完整的答案!完全回答了我的问题,
static btn_state_t nav_btn, joy_btn;
首先,我希望在static之后使用integer或float之类的数据类型。
我只找到了一个答案,变量将被指定为默认类型?
其次,我不理解以下逗号分隔的名称或其他变量。
在程序中,看起来它们都可以用于btn_状态
到目前为止,我还没有找到我的问题的答案……或者也许有人可以给我一个提示,告诉我应该寻找什么搜索词
感谢Steve给出了下面深刻而完整的答案!完全回答了我的问题,他的猜测是正确的……即使进行了相当多的搜索,我也没有发现数据类型和类型定义是正确的码字。
所以我就解决了。简短回答:btn\u state\u t是一种类型,您声明了两个这种类型的变量
详细回答:
如果你说
int nav_btn, joy_btn;
static int nav_btn, joy_btn;
您将声明两个int类型的变量。类型名称为int,变量名称为nav_btn和joy_btn
如果你说
int nav_btn, joy_btn;
static int nav_btn, joy_btn;
您将执行相同的操作,但是静态地声明它们。这可能有两种不同的含义,这取决于声明是在函数内部还是在函数外部,但我们现在不必担心这一点。在此声明中,关键字static称为存储类
曾几何时,事物默认为int很多。所以你也可以说
static nav_btn, joy_btn;
它有一个存储类static和两个变量名nav_btn和joy_btn,但没有类型名。但是它最终做了同样的事情,声明了两个int类型的静态变量,因为最初在C中,缺少的类型名默认为int。这种类型的声明现在已经过时了。但这就是你找到的另一个答案
但你偶然发现了另一个案子。你有
static btn_state_t nav_btn, joy_btn;
如果btn_state_t和nav_btn之间有一个逗号,这将是三个静态变量的声明,它们的类型默认为int。但是没有逗号,在btn_state_t中有一点线索。结果是btn_state_t是一个类型的名称
这是两个静态变量的声明,类型为btn_state_t,命名为nav_btn和joy_btn
但是这种类型的名称是什么?显然,在任何C类型列表中都找不到它,还有int、long int、double和其他类型。答案是这是一个typedef的例子
在特定于项目的头文件中,或者您正在使用的GUI或I/O库的头文件中,可能有一行
typedef int btn_state_t;
此行定义了一个新的类型名。新类型名为btn_state_t,它命名的类型在其他方面与int类型相同
btn_state_t btn;
或
就像你说的那样
int btn;
int nav_btn, joy_btn;
换句话说,typedef有点像define。说
有点像说
#define btn_state_t int
之后,每次我们写btn_state_t时,就好像我们写int一样。但在更复杂的情况下,typedef可以做一些定义can't的事情,所以它们实际上根本不是相同的机制
typedef是一种强大的机制,但是总是有一些你从未听说过的新的类型名漂浮在周围,这总是有点令人惊讶,因此有一个惯例,总是在typedef名称中使用后缀_t。此类typedef的其他常见示例是类型名,如size\u t、time\u t和int32\t
如果您以前从未遇到过typedef,您可能会想知道它们有什么好处。你可能想知道为什么它们是必要的,因为一开始看起来好的旧定义很好用。你可能想知道重点是什么,因为你总是可以说
static int nav_btn, joy_btn;
如果btn_state_t后面的真正类型实际上是int。但是这个答案已经太长了,所以如果你仍然对typedef感兴趣,我鼓励你在它上面做一个web搜索并阅读它。btn_state_t是一个类型。nav_btn和joy_btn是btn_state_t类型的两个静态变量。语法类似于static int i,j;通过尝试和错误学习C语言会导致沮丧。不要那样做。读一本书,上一门课。。。