影響はあります。
ヘッダファイルに書く定数というのはおそらくマクロでの定義ですよね? その場合には、ローカル変数とも名前がかぶらないようにしないと変なエラーを引き起こすことがありますね。
c
1// foo.h
2// このマクロ定義があるためにエラーになる
3#define foo 2
c
1#include <stdio.h>
2#include "foo.h"
3
4int main() {
5 int foo = 1;
6 printf("%d\n", foo);
7 return 0;
8}
逆に言えば既存の名前とかぶりさえしなければ問題にはなりません。 追加しようとする名前が既に使われていないことを検証するのはソースコードを検索すれば良いだけなので、たいした手間ではないでしょう。
一般的にはマクロは大文字にするなどといった字句規約を定めることで通常の名前とかぶらないようにしている例が多いです。
ただ、業務でやるならテストの手順が固定されていたりすることはあるので、個別の判断で問題なさそうだとしても簡単には例外を認められないというのもわからないことではありません。 そこらへんは社内での発言力というか政治力で解決する話なので技術的にはどうとも言えないのですが……。
個人的には、テストが充分に自動化できていないのが問題に思えます。
ここからは質問に対する回答というより、ちょっとした工夫の話です。
マクロは名前が一致さえすればあらゆる箇所で問答無用で置き換えてしまうので、可能なら避けた方が良いと言えば良いです。 const
付きの変数にするのが綺麗なやり方ではあります。 ただ、そうなると (ヘッダファイルではない) どこかで定義した変数をヘッダファイルで extern
して使うということになるのでそれはそれで面倒ですね。
定数が int
である場合ならば列挙定数にするなどといった工夫が知られています。
c
1// foo.h
2enum {
3 foo = 2
4};
これなら字句レベルでの問答無用の置き換えは起きません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。