| The worst thing that happens due to this "potential bug" is that someone introduces a double inclusion of that header, which fails to be suppressed and the build blows up in their face due to duplicate definitions. The error could be diagnosed by the compiler---submit a patch to gcc! That is to say, if the following pattern occurs around the content of the file: #ifndef <whatever0>
#define <whatever1>
#endif
the compiler can validate that <whatever0> and <whatever1> are the same symbol, and emit a warning if they aren't.Note that GCC already looks for this pattern and optimizes it! That has been implemented for ages; probably twenty years if not more. See here: https://gcc.gnu.org/onlinedocs/cpp/Once-Only-Headers.html That optimization must have a check in place that it's the same symbol in both places. And so that piece of code which checks can probably be augmented to emit a warning fairly easily. A sophisticated version of the warning would only kick in if the symbols appear to be similar (e.g. close by Levenschtein distance) so that one of them is plausibly a typo for the other. Another solution is to have a commit hook which looks for such a problem: it enforces the include guard on headers, and checks that the symbols match. |
What none of the above can do is two different projects have MESSAGE_H headers that are different can fully compatible to include both. #pragma once handles this correctly.