摘自The Pragmatic Programmer的练习19。
一个快速的现实检查。哪些"不可能"的事情会发生?:
-
少于28天的月份
-
统计("。",&sb) == -1(即无法访问当前目录)
-
c++:
a = 2; b = 3; if (a + b != 5) exit(1);
-
内角为sum ≠180°
-
没有60秒的一分钟
-
Java:
(a + 1) <= a
我有一些答案,但我不认为我的答案是"正确的"(从这个意义上说,这是作者在写问题时所想的答案)。
这是我的尝试:
1752年9月
2) ——我想我们可以跳过这个,不理解这个问题——
3)我不知道c++,但它是否与线程和volatile变量(如Java)有关?
4)不可能. .
5)由于出现闰秒
6)double a = 100000000000000001d;
我想知道有没有人知道这些问题的正确的答案?
3:如果a和b是类类型,则重载操作符+可以做任何操作(或重载赋值操作符,或operator !=,甚至隐式转换操作符)。
4:曲面上的三角形内角和不为180。
6: Overflow in a.
我的意思是,这些问题的重点是要证明很多"不可能"的事情确实发生了,当你非常防御性地编程时,你可能不仅仅是偏执。
2
很容易发生。如果你在目录中删除目录,然后执行一些操作。许多程序实际上处理这个问题。
noufal@sanitarium% ls
noufal@sanitarium% cd
noufal@sanitarium% mkdir /tmp/foo
noufal@sanitarium% cd /tmp/foo
noufal@sanitarium% touch x
noufal@sanitarium% ls
x
noufal@sanitarium% rm -Rf /tmp/foo
noufal@sanitarium% ls
noufal@sanitarium% touch x
touch: cannot touch `x': No such file or directory