2017-10-27 14 views
1

mutexのロック/アンロックに#defineを使用したいと思います。しかし、私がシングルスレッドのみを使用する他のプラットフォームでは、ロックとロック解除を無効にして何もしません。何もしない#defineを作成するには?

この場合、機能を使用しないアプリではどうすれば安全に定義できますか?例えば

#define SYS_LOCK sys_lock(); 
#define SYS_UNLOCK sys_unlock(); 

これは私がマルチスレッドをサポートするプラットフォームで使用するものです。

しかし、他のプラットフォームでは無効にしたいと考えています。

SYS_LOCKとSYS_UNLOCKを呼び出しても何もしないので、このように定義することは安全ですか?

#define SYS_LOCK 
#define SYS_UNLOCK 
+1

の64ビットバージョンを含めるかどうかを決定します。しかし、なぜあなたは代わりに関数を使いたくないのですか? – HolyBlackCat

+0

はい。それは完全にうまくいくはずです。また、ヘッダファイルには、重複や再帰的なインクルードを避けるために、通常どのようにフラグを付けます。 –

+0

@HolyBlackCat。 OPはあなたの質問に既に答えました。 –

答えて

3

#defineは、単純にこの名前は、前処理に存在することを宣言します。 空のコンセプトは無害であるばかりでなく、マクロがその意味を意識せずに定義されているかどうかをテストすることができるため、広く使われています。

ほとんどの場合、インポートされたファイルの一部の機能を有効または無効にするために使用されます。パイロンのAPIからの簡単な例(私は偶然で働いています):

# if defined(_WIN32) && !defined(_WIN64) 
#  define PYLON_32_BUILD 
# elif defined(_WIN32) && defined(_WIN64) 
#  define PYLON_64_BUILD 
# else 
#  error unsupported wordsize (32/64 platform) 
# endif 

この文は、はい、それは安全である32ビットまたはAPI

関連する問題