2017-02-04 5 views
0

現在、ARM GCCコンパイラを使用して自分のコードをコンパイルしています。私のコードはRTOSを持っていて、types.hのファイルはclock_tをunsigned longにtypedefしています。 ARM GCCコンパイラもclock_tのtypedefを持っているので、同じものに対して競合する型の問題が発生しています。typedef(timer_t)の競合型エラー

GCCの.hファイルを含めて試してみましたが、いくつかのフォーラムで提案されたものと同じものを定義しませんでしたが、どちらも動作しません。 GCCのtime.hファイルがプロジェクトのソースファイルのいずれにも含まれていません。

+0

マクロのみタイプを定義解除することはできません。 – Barmar

+0

もしあなたが 'types.h'をインクルードする前に'#define'でプリプロセッサを使うのであればどうでしょうか? – 3442

答えて

2

簡単な回避策は、コンパイラがcustom_clock_tを持つファイルをコンパイルする前にclock_tのすべての発生を置き換えますし、無傷でおなじみのclock_t構文を維持しながら、競合が消えますこのよう

typedef unsigned long int custom_clock_t; 
#define clock_t custom_clock_t 

だろう。

0

あなたは、いくつかのプリプロセッサの魔法を行うことによって、それを回避しようとするかもしれません:

#include <sys/types.h> // Or whatever is the other header that defines clock_t 
#define clock_t types_clock_t 
#include <types.h> 
#undef clock_t 

clock_t my_variable; 
types_clock_t my_other_variable; 

は、このソリューションは繊細であり、そのようなそうでないいくつかの他のコードなど、いくつかの状況で、さらに問題を引き起こすだろうということを考慮してください<types.h>clock_tなどを使用するかどうかを制御できます。