快捷搜索: 王者荣耀 脱发

【实验2:框架设计者 C语言版】

【实验2:框架设计者 C语言版】

为什么要提供实验2的C语言版呢?是希望你们自己体会控制反转/Ioc的含义、依赖倒置原则(Dependency Inversion Principle、DIP) 的荒谬。对照Java版看解说,这里仅仅说操作过程,

排序测试框架的C语言实现,其实与【实验1:回调机制的实现】的C语言版,没有原理上的差别。不过本实现包含测试流程的控制模块,更有框架的味道。

在Pelles c开发环境,创建一个Win64Static library(lib)项目,项目名myLib,以lib方式提供框架。myLib.lib地位如同Java的123.jar。

//test.c
#include <stdio.h> 
typedef  int * (*How_sort)( int* arr,int len); // 比较 IntSort的抽象方法
void test(int* arr,int len,How_sort how){ //比较 SortTest的测试方法
	int* r =how(arr,len);
	for (int i = 0;i<len;i++){
        printf ("%d " , r[i]);
    }
}
//test.h
typedef  int * (*How_sort)( int* arr,int len); //函数指针的种类 
void test(int* arr,int len,How_sort how);

打开ood项目,通过Project- Workspace- add projects to workspaces将myLib加入Workspace。在main.c文件中编写相关代码:

#include <stdio.h>
//实验2 框架
#pragma comment(lib, "D:\clang\myLib\myLib.lib")
#include "D:clangmyLib	est.h"
void swap(int* arr ,int one, int two){ //可以放在框架中
	if(one == two){return;}
	int temp = arr[one];
	arr[one] = arr[two];
	arr[two] = temp;
}

int* bubbleSort( int* arr,int len){ //比较BubbleSort的实现方法
	for(int i = 0 ; i<len-1; i++){
		for(int j = 0 ; j < len-i-1;j++){
			if(arr[j] > arr[j+1]){ //冒泡
				swap(arr ,j, j+1);
			}
		}
	}
	return arr;
}

void testFramework(void){ //比较Main类的测试
	int arr [ 5 ]={5,4,,3,2,1};
	test(arr,5,bubbleSort);
}

int main(void){	
	testFramework();
    return 0;
}
经验分享 程序员 微信小程序 职场和发展