微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写

周立功教你学程序设计技术:做好软件模块的分层设计,回调函数要这样写

时间:07-30 来源:ZLG致远电子 点击:

与函数调用相关联的行为称为动态绑定,因此将一个函数的绑定发生在运行时而非编译期,就称该函数是多态的。显然,多态是一种运行时绑定机制,其目的是将函数名绑定到函数的实现代码。一个函数的名字与其入口地址是紧密相连的,入口地址是该函数在内存中的起始地址,因此多态就是将函数名动态地绑定到函数入口地址的运行时绑定机制,bubbleSort()的接口与实现详见程序清单 2.7和程序清单 2.8。

 

程序清单 2.7 bubbleSort()接口(bubbleSort.h)

1     #pragma once

2     #include

3

4     typedef int(*COMPARE)(const void * e1, const void *e2);

5     void bubbleSort(void * base, size_t nmemb, size_t size, COMPARE compare);

 

程序清单 2.8 bubbleSort()接口的实现(bubbleSort.c)

1     #include"bubbleSort.h"

2

3     void byte_swap(void *pData1, void *pData2, size_t stSize) 

4     {

5            unsigned char *pcData1 = pData1;

6            unsigned char *pcData2 = pData2;

7            unsigned char ucTemp;

8

9            while (stSize--){

10                 ucTemp = *pcData1; *pcData1 = *pcData2; *pcData2 = ucTemp; 

11                 pcData1++; pcData2++; 

12          }

13   }

14

15   void bubbleSort(void * base, size_t nmemb, size_t size, COMPARE compare)

16   {

17          int hasSwap=1;

18

19          for (size_t i = 1; hasSwap&&i < nmemb; i++) {

20                 hasSwap = 0; 

21                 for (size_t j = 0; j < numData - 1; j++) {

22                        void *pThis = ((unsigned char *)base) + size*j;

23                        void *pNext = ((unsigned char *)base) + size*(j+1);

24                        if (compare(pThis, pNext) > 0) {

25                               hasSwap = 1; 

26                               byte_swap(pThis, pNext, size); 

27                        }

28                 }

29          } 

30   }

 

静态类型和动态类型

 

类型的静态和动态指的是名字与类型绑定的时间,如果所有的变量和表达式的类型在编译时就固

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top