读书人

牛逼程序与君共赏解决办法

发布时间: 2012-03-15 11:50:39 作者: rapoo

牛逼程序与君共赏
以前该公司的人写的程序,实在太牛逼,忍不住拿出来分享,这是所有代码的一半,另外一般风格与这个类似。篇幅原因只粘贴这么多。

C/C++ code
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么?
这么多goto,加上行号能赶上basic了。

[解决办法]
goto
[解决办法]
呵呵
[解决办法]
我曾经见过某驱动程序,一个函数9k多行的,虽然其中不少switch分支。。。看的那个难受。。。
不过这里的goto似乎还可以忍受吧,目的比较明确,还算好理解,咯咯
[解决办法]
没有一点C/C++的风格!
[解决办法]
goto 就 goto 嘛
[解决办法]
写的不错
[解决办法]
先汗个

这个程序要想改 必须慢慢的理清思路才行

不怕写代码 不怕用不熟悉的语言写程序

就怕改别人的程序 不管是不是熟悉的语言都很费劲。。。。
[解决办法]
无非就是想函数无论从哪里退出,分配的内存都得到释放和打开的文件都得到关闭.指导思想还是专业的,但解决方法是一种过时的方法.

读书人网 >C++

热点推荐