Упражнение 19 прагматического программиста
Это взято из упражнения 19 прагматического программиста.
Быстрая проверка реальности. Какие из этих "невозможных" вещей могут случиться?:
-
Месяц с менее чем 28 днями
-
stat ( ".", & sb) == -1 (то есть не может обращаться к текущему каталогу)
-
В С++: a = 2; b = 3; if (a + b != 5) exit(1);
-
Треугольник с суммой внутреннего угла & ne; 180 °
-
Минута, которая не имеет 60 секунд
-
В Java: (a + 1) <= a
У меня есть некоторые ответы, но я не думаю, что мои ответы "правильные" (в том смысле, что это ответ, о котором писатели думали, когда они писали вопрос).
Это моя попытка:
1) сентябрь 1752
2) - Я думаю, мы можем пропустить это, не понимая вопроса -
3) Я не знаю С++, но это как-то связано с потоковыми и изменчивыми переменными (например, Java)?
4) невозможно..
5) Из-за появления секунд прыжка
6) double a = 100000000000000001d;
Мне было интересно, знает ли кто-нибудь правильный ответ на эти вопросы?
Ответы
Ответ 1
3: Если a и b имеют тип класса, то перегруженный оператор + может делать что угодно (или перегруженный оператор присваивания, или оператор! =, или даже оператор неявного преобразования, если на то пошло).
4: Треугольник на криволинейной поверхности не имеет внутренней угловой суммы 180.
6: Переполнение в a.
Точка вопросов - это ИМХО, чтобы продемонстрировать, что на самом деле происходит много "невозможных" вещей, и что вы можете не просто быть параноидальными, когда программируете очень защитно.
Ответ 2
2
может произойти довольно легко. например Если вы удалите свой каталог во время его работы, а затем выполните что-то. На самом деле многие программы справляются с этим.
[email protected]% ls
[email protected]% cd
[email protected]% mkdir /tmp/foo
[email protected]% cd /tmp/foo
[email protected]% touch x
[email protected]% ls
x
[email protected]% rm -Rf /tmp/foo
[email protected]% ls
[email protected]% touch x
touch: cannot touch `x': No such file or directory
Ответ 3
nr 5 происходит в случае прыжков секунд