Как-то раз мне на глаза попалась статья о том, что самой дорогой ошибкой в дизайне языков программирования было решение определять окончание строки в C по NULL-байту. Один из вариантов перевода этой статьи на Хабре: [habrahabr.ru/post/126566][1] (хотя я, по-моему, читал другой). Эта статья меня немного удивила. Во-первых, как-будто в те времена экономии каждого бита памяти можно было шикануть и выделить ещё 2-4 байта в каждой строке на хранение её размера. Во-вторых, никаких особо катастрофических последствий это решения для программиста не несёт. Ошибок, которые можно по этому поводу совершить я могу придумать целых две: неверно выделить память для строки (забыть место под NULL) и неверно записать строку (забыть NULL). О первой ошибке уже предупреждают компиляторы, избежать второй помогает использование библиотечных функций. Всей-то беды.
![][2]Значительно большей проблемой времён дизайна языка С (и затем С++) мне кажется другое — оператор for. При всей его кажущейся безвредности — это просто кладезь потенциальных ошибок и проблем.
Давайте вспомним классическое его применение:
for (int i = 0; i < vec.size(); i++)
\{...\}
Что же здесь может пойти не так?
[Читать дальше →][3]
[1]:
https://habrahabr.ru/post/126566/
[2]:
https://habrastorage.org/files/9c3/0be/a64/9c30bea64f4d463aa88c94b4057aac95.jpg
[3]:
https://habrahabr.ru/post/310338/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut