C++ 没有数据类型的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给出了下面深刻而完整的答案!完全回答了我的问题,

我是Arduino的新手,尝试理解以下变量声明:

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语言会导致沮丧。不要那样做。读一本书,上一门课。。。