This works well for our code base especially since we use name based prefixes to ensure uniqueness of symbols we use for defensive includes across code base:
In our base the convention that makes sense is something like this:
For COLstring.h
Use COL_STRING_H
Basically <prefix>_WORD1_WORD2…_H
The key thing is that if the header file name changes we have to change the defensive include symbol.