База знаний · Ошибки и решения

Ошибка stray: невидимые русские символы в коде

Классика после копирования из Word: «умные» кавычки, тире и русские буквы ломают сборку.

Скопировали код из методички, документа Word или мессенджера — и сборка рассыпалась с ошибками вида «stray …» на десятках строк? В код попали невидимые «не те» символы. Это одна из самых пугающих на вид и самых простых по сути ошибок.

Откуда берётся stray

Компилятор понимает только простые английские символы кода. А текстовые редакторы и мессенджеры любят «украшать» текст: прямые кавычки " превращают в «ёлочки» или “фигурные”, дефис — в длинное тире, а рядом с кодом легко оказывается русская буква «с» вместо английской «c» — на глаз они неотличимы. Компилятор натыкается на такой символ и сообщает «stray»: посторонний знак в строке.

Классика жанра. Найдите отличие между двумя вызовами — на глаз оно неразличимо:

void setup() {
  pinMode(13, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);   // эта строка написана правильно
  delay(500);
  digitalWritе(13, LOW);    // а здесь в digitalWrite русская «е»
  delay(500);
}

В восьмой строке буква «е» русская. Компилятор говорит об этом тремя сообщениями сразу: error: stray '\320' in program, error: stray '\265' in program и error: 'digitalWrit' was not declared in this scope. Обратите внимание на последнее: имя оборвалось на digitalWrit — ровно там, где началась чужая буква. Это и есть самая надёжная примета.

А теперь посмотрите на сам листинг выше ещё раз — и вы увидите ответ глазами, до всякой сборки: правильный digitalWrite в шестой строке оранжевый, а сломанный в восьмой остался чёрным. Подсветка красит только те слова, которые узнала; чёрная команда посреди оранжевых — готовый указатель на опечатку.

Как найти и убрать

  1. Кликните по карточке ошибки — Trema IDE перенесёт вас к строке с посторонним символом.
  2. Присмотритесь к кавычкам и тире: «ёлочки» и длинные тире в коде нужно заменить на прямые " и обычный минус.
  3. Если строка выглядит нормально — сотрите её целиком и наберите заново руками: невидимый символ исчезнет вместе со старой строкой.
  4. Соберите снова. Ошибок stray станет меньше — повторяйте.
Карточка ошибки сборки в Trema IDE с переходом к строке с проблемой
Клик по карточке — и вы на строке с посторонним символом.

Важно: русские комментарии — можно!

Не путайте: русский текст в комментариях (после // или между /* и */) совершенно безопасен — компилятор комментарии пропускает. Все встроенные примеры Trema IDE прокомментированы по-русски, и это не мешает сборке. Ошибку вызывают только русские символы и «умная» типографика в самом коде: в командах, именах и кавычках строк.

Как избегать

  • Копируйте код из источников, которые хранят его как код: встроенные примеры Trema IDE, страницы с блоками кода. Word и мессенджеры — зона риска.
  • После вставки взгляните на кавычки: в коде они должны быть прямыми.

Другие типовые сообщения компилятора разобраны на странице «Ошибки: как читать и чинить».

Частые вопросы

Почему в комментариях русский текст не мешает?

Комментарии компилятор пропускает — там русский язык безопасен и даже полезен. Ошибку вызывают только русские символы в самом коде: в командах, кавычках и знаках.

Обновлено: 19 июля 2026