assignments inside a conditional check
I see this in C code often. Why do people seem to like doing this?
I see this in C code often. Why do people seem to like doing this?
while ((c = getchar()) != EOF) {
//
}
in a language with iterators would be for (c in chars()) {
//
} while(generator(&c)) {
//
} while ((c = getchar()) != EOF) {
//
}
Is considered more idiomatic and readable than any alternatives that's not assigning to c within the conditional.
You'll see similar idioms in many other languages, e.g. while((line = reader.readLine()) != null) {
}
But if you're talking about e.g. if (foo = (bar & 0xf)) {
}
It's just bad style ... char c = EOF;
while (c != EOF) {
c = getchar();
...
}
The idiomatic way reads better: "while next character is not EOF".Your (excellent) example of bad style is bad because it reads poorly: "if the result of the assignment of bar & 0xf to foo is true". Not only that, but it is not obvious what the result of an assignment is, if anything. (Yes, I do know it is the value, but personally, I think <nothing> is a more logical result).
char c = getchar();
while (c != EOF) {
c = getchar();
…
}
?Which not only reads badly but requires writing the "producer" twice. Though alternatively you could:
while (1) {
c = getchar();
if (c == EOF) { break; }
...
} char c;
do {
c = getchar();
} while (c != EOF); int c; //a char can't represent EOF
do {
c = getchar();
if (c != EOF) {
//do stuff
}
} while (c != EOF);Two of the most hated thing of C but so convenient...