これは非常に基本的な質問であるべきです、私はいくつかの名前を変更することによってこの状況を避けることができますが、私はここで何かが不足していると思うかもしれません。
この問題の最も簡単なコードを作成しました。Cの#defineからの名前の競合を回避するにはどうすればよいですか? (またはC++)
conv.h :
1 struct convpar_ {
2 int K;
3 } convpar_;
test.c :
1 #include <stdio.h>
2 #include "conv.h"
3
4 #define K 7
5
6 typedef struct convpar_ convpar;
7
8 void func1(convpar cp)
9 {
10 printf("cp.K = %d\n", cp.K);
11 }
12
13 main()
14 {
15 convpar cp = {K};
16
17 func1(cp);
18 }
私はcc test.c -o test
をすれば、私は私が4行目に「7」と文字「K」を定義し、これがライン10は、前処理後printf("cp.7" = %d\n", cp.7);
が表示されますので、これは知っている
cc test.c -o test
test.c: In function 'func1':
test.c:13: error: expected identifier before numeric constant
を取得します。私がconvpar_のメンバーKの名前を何か他のもの(例えばKi)に変更すると、この問題は解消されます。
しかし、時々、定数を定義したいときや、グローバル変数の名前や、同じファイルで使用する構造体のメンバ変数のような場合があります。この問題を解決する正しい方法は何ですか? (これはC++にも当てはまります)
'C++ 'では、名前空間を使用できます。 'C'と' C++ 'では、名前を変更できます。 – druckermanly
マクロを使わないでください( '#define')。定数が必要な場合は、(名前空間内の) 'const'(または' constexpr')変数を使います。 –
'#if defind xxx'ステートメントを使用します。 – luoluo