Board logo

标题: [其他] 让命令行工具体积尽量小 [打印本页]

作者: plp626    时间: 2009-5-30 21:18     标题: 让命令行工具体积尽量小

在论坛下了些"命令行工具",体积动辄200K,很是怕人,大家看看sed.exe 80多K的体积功能确异常强大,那为什么我们写的东西功能单一可是体积却有点吓人,我想这源于我们选取的编译器,

我也是初学编程,命令行刚刚开始,仅把自己知道的和大家分享下,
写命令行工具若用VC6.0...,我试了下用C++,cout一个"hello world!",就200K,这是因为我们include<iostream.h>,这个被include进去了体积当然不小,为了体积小我们最好的方法就是尽量上用include,所以我们还是用C的printf,除了stdio.h其他的能不用尽量不用,编译器首推gcc,windous下用gcc推荐大家下载code::block ,安装后把gcc所在目录path进去就可以在命令行下用gcc编译了,
一般情况下,我们写一个简单的字符串操作的命令行工具,用gcc -s your.c -o your.exe后体积在6K以内,如果稍复杂的也就10多K,

前几天看到if exist会员的留言,问我递归三行写个排列组合批处理,我是没这个功力,便用C写了个命令行下的排列产生器(递归算法, gcc后6K),大家根据下面源代码的算法试着用P写下,不说3行,6行能写完也足以说明你对p命令的用法之精通到化境

  1. #include <stdio.h>
  2. /*
  3. * 排列产生器 V1.0 2009-5-27
  4. * plp626@163.com
  5. */
  6. void perm(char s[], int k, int n)
  7. {
  8.     char t;
  9.     int i;
  10.     if (k==n) {
  11.         for ( i=0; i<=n; i++) printf("%c ",s);
  12.         printf("\n");
  13.     } else
  14.         for (i=k; i<=n; i++) {
  15.           if (k != i) {t=s[k]; s[k]=s; s=t;}
  16.             perm(arr,k+1,n);
  17.           if (k != i) {t=s[k]; s[k]=s; s=t;}
  18.         
  19.     }
  20. }
  21. int main (int argc, char *argv[])
  22. {
  23.     if (argc==2) perm(argv[1],0,strlen(argv[1])-1);
  24.     else printf("排列产生器 V1.0  zjvwei@qq.com|09-5-27" target="_blank">{zjvwei@qq.com|09-5-27} \n"
  25.                 "Usage:\n"
  26.                 "      perm [\"string\"]\n"
  27.                );
  28.     return 0;
  29. }
复制代码



//题外话,sed.exe 80多K的体积用上面的方法编译下来是不可思忆,那么还有什么能让你编译的工具体积尽量小,---------------难道是汇编?
我对汇编还没入门,只会些debug命令再一些简单的显示字符串,
今天再网上下了个masm32,大家搜索下“win32汇编”有还写教程,我想这个写出来的东西体积应该。。。有对次有研究的不妨和大家分享下

perm.exe下载点此:

[ 本帖最后由 plp626 于 2009-5-30 21:30 编辑 ]
作者: plp626    时间: 2009-5-30 21:20

论坛的 代码确实有问题啊。。。
作者: Batcher    时间: 2009-5-30 21:28

Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html

BatHome论坛使用FAQ
http://bbs.bathome.net/thread-3473-1-1.html

[ 本帖最后由 Batcher 于 2009-5-30 21:57 编辑 ]
作者: plp626    时间: 2009-5-30 21:31

原帖由 Batcher 于 2009-5-30 21:28 发表
Q: 如何用code把代码扩起来?
    int i; ...


该罚!
作者: wxcute    时间: 2009-5-31 13:42

“尽量上用include”,还是尽量 “不用” ?
根据上下文意思,我想应该是“不用” 罢。

要学高级语言,一下子转不过弯来。想想
作者: plp626    时间: 2009-5-31 14:42

原帖由 wxcute 于 2009-5-31 13:42 发表
“尽量上用include”,还是尽量 “不用” ?
根据上下文意思,我想应该是“不用” 罢。

要学高级语言,一下子转不过弯来。想想


不用,少写了个字,准确表达是尽量少include 库里的头文件

根据自己需要写单一功能的函数,用库里的一定有多余的。。。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2