Steven D'Aprano <st...@pearwood.info>: > What does zero mean, and how do engineers misunderstand it?
Off the top of my head: * Code that does: if elements: for element in elements: ... instead of: for elements in elements: ... * C++ insists that all objects have nonzero sizes. This program: ==================================================================== #include <stdio.h> struct S {}; int main() { printf("%zd\n", sizeof(struct S)); return 0; } ==================================================================== prints out 1 when compiled with c++ but 0 when compiled with cc. * In C, it used to be illegal to define a struct without a dummy field or a zero-length array. At one point, that created irritating trouble for compilers that generated C. * malloc(0) is allowed to return NULL as a successful return value inviting application programming errors. Calling free(NULL) didn't use to be guaranteed to work. * Numerous shell commands assign special meaning to zero arguments. For example: $ ls a b c a b c $ ls a b a b $ ls a a $ ls a b c d e f g $ ln -s a b c # creates two links under c, which must be a directory $ ln -s c # creates one link under . * Wild-card expansion always produces at least one result: for src in *.py; do # executed even in the absence of a .py file done * Python insists that a block contain at least one statement even though technically, it is not necessary for syntactic reasons. Not a biggie but can cause a minor annoyance when commenting out a line. * Numerous timer implementations take 0 to mean infinity. For example, in Java: public final void wait(long timeout) throws InterruptedException [...] If timeout is zero, however, then real time is not taken into consideration and the thread simply waits until notified. <URL: https://docs.oracle.com/javase/7/docs/api/java/lan g/Object.html#wait%28long%29> A nasty surprise for those who'd naively expect zero to mean zero, especially if zero is the result of downward rounding. Marko -- https://mail.python.org/mailman/listinfo/python-list