牛逼程序与君共赏
以前该公司的人写的程序,实在太牛逼,忍不住拿出来分享,这是所有代码的一半,另外一般风格与这个类似。篇幅原因只粘贴这么多。
int DecompressDailyFile(char *src,char *dest){ HANDLE hFileIn,hFileOut;// int i,j,k; int result=0; unsigned char *buf,*tmpbuf; int srclen,destlen; DWORD nNumberOfBytesRead,nNumberOfBytesWritten; //open src file hFileIn=CreateFile(src,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFileIn==INVALID_HANDLE_VALUE) { printf("open src file %s error\n",src); goto allexit; } //try to open dest file hFileOut=CreateFile(dest,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(hFileOut==INVALID_HANDLE_VALUE) {//create file error printf("create dest file %s error\n",dest); goto closesrc; } srclen=GetFileSize(hFileIn,0)-4;//file size - head size=data size //read head ReadFile(hFileIn,&destlen,4,&nNumberOfBytesRead,NULL);//printf("\n\nzlz%s %s %d\n\n",src,dest,destlen); if(destlen==0)//file size is 0,then return { result++; goto closedest; } //alloc mem to hold data buf=(unsigned char*)HeapAlloc(hHeap,HEAP_NO_SERIALIZE,srclen); if(buf==NULL) { printf("alloc memory error\n"); goto closedest; } //alloc mem to hold decompressed data tmpbuf=(unsigned char*)HeapAlloc(hHeap,HEAP_NO_SERIALIZE,destlen); if(tmpbuf==NULL) { printf("alloc memory error\n"); goto freebuf; } //read data to buf ReadFile(hFileIn,buf,srclen,&nNumberOfBytesRead,NULL); //decompress if((pDecompressDaily)(buf,srclen,tmpbuf,&destlen)) {//decompress ok,then write to file WriteFile(hFileOut,tmpbuf,destlen,&nNumberOfBytesWritten,0); result++;//set result } else {// decompress error printf("decompress %s error\n",src); } //free tmpbuf HeapFree(hHeap,HEAP_NO_SERIALIZE,tmpbuf);freebuf: HeapFree(hHeap,HEAP_NO_SERIALIZE,buf);closedest: CloseHandle(hFileOut);closesrc: CloseHandle(hFileIn);allexit: return result;}int DecompressMinuteFile(char *src,char *dest){ HANDLE hFileIn,hFileOut; int i; int result=0; unsigned char *buf,*tmpbuf; int srclen,destlen; SHORT head[31*2]; DWORD nNumberOfBytesRead,nNumberOfBytesWritten; //open src file hFileIn=CreateFile(src,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFileIn==INVALID_HANDLE_VALUE) { printf("open src file %s error\n",src); goto allexit; } //try to open dest file hFileOut=CreateFile(dest,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(hFileOut==INVALID_HANDLE_VALUE) {//if dest does not exist,create a new one printf("create dest file %s error\n",dest); goto closesrc; } //read head ReadFile(hFileIn,head,31*4,&nNumberOfBytesRead,NULL); for(i=0;i<31;i++) { if(head[i*2]!=0) { destlen=head[i*2]; srclen=head[i*2+1]; buf=(unsigned char*)HeapAlloc(hHeap,0,srclen); if(buf==NULL) { goto closedest; } tmpbuf=(unsigned char*)HeapAlloc(hHeap,0,destlen); if(tmpbuf==NULL) { goto freebuf; } ReadFile(hFileIn,buf,srclen,&nNumberOfBytesRead,NULL); if((pDecompressMinute)(buf,srclen,tmpbuf,&destlen)) { WriteFile(hFileOut,tmpbuf,destlen,&nNumberOfBytesWritten,0); } else { printf("decompress %s error\n",src); goto freebuf1; } HeapFree(hHeap,0,tmpbuf); HeapFree(hHeap,0,buf); } } result++; goto closedest;freebuf1: HeapFree(hHeap,0,tmpbuf);freebuf: HeapFree(hHeap,0,buf);closedest: CloseHandle(hFileOut);closesrc: CloseHandle(hFileIn);allexit: return result;}
[解决办法]
goto
[解决办法]
呵呵
[解决办法]
我曾经见过某驱动程序,一个函数9k多行的,虽然其中不少switch分支。。。看的那个难受。。。
不过这里的goto似乎还可以忍受吧,目的比较明确,还算好理解,咯咯
[解决办法]
没有一点C/C++的风格!
[解决办法]
goto 就 goto 嘛
[解决办法]
写的不错
[解决办法]
先汗个
这个程序要想改 必须慢慢的理清思路才行
不怕写代码 不怕用不熟悉的语言写程序
就怕改别人的程序 不管是不是熟悉的语言都很费劲。。。。
[解决办法]
无非就是想函数无论从哪里退出,分配的内存都得到释放和打开的文件都得到关闭.指导思想还是专业的,但解决方法是一种过时的方法.