爲什麼在這裏使用三個*? (glibc的源代碼的glibc-2.9/sysdeps /馬赫/位/的libc-lock.h線81)爲什麼在glibc libc-lock.h中使用三個*?
在線視圖的libc-lock.h代碼 - >http://www.oschina.net/code/explore/glibc-2.9/sysdeps/mach/bits/libc-lock.h
/* Start a critical region with a cleanup function */
#define __libc_cleanup_region_start(DOIT, FCT, ARG) \
{ \
typeof (***(FCT)) *__save_FCT = (DOIT) ? (FCT) : 0; \
typeof (ARG) __save_ARG = ARG; \
/* close brace is in __libc_cleanup_region_end below. */
/* End a critical region started with __libc_cleanup_region_start. */
#define __libc_cleanup_region_end(DOIT) \
if ((DOIT) && __save_FCT != 0) \
(*__save_FCT)(__save_ARG); \
}
我不知道爲什麼使用3 *這裏,爲什麼不是
typeof (*(FCT)) * __save_FCT = (DOIT) ? (FCT) : 0;
在此先感謝。
因爲它意味着不同的東西,也許? – 2013-06-26 08:19:04
它是否返回指向指針的指針? – Neil
如果我作爲單個指針給出時沒有問題,那麼在使用'__save_FCT'時可能會收到編譯器警告。因爲當'FCT'是'****'類型時,'__save_FCT'應該是單個指針。否則,當以((*(FCT))給出時,'__save_FCT'會變成三重指針。 - 我的猜測仍然存在。 – VoidPointer