Подтвердить что ты не робот

Упражнение 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;

Мне было интересно, знает ли кто-нибудь правильный ответ на эти вопросы?

4b9b3361

Ответ 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