Необработанный строковый литерал Arduino IDE C++ 11 имеет проблемы с // в http://, компилятор считает, что // это комментарий
char webpage[] PROGMEM = R"=====(
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.6.6/svg.min.js"></script>
</head>
<body>
</body>
</html>
)=====";
Я обнаружил проблему при использовании необработанного строкового литерала в Arduino IDE. Мой код не может скомпилироваться, если внутри строки есть ссылка http://.
Я обнаружил, что это должно быть связано с тем, как Arduino IDE считает, что строка после // является комментарием, и во время компиляции эта строка игнорируется, и мои коды ломаются.
Похоже, что компилятор Arduino IDE сначала удаляет все //комментарии в коде, прежде чем попытаться скомпилировать необработанный строковый литерал, а затем вызвать проблему.
В качестве теста я пытаюсь отладить ее, изменив свой код на https://-/, программу можно скомпилировать, так как теперь в необработанном строковом литерале нет //
Есть ли обходной путь?
@Ho Chung Law, 👍2
1 ответ
C & Компиляторы C++ не ищут синтаксис языка внутри строк в кавычках (за исключением escape-символов, таких как '\n'). В этом и смысл цитирования строки.
Эта программа только что скомпилирована. Хорошо:
const char webpage[] PROGMEM = R"=====(
<html>
<head>
<script src=\"https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.6.6/svg.min.js\"></script>
</head>
<body>
</body>
</html>
)=====";
void setup() {
}
void loop() {
}
'//' внутри строки не вызвало никаких проблем. В вашем примере появилось сообщение об ошибке, что переменная «веб-страница» должна быть константной, чтобы поместить ее во флэш-память, поэтому я добавил ключевое слово «const», но это единственное изменение, которое я внес.
Если вы это сделали, а ваш компилятор все еще жалуется, значит, проблема не в '//'.
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- Очень простая операция Arduino Uno Serial.readString()
- форматирование строк в Arduino для вывода
- DateTime в строку
- Как преобразовать строку в массив байтов
- Создание форматированной строки (включая числа с плавающей запятой) в Arduino-совместимом C++
- Проблемы с преобразованием byte[] в String