プリプロセッサ
プリプロセッサを通すことを前提に記述されたプログラムは、コンパイラのあずかりしらない内容を含んでいることになる。このことは、たとえばマクロの定義と同じ文字列が(意図せず)全て変換されてしまったり、定数の型をチェックできなかったりと、問題の火種をはらんでいる。そのため、プリプロセッサを用いる場合には注意が必要である。
このような名前衝突の問題をさけるための対策として、少なくともユーザー定義のマクロの識別子は大文字だけで記述し、それ以外の識別子は小文字をまぜる(例:NAME→name, Name)という慣習があり、マクロ以外は全部大文字で書くべきではないとされる。。
例:プリプロセッサと同じく全て大文字で定数を定義してしまった場合
C言語の規格自体は、マクロと非マクロの識別子に関して、大文字・小文字の使い分けを規定してはいない。ISO/IEC 9899およびJIS X3010の§6.10.3にて例示されたマクロには、すべて大文字のものもあれば、すべて小文字のものもある。これらは危険性が認知される前の名残とされる。