Sunday, October 11, 2020

function pointer的應用[三]: 使用 typdef 來定義函數指標以增加程式的可讀性

原來

=========================================================================

#include <stdio.h>

int add(int a, int b)

{

 return a + b;

}

int minus(int a, int b)

{

 return a - b;

}

int multiply(int a, int b)

{

 return a * b;

}

int divide(int a, int b)

{

 return a / b;

}

int operation(int a, int b, int (*operation)(int, int))

{

 return operation(a, b);

}

int main(int argc, char* argv[])

{

 int val;

 // add

 // val = add(4, 2);

 val = operation(4, 2, add);

 printf("val = %d\n", val);

 // minus

 // val = minus(4, 2);

 val = operation(4, 2, minus);

 printf("val = %d\n", val);

 // multiply

 // val = multiply(4, 2);

 val = operation(4, 2, multiply);

 printf("val = %d\n", val);

 // divide

 // val = divide(4, 2);

 val = operation(4, 2, divide);

 printf("val = %d\n", val);

return 0;

}

=========================================================================

使用 typedef

#include <stdio.h>

typedef int (*calculation)(int, int);

int add(int a, int b)

{

 return a + b;

}

int minus(int a, int b)

{

 return a - b;

}

int multiply(int a, int b)

{

 return a * b;

}

int divide(int a, int b)

{

 return a / b;

}

// int operation(int a, int b, int (*operation)(int, int))

// {

//  return operation(a, b);

// }

int operation(int a, int b, calculation calc)

{

 return calc(a, b);

}

int main(int argc, char* argv[])

{

 int val;

 // add

 // val = add(4, 2);

 val = operation(4, 2, add);

 printf("val = %d\n", val);

 // minus

 // val = minus(4, 2);

 val = operation(4, 2, minus);

 printf("val = %d\n", val);

 // multiply

 // val = multiply(4, 2);

 val = operation(4, 2, multiply);

 printf("val = %d\n", val);

 // divide

 // val = divide(4, 2);

 val = operation(4, 2, divide);

 printf("val = %d\n", val);

return 0;

}

這裡我們可以清楚的看到,相較於使用函數指標的方式相告,我們用typedef過後的函數標宣告,不僅整個程式碼看起來更簡潔,整體其實也更為直觀

// use function pointer to declare

int operation(int a, int b, int (*operation)(int, int))

{

 return operation(a, b);

}

// use calculation to declare

int operation(int a, int b, calculation calc)

{

 return calc(a, b);

}

No comments:

Post a Comment

n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能