*参照元 [#tb527564]
#backlinks

*説明 [#yb37f47e]
-パス: [[linux-4.4.1/arch/arm/include/asm/glue.h]]

-アーキテクチャ名と関数名を連結させるマクロ。
--____glue() の呼び出しは無駄に見えるが、__glue(a,b) a##b としてしまうと、入れ子にしたときに不都合が生じる。
 #define cat(a, b) a##b
 
 #define _xcat(a, b) a##b
 #define xcat(a, b) _xcat(a, b)
 
 int main()
 {
         cat(aaa,bbb); //aaabbb
         //cat(cat(aaa,bbb),ccc); //Error!
 
         xcat(aaa,bbb); //aaabbb
         xcat(xcat(aaa,bbb),ccc); //aaabbbccc
 
         return 0;
 }
 
 $ gcc -E a.c -o a.out
 a.c:9:17: error: pasting ")" and "ccc" does not give a valid preprocessing token
   cat(cat(aaa,bbb),ccc); //Error!
                  ^
 a.c:1:19: note: in definition of macro ‘cat’
  #define cat(a, b) a##b
                    ^
--__glue(aaa, _bbb) のように呼び出せば aaa_bbb というトークンが得られる。
--ARM の実装では _CACHE と共に使われることが多いようだ。
--[[linux-4.4.1/_CACHE]]


**引数 [#n3845ad4]
-name
--アーキテクチャ名
-fn
--関数名


**返り値 [#x226613e]
-name と fn を連結したトークン
--関数ではないため、値は返らない


**参考 [#j2b23f5a]


*実装 [#ua374829]
 #define __glue(name,fn)         ____glue(name,fn)
-____glue() を呼ぶだけ。
--[[linux-4.4.1/____glue()]]


*コメント [#la5d556a]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS