2013-12-19 2 views
5

私はLinuxのカーネルコードを走査しています。 #define __async_inline __always_inlineと定義されたマクロが見つかりました。 __always_inlineを検索したところ、#define __always_inline inlineという文が見つかりました。私の質問は、なぜ彼らはこのようにする必要があるのですか?彼らはこのマクロの代わりにinlineを直接使用できますか?マクロを直接使用する定義はなぜですか?(正確に何が必要なのかの説明を参照してください)

+0

将来的には、機能性/プロパティをマクロに追加したり、移植性の問題のために追加することもあります。 –

+0

明らかに 'inline'は' C99'バージョンの言語からしか標準ではありませんが、コードベース内でキーワードをハードコーディングするのを避けるため、これを行ったと仮定します。 – user2485710

答えて

5

これは、何らかの決定(この場合はinlineの使用)を単一の場所に移動するためにコードをパラメータ化する一般的な方法です。したがって、その決定を変更する必要があります(さまざまなコンパイラ構成オプション、異なるアーキテクチャー)、変更する単一の場所は1つだけです。

7

コードは、これを言う:

#ifdef CONFIG_HAS_DMA 
#define __async_inline 
#else 
#define __async_inline __always_inline 
#endif 

それは自己説明です。 CONFIG_HAS_DMAが定義されていない場合、__async_inlineinlineに置き換えられます。

+0

私の場合はこのような条件はありません – Chinna

+0

@Chinnaこれはどこに定義されていますか? http://lxr.free-electrons.com/ident?v=2.6.32;i=__async_inline –

関連する問題