Last update: Tuesday, 15-Nov-2011 05:01:25 JST |
_ 【cc -DNAME1=hoge -DNAME2=fuga foo.c】としたときにfoo.c内部で【MAKEFUNCNAME(niya)でhoge_fuga_niyaという関数名に展開させる】ためのマクロ記法」でかなり悩んだり。
#define MAKEFUNCNAME2(a,b) a##_##b #define MAKEFUNCNAME1(a,b) MAKEFUNCNAME2(a,b) #define MAKEFUNCNAME(a) MAKEFUNCNAME1(MAKEFUNCNAME1(NAME1,NAME2),a)
_ でいい模様。MAKEFUNCNAME(niya)とすると、以下のように展開される。
_
「Cの"##"による結合はマクロの展開より先に行われる」という理屈がわかれば、MAKEFUNCNAME1()を挟んで「"##"による結合より先にマクロを展開させなければいけない」ということがわかる。
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]