重写常用函数头文件(初测版)~
记得之前写了个常用函数头文件~不过现在学多一点内容重新写感觉会好看一点,这个是初测版还有很多没有完善~P_________S:最新代码15楼更!
Common.h
程序代码:
#include"Common.h" #define _NDEBUG false #if _NDEBUG==true #define NDEBUG #endif #include<assert.h> #define NODE_ISNULL true #define MEMSET_SET true #define DEL_SET_NULL true bool Node_Creat(void**Node,const size_t Size) { #if NODE_ISNULL==true if (*Node!=NULL) return false; #else free(*Node); #endif *Node=malloc(Size); #ifndef NDEBUG assert(*Node); #else if (*Node==NULL) return false; #endif #if MEMSET_SET==true memset(*Node,0,Size); #endif return true; } bool Node_Realloc(void**Node,const size_t Size) { #ifdef NDEBUG void* np=*Node; #endif *Node=realloc(*Node,Size); #ifndef NDEBUG assert(*Node); #else if (*Node==NULL) { *Node=np; return false; } #endif return true; } bool Node_Free(void** Node) { if (*Node==NULL) return false; free(*Node); #if DEL_SET_NULL==true *Node=NULL; #endif return true; } int String_Get(FILE* fp,char** p,int end_signe) { int c=0; unsigned len=0; char* pt=NULL; ptrdiff_t capacity=BUFSIZ; #if NODE_ISNULL==true if (*p!=NULL) return -1; #else free(*p); #endif #ifndef NDEBUG if (Node_Creat((void**)p,BUFSIZ)==false ) return -1; #else Node_Creat((void**)p,BUFSIZ); #endif pt=*p; while ((c=fgetc(fp))!=end_signe) { *pt++=c; len=pt-*p; if (len==capacity-1) { #ifndef NDEBUG if (Node_Realloc((void**)p,sizeof (char )*(capacity+=BUFSIZ))==false ) return -1; #else Node_Realloc((void**)p,sizeof (char )*(capacity+=BUFSIZ)); #endif } pt=*p+len; } #ifndef NDEBUG if (Node_Realloc((void**)p,sizeof (char )*len)==false ) return -1; #else Node_Realloc((void**)p,sizeof (char )*len); #endif *pt='\0'; return len; }
主函数.c
程序代码:
#include"Common.h" COMP_CREAT(Comp_Int,int,NUM,MAX,0) COMP_CREAT(Comp_Str,char*,STR,MIN,0) COMP_CREAT(Comp_Float,float,NUM,MAX,1e-6) int main() { int i=0; int arr[]={5,6,1,2,3,4,7,9,8}; float arr_f[]={1.52,0.64,3.16,2.57,99.9,0.005}; char* str[]={"aaa","ddd","bbb","ccc"}; char** ps=str; char* p=NULL; unsigned len=0; qsort(arr,sizeof(arr)/sizeof(*arr),sizeof(*arr),Comp_Int); for (i=0;i<sizeof(arr)/sizeof(*arr);++i) printf("%-4d",arr[i]); puts(""); qsort(str,sizeof(str)/sizeof(*str),sizeof(*str),Comp_Str); while (ps-str<sizeof(str)/sizeof(*str)) puts(*ps++); qsort(arr_f,sizeof(arr_f)/sizeof(*arr_f),sizeof(*arr_f),Comp_Float); for (i=0;i<sizeof(arr_f)/sizeof(*arr_f);++i) printf("%-8.4f",arr_f[i]); puts(""); len=String_Get(stdin,&p,'\n'); puts(p); printf("%u\n",len); Node_Free(&p); return 0; }
效果如下~
嗯,或者有时间再更和完善一些功能~
[此贴子已经被作者于2017-11-21 18:02编辑过]