當我編寫一個「無意識的」代碼片段時,我遇到了這個問題,併成功編譯並獲得了所需的行爲。後來我注意到了這種變化的奇怪之處,並意識到我使用了一個完成函數指針typedef的逆序。現在我很困惑,如果「意外的」錯誤實際上是句法上的錯誤。在做函數指針的typedef時是*強制的嗎?
通用慣例:
typedef void* (*_malloc_fail_handler_ptr)(int) __attribute__ ((unused));
_malloc_fail_handler_ptr _malloc_fail_handler = NULL;
我 「意外」 的代碼:
typedef void* (_malloc_fail_handler_ptr)(int) __attribute__ ((unused));
_malloc_fail_handler_ptr* _malloc_fail_handler = NULL;
是的,儘管該名稱應該改爲_malloc_fail_handler_func或其他名稱,因此名稱與它是一致的:)。 (nit picking) – Rob
這實際上非常有用,因爲它允許實現接口的函數被顯式聲明爲這樣做,如'extern malloc_fail_handler_t implementationor;'中所示。 – doynax