*参照元 [#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]