用C实现一个简单的泛型

来源:互联网 发布:linux mysql命令大全 编辑:程序博客网 时间:2024/06/11 02:53
谁说只有C++才可以实现泛型,C照样也是可以的,废话少说,上代码
/** * c实现泛型排序 * 示例是用泛型实现数字,字符串的排序 **/#include <stdio.h>/**/#define SORT_INIT(T, name)\void sort_##name(T *array, int num, int (*SortFunc)(T a, T b))\{\int i = 1;\int k = 0;\T temp;\for(i = 1; i < num; i ++)\{\for(k = i; k > 0; k --)\{\if(SortFunc(array[k - 1], array[k]) > 0)\{\temp = array[k];\array[k] = array[k - 1];\array[k - 1] = temp;\}\}\}\}/*定义整数比较函数*/int compare_int(int a, int b){if(a < b)return -1;if(a == b)return 0;return 1;}/*定义字符串比较函数*/int compare_str(char *a, char *b){return strcmp(a, b);}/*整数排序*/SORT_INIT(int, int)/*字符串排序*/SORT_INIT(char*, str);int array[] = {2, 4, 7, 3, 8, 0, 4, 7, 2, 5, 6};char* array2[] = {"123", "345", "asd", "edfg", "dfg"};/**/int main(int argc, char **argv){int num = sizeof(array) / sizeof(int);int i = 0;int num2 = sizeof(array2) / sizeof(char*);/*整数排序*/sort_int(array, num, compare_int);/*字符串排序*/sort_str(array2, num2, compare_str);for(; i < num; i ++){printf("%d ", array[i]);}printf("\n");for(i = 0; i < num2; i ++)printf("%s ", array2[i]);printf("\n");return 0;}