В эпоху, когда в интернете существует куча проектов, написанных под разные платформы, программисты не стесняются заимствовать полезные куски кода в режиме copy-paste. Помимо юридических вопросов, которые оставим за рамками этой статьи, возникают и чисто технические трудности.
Исторически так сложилось, что окончание строки в бинарной форме по умолчанию по-разному кодируется на разных платформах. На Windows — это CR+LF (ASCII 0x0D 0x0A), на Unix и подобных системах — LF (ASCII 0x0A), на Mac — CR (ASCII 0x0D). Копируя текст из исходников, которые писались для другой системы, есть опасность получить файл со смешанными концами строк. Пример такого файла показан на рисунке ниже.
Опасность таких файлов в том, что компилятор MSVC++ игнорирует CR и считает, что там все написано в одну строку. С другой стороны редактор Visual Studio вполне корректно отображает перенос. Проблемы начинаются при отладке полученных от кастомеров дампов. Пример показан на рисунке ниже.
Тут видно, что ошибка показана совсем не в той строке, в которой она произошла в реальности. При отладке больших проектов это становится огромной проблемой. Можно также отметить, что даже при показе специальных символов Visual Studio никак не выделяет «враждебные» концы строк. Единственное, чем помогает студия — это предупреждение, которое выдается при открытии подобных файлов.
Обратите внимание, что в диалоге можно снять галочку Always show this dialog и тогда студия больше никогда таких предупреждений не выдаст. Убедиться, что Visual Studio определяет файлы со смешанными концами строк можно в параметрах через меню Tools->Options в появившемся окне Environment->Documents и смотрим галку Check for consistent line endings on load.
четверг, 8 августа 2013 г.
Опасности неправильных концов строк
Posted by
Kirill V. Lyadvinsky
обновлено:
2022-05-12T06:56:46Z
Labels:
Cplusplus
,
programming
,
VisualStudio
,
Windows
Комментировать в ВКонтакте
Подписаться на:
Комментарии к сообщению
(
Atom
)