歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中通過函數指針實現函數重載

C語言中通過函數指針實現函數重載

日期:2017/3/1 10:15:17   编辑:Linux編程

我們都知道重載是c++面向對象的特性。c語言中是不存在的。所謂重載簡單來說就是一個函數名可以實現不同的功能,要麼輸入參數不同或者參數個數不同,要麼返回類型不同。例如函數add(),在c++中可以輕易實現int,double等不同類型參數的相加功能,而在c語言中卻不能這樣實現。c語言中實現重載功能,或者准確來說是類似重載的功能,可以通過函數指針的方式來實現。

下面為演示代碼:

typedef struct _int_param {
int param1;
int param2;
}INT_PARAM;

typedef struct _double_param_ {
double param1;
double param2;
}DOUBLE_PARAM;


typedef void* (*ADDFUNC)(void*);

void* int_add_func(void* wParam)
{
INT_PARAM* lParam = (INT_PARAM*)wParam;
int res = lParam->param1 + lParam->param2;
return (void*)&res;
}

void* double_add_func(void* wParam)
{
DOUBLE_PARAM* lParam = (DOUBLE_PARAM*)wParam;
double res = lParam->param1 + lParam->param2;
return (void*)&res;
}

void* add_func(ADDFUNC f, void* wParam)
{
return f(wParam);
}

int test()
{
INT_PARAM val1 = {10, 20};

DOUBLE_PARAM val2 = {30.5, 40.5};

void* res1 = add_func(int_add_func, &val1);
int result1 = *((int*)res1);
void* res2 = add_func(double_add_func, &val2);
double result2 = *((double*)res2);


return 0;
}

其實欲實現類似C++中的函數重載,在C中常常將參數類型加到函數名當中,如add_int,add_float等等。

Copyright © Linux教程網 All Rights Reserved