如何在Arduino上包含clock_t?

3

我正在尝试使用我自己创建的计时器库,其中使用了clock_t。当我编译这个sketch时,一直出现错误。这是我一直遇到的错误:error: 'clock_t' in namespace 'std' does not name a type

使用clock_t是否可能?我编写的库在c++编译器上运行得非常完美,但在这里却不行。

我对Arduino还很陌生,希望能获得帮助。提前感谢您的回复。

2个回答

3
我不熟悉Arduino,但在C++中,您需要#include <ctime>。可能在您使用clock_t的C++实现中,ctime是通过另一个头文件间接包含的,而Arduino的实现中该其他头文件未包含ctime。
这是C++的一个问题;其他标准头文件中包含的头文件没有被标准定义,因此,如果您未直接包含正确的头文件,每个实现都会使用不同的间接包含导致产生不同的结果。为避免这种情况,您应该小心地直接包含任何您使用的标准头文件。这意味着您需要了解哪些标准头文件提供哪些标准设施。可以访问http://en.cppreference.com/w/获取帮助。

2
Arduino使用AVR Libc进行链接,大部分类似于C标准库的东西都来自它。
据我所知,AVR Libc中没有clock_t。我在库的源文件中搜索并查看了文档,但没有找到它。AVR Libc中也没有time.h
根据Arduino FAQ所述:

... Arduino语言仅是一组可以从您的代码中调用的C/C++函数。您的草稿将经历轻微更改(例如自动生成函数原型),然后直接传递给C/C++编译器(avr-g++)。所有标准C和C++构造由avr-g++支持应该在Arduino中工作。...

而在AVR-libc FAQ中:

我可以在AVR上使用C ++吗?

但是,目前没有支持libstdc ++的支持库,这是完整的C ++实现所需的标准支持库。这对可以编译的C ++程序施加了许多限制。其中包括:

  • 显然,没有任何与C ++相关的标准函数、类和模板类可用。
因此,Arduino不为您提供C++标准库-因此ctime(C++)以及time.h(C)也不可用。也就是说,在Arduino环境中很可能无法使用clock_t

-1; AVR Libc 是 C 库,而不是“C/C++库”。从“在命名空间 'std' 中”的错误可以看出,问题是关于 C++ 的。 - MSalters
加法可以澄清这一点:如果没有libstdc++或其他实现,std::将完全缺失。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接