c語言函數指針使用注意事項

使用函數指針,可以在C當中實現類似於C++的多態功能,但是如果使用不當會引入難以調試的bug:函數指針類型和函數類型不匹配。在現象上表現如下:一個參數在進入函數之前,其值是正確的,但是進入函數之後,它的值就變化了,而這時候根本沒有對它進行任何操作!那麼問題只能出現在參數傳遞上!如果你使用了函數指針來調用某個函數,那麼問題極有可能是二者類型不匹配,這裏給出一個實例:

#include <stdio.h>
#include <stdint.h>
 
typedef void (*funcptr) (int64_t a, int32_t b);
 
void foo(int32_t a, int32_t b)
{
    printf ("a=%d/tb=%d/n",a,b);
}
 
int main( int argc, char *argv[] )
{
    funcptr fp=(void*)foo;   //<<--- 重點在這裏,我們使用(void*)強制轉換將編譯器的警告濾掉了,而這就爲我們已後引入了很難調試的bug。
    (*fp)(-1,2);
    return 0;
}

您可以想一下,這個程序的輸出應該是多少?

 

發佈了35 篇原創文章 · 獲贊 6 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章