7

以下草图无法在 Arduino 环境中编译。

鉴于typedefs 可以在 Arduino 软件中使用自动原型生成是导致失败的底层机制吗?如果是这样,它是什么,为什么 Arduino 不提供围绕 C++ 的轻量级包装器?

#define PRODUCE_WACKY_COMPILETIME_ERROR
typedef int MyMeaningfulType;

#ifndef PRODUCE_WACKY_COMPILETIME_ERROR
void myFunc(MyMeaningfulType myParam);
#endif

void myFunc(MyMeaningfulType myParam)
{
  myFunc(10);
}

void setup() {}
void loop() {}

为了搜索引擎的利益,报告的错误是:

error: variable or field 'myFunc' declared void
error: 'MyMeaningfulType' was not declared in this scope
4

2 回答 2

8

请参考http://arduino.cc/en/Hacking/BuildProcess具体报价为:

This means that if you want to use a custom type as a function argument, you should declare it within a separate header file.

这个页面很好地解释了 Arduino 语言在工作/预处理文件方面与 C/C++ 的不同之处。

于 2013-08-10T05:52:26.477 回答
0

他们正在尝试为他们找到的每个功能创建原型。不幸的是,如果您在函数之前的文件中定义 typedef,并在函数定义中使用它,他们放置函数原型的地方看不到它,这会产生语法错误。

如果您在这些函数定义中使用“struct *”语法,您将受益于 C 的“不透明类型”功能,您可以在其中使用结构定义而无需事先声明它。因此,构建 typedef,使用它,但在任何在参数中使用 typedef 的函数中使用结构定义。

typedef struct mytype_ {
    int f1;
} mytype_t;

void myfunc(struct mytype_ * xxx) {
    xxx->f1 = 1;
}
于 2014-03-05T21:58:27.007 回答