我想知道是否有办法加快我和朋友一起制作的这个简单的.c程序。有什么东西我可以改变来清理它吗?也许可以添加一个弹出窗口,说明已经处理了多少图像。谢谢!
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define DDS_MAGIC "DDS "
int ipos[10240];
int iposind=0;
int tfilelen;
char* TransBuf=NULL;
int main(int argc, char** argv){
int i,r;
FILE* sFile=NULL;
FILE* tFile=NULL;
char ifn[256];
char ofn[256];
char qc;
if (argc !=2){
printf("usage: %s filename\n",argv[0]);
return 0;
}
strcpy(ifn,argv[1]);
sFile=fopen(argv[1],"rb");
fseek(sFile,0,SEEK_END);
tfilelen=ftell(sFile);
fseek(sFile,0,SEEK_SET);
TransBuf=(char*)malloc(tfilelen);
for(i=0,r=0;r<tfilelen;){
/* read the file in */
i=fread(TransBuf+r,1,tfilelen-r,sFile);
if(i>0)r+=i;
}
qc=DDS_MAGIC[0];
for(i=0;i<tfilelen;i++){
if(TransBuf[i]!=qc)continue;
if(strncmp(DDS_MAGIC,TransBuf+i,4)==0){
ipos[iposind]=i;
iposind++;
}
}
ipos[iposind]=tfilelen;
for(i=0;i<iposind;i++){
char* s;
int l;
int j;
s=TransBuf+ipos[i];
l=ipos[i+1]-ipos[i];
if(l<4)continue; /* don't write out dds files with no data*/
/* write each dds segment to it's own file */
sprintf(ofn,"%s_%d.dds",ifn,i);
tFile=fopen(ofn,"w+b");
for(j=0,r=0;r<l;){
j=fwrite(s+j,1,l-r,tFile);
if(j>0)r+=j;
}
fclose(tFile);
system("pause");
}
printf("extracted %d files\n",i);
return 0;
}
答案 0 :(得分:1)
在编译代码时可以选择应用优化。
在命令行上,您可以执行:
x
其中,0, 1, 2, 3 or s
是-Wall
。
有关详情,请点击here。
此外,请使用-Wextra
和{{1}}编译器选项并将警告视为错误。例如,删除所有未使用的变量。