牛逼程序与君共赏

huzy204 2008-04-23 10:59:50
加精
以前该公司的人写的程序,实在太牛逼,忍不住拿出来分享,这是所有代码的一半,另外一般风格与这个类似。篇幅原因只粘贴这么多。
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;
}
...全文
10398 339 打赏 收藏 转发到动态 举报
写回复
用AI写文章
339 条回复
切换为时间正序
请发表友善的回复…
发表回复
BYD123 2012-08-15
  • 打赏
  • 举报
回复
这种风格还是 不错的。linux驱动里很多这样的代码。主要是出错了可以很快的退出。
zc01@ 2012-08-12
  • 打赏
  • 举报
回复
汇编多了不见得是坏事
funnyfan 2012-07-01
  • 打赏
  • 举报
回复
支持源程序分享。。
怎嘛回事 2012-06-27
  • 打赏
  • 举报
回复
这个帖子跨度时间真长啊。。。。
慢就是快o 2012-06-18
  • 打赏
  • 举报
回复
牛逼了
只是很想懂 2012-06-14
  • 打赏
  • 举报
回复
汇编的大婶啊 [Quote=引用 319 楼 的回复:]

亮了…………
引用 96 楼 redleaves 的回复:

实在忍不住想要把我见过最XX的代码拿出来让大家欣赏一下...
大致如下:
for( int i=0; i<8; i++ ) {
if( i==0 ) {
....
} else if( i==1 ) {
....
} else if( i==2 ) {
....
} else if( i==3 ) {
...……
[/Quote]
只是很想懂 2012-06-14
  • 打赏
  • 举报
回复
反语……………………[Quote=引用 15 楼 的回复:]

弱弱的问一句,楼主觉得这个程序哪里NB了?就是因为用多了一点goto吗?
[/Quote]
lwouyang 2012-05-28
  • 打赏
  • 举报
回复
额。不是说用 goto 不好,知道 N 多大牛的意思,也偶尔看过一些像 快速跳出深层循环 和 资源释放 的教程。关键这里是 label 太多了,得知道 在 哪里 往 哪个 label 跳才行啊。
lwouyang 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 254 楼 的回复:]

可能是个搞硬件的汇编程序员转型后写的
整个思路和用汇编写差不多,呵呵~
[/Quote]严重同意!想起来和以前偶尔有瞥了两眼的 汇编代码 差不多,都是 N 多个label,用 goto 超远程精准的跳到 某个 label 处,忘了跳 或者 忘了跳向哪个 label 则下场很惨!
另外,那一个个的 result++; 看得心惊肉跳的!
老鼠期待爱 2012-05-10
  • 打赏
  • 举报
回复
看的那个D疼呢
RuralMouse 2012-05-03
  • 打赏
  • 举报
回复
除了代码的TAB空格外,我觉得这段代码写的还可以,小菜飘过
大鹰 2012-05-03
  • 打赏
  • 举报
回复
如果有注释,增加可读性就好了,也就不用让我们这些初学者这么纠结了
Kaile 2012-03-21
  • 打赏
  • 举报
回复
goto 太多,可读性差
捕鲸叉 2012-03-07
  • 打赏
  • 举报
回复
这个代码比较好,我没说反话
程序员小迷 2012-02-17
  • 打赏
  • 举报
回复
这不是很普通的程序么 有什么难修复的
不要看到goto就骂人
goto是有理由的
mm11214014 2012-02-10
  • 打赏
  • 举报
回复
我曾经见过某驱动程序,一个函数9k多行的,虽然其中不少switch分支。。。看的那个难受。。。
-------------------------------------------------
膜拜,偶一直以为自己听过的600行的函数已经是极致了。。
lck_1 2011-12-22
  • 打赏
  • 举报
回复
代码读起来没什么问题,中规中矩,
Frank-Zhu 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zcncts 的回复:]

先汗个

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

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

就怕改别人的程序 不管是不是熟悉的语言都很费劲。。。。
[/Quote]
顶一个
KBdancer 2011-11-30
  • 打赏
  • 举报
回复
学C++不久,看不太懂呃
Ericz 2011-11-28
  • 打赏
  • 举报
回复
不建议用goto,我就不明白怎么这么多人觉得统一错误处理,跳出深层嵌套就一定要用goto,用setjmp把程序包装一遍不更显得有条理性吗?
加载更多回复(318)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧