Почему здесь используется три * здесь? (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;
Заранее спасибо.
Потому что это означает что-то другое, возможно? –
Возвращает ли указатель указателю на указатель? – Neil
Если я не ошибаюсь при указании как одного указателя, вы можете получить предупреждения компилятора при использовании '__save_FCT'. потому что, когда 'FCT' имеет тип' ****', '__save_FCT', как ожидается, будет единственным указателем. В противном случае, если задано как '(* (FCT)),' __save_FCT' станет тройным указателем. - его догадывается. – VoidPointer