Форум «Всё о Паскале» _ Свободное общение _ Интересно...
Автор: volvo 26.05.2009 22:32
..., что по вашему мнению надо оторвать программисту, который решил сделать код более "аккуратным", и сделал вот так:
#include <iostream>
int main() { const int n = 10; const int arr[n] = { 139, 232, 365, 459, 532, 698, 025, 721, 844, 053 }; for(int i = 0; i < n; i++) { std::cout << arr[i] << " "; } std::cout << std::endl;
return 0; }
Это упрощенный вариант реального кода. Там кода было побольше, функция строк из 50-60, и массив размером в 750 элементов, но основная идея остается той же... Тот код привел к потере почти 2 часов, пока мы искали ошибку в алгоритме, и только потом поняли, в чем дело...
Это ни в коем случае не HolyWar, но в Паскале и родственных ему языках такое невозможно по определению. А тут - ... Нет слов. Кстати, может, кто-то знает, есть ли какие-то ключи компиляции или опции, чтобы находить подобные проблемы? Хотя бы предупреждение чтоб выдавалось...
Спойлер(Показать/Скрыть)
(если кто не догадался, в чем собственно дело - запустите программу, и сравните результаты с исходным массивом...)
P.S. Думал, где создать тему, здесь или в Юморе, решил создать здесь...
Автор: Archon 27.05.2009 0:07
Спасибо, долго смеялся =). Давно, когда читал об этой особенности Си, сильно удивился такому формату, потому и запомнил хорошо.
Автор: Lapp 27.05.2009 19:02
Цитата(volvo @ 26.05.2009 19:32)
P.S. Думал, где создать тему, здесь или в Юморе
Ну, юмор тут весьма специальный)). Я буквально за день до этого рассказывал дочке про особенности языков и приводил примеры трудно находимых ошибок в С. Этот немного поизощреннее, согласен..
Автор: Altair 1.06.2009 14:01
А можете рассказать тут? А то нет возможности запустить, т.к. нет ничего на компе. Не вижу в коде ничего криминального...
Автор: volvo 1.06.2009 14:30
Олег, вот и мы сразу не увидели... А ведь числа, начинающиеся с 0, трактуются компилятором С/С++ как записанные в 8-ричной СС... И получается, что 025 = 258 = 2110 и 053 = 538 = 4310
Автор: Lapp 1.06.2009 15:33
Для демнстрации даже не нужен С, потому что та же самая штука в обычном командном языке MS DOS. Сделай себе вот такой bat'ник:
set /a a=031 echo %a%
- и посмотри, что он напечатает)). Я однажды сделал себе батничек для переименования фотографий (кстати - очень удобно, рекомендую, могу скинуть) и пользовался им долго и счастливо аж до октября. А октябре он отказался работать, вот именно по такой причине. Но я это просек после примерно получаса подробной трассировки.. )
Автор: Client 1.06.2009 16:14
Цитата
могу скинуть
Мона мне?
Автор: Lapp 1.06.2009 17:10
Цитата(Client @ 1.06.2009 13:14)
Мона мне?
Конечно)). Очень удобно, на мой взгляд, у меня все картинки так расфасованы. Но..
Но я тут сообразил, что этот скриптик на самом деле locale-зависимый. Иначе гря, он вряд ли пойдет на русской Винде без доработки((. Ладно, здесь это флуд, я сделаю тему другую и положу. Мож, кто адаптирует ее к России.. Я при всем желании не смогу - у мя нет русской версии.