有人告诉我(特别是在一个答案Arduino 上的 C++ 标准库,以及 Stack Overflow 问题中C++ 字符串和 Arduino 字符串。如何将它们结合起来?)) Arduino 编译器没有实现new
操作员。不过,我已经为 Arduino(在 Arduino IDE 中)编写了一个使用它的程序,并且运行良好。
void setup() {
Serial.begin(9600);
}
void loop() {
char* array;
char c;
unsigned arraySize;
Serial.write("Enter a 1 digit number.\n");
do {
c = Serial.read();
} while(c < '0' or c > '9');
arraySize = c-'0';
Serial.write("You wrote ");
Serial.write(c);
Serial.write(".\n");
Serial.write("Now enter ");
Serial.write(c);
Serial.write(" lower-case letters.\n");
array = new char[arraySize];
for (unsigned i = 0; i < arraySize;) {
array[i] = Serial.read();
if (array[i] >= 'a' and array[i] <= 'z')
i++;
}
Serial.write("You entered: ");
for (unsigned i = 0; i < arraySize; i++) {
Serial.write(array[i]);
Serial.write(" ");
}
Serial.write("\n");
}
以下是演示其功能的示例输出:
Enter a 1 digit number.
You wrote 5.
Now enter 5 lower-case letters.
You entered: h e l l o
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: w a s s u p m a n
Enter a 1 digit number.
You wrote 9.
Now enter 9 lower-case letters.
You entered: h o w y a d o i n
Enter a 1 digit number.
You wrote 4.
Now enter 4 lower-case letters.
You entered: c o o l
Enter a 1 digit number.
You wrote 7.
Now enter 7 lower-case letters.
You entered: i t w o r k s
Enter a 1 digit number.
那为什么我总是听到这个?这些人是错的,还是我只是误解了他们的意思?
new
and delete
被定义为 Arduino 发行版的一部分:/usr/share/arduino/hardware/arduino/cores/arduino/new.h
:
/* Header to define new/delete operators as they aren't provided by avr-gcc by default
Taken from http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=59453
*/
#ifndef NEW_H
#define NEW_H
#include <stdlib.h>
void * operator new(size_t size);
void operator delete(void * ptr);
__extension__ typedef int __guard __attribute__((mode (__DI__)));
extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *);
extern "C" void __cxa_pure_virtual(void);
#endif
The new.h
包含在Printable.h
所以你可以在你的 Arduino 基本包含中得到它。不过,AVR Libc 中并未定义这些运算符。我对这些设计选择的解释:Libc 的人认为这是一个坏主意,而 Arduino 的人则注重易用性:如果你愿意new
and delete
,请拥有它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)