Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Свободное общение _ Интересно...

Автор: 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 часов, пока мы искали ошибку в алгоритме, и только потом поняли, в чем дело... wacko.gif

Это ни в коем случае не 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%

- и посмотри, что он напечатает)).
Я однажды сделал себе батничек для переименования фотографий (кстати - очень удобно, рекомендую, могу скинуть) и пользовался им долго и счастливо аж до октября. А октябре он отказался работать, вот именно по такой причине. Но я это просек после примерно получаса подробной трассировки.. smile.gif)


Автор: Client 1.06.2009 16:14

Цитата
могу скинуть
Мона мне?

Автор: Lapp 1.06.2009 17:10

Цитата(Client @ 1.06.2009 13:14) *
Мона мне?
Конечно)).
Очень удобно, на мой взгляд, у меня все картинки так расфасованы. Но..

Но я тут сообразил, что этот скриптик на самом деле locale-зависимый. Иначе гря, он вряд ли пойдет на русской Винде без доработки((. Ладно, здесь это флуд, я сделаю тему другую и положу. Мож, кто адаптирует ее к России.. Я при всем желании не смогу - у мя нет русской версии.