如何uglify或缩小C代码

use*_*224 8 c gcc minify

使用gcc我可以删除注释和不需要的空行,但我想减少文件的大小,是否有任何选项gcc或任何其他工具这样做

目前我喜欢这个

gcc -fpreprocessed -dD -E  -P source_code.c > source_code_comments_removed.c 
Run Code Online (Sandbox Code Playgroud)

这是场景假设这是我的source_code.c

#include <stdio.h>
main()
{ 
      // declar variable i
      int i=0;

      /* multiline comment
      for loop
      demo stuff
      */
      for(i=1; i<=5; i++)
      {
            // just print something
            printf("Hello %d \n",i);
      }

}
Run Code Online (Sandbox Code Playgroud)

我想像这样缩小,删除注释和空白行

#include <stdio.h>
main(){int i=0;for(i=1; i<=5; i++){printf("Hello %d \n",i);}}
Run Code Online (Sandbox Code Playgroud)

注意:我在Linux上请不要建议任何基于Windows的解决方案

ser*_*gej 11

sed -rb 's/ {6}//g' main.c |
sed -rb 's/\/\/.*$//g' |
tr -d '\n' |
sed -rb 's/\/\*.*\*\///g' |
sed -rb 's/(#include.*>)/\1\n/g'
Run Code Online (Sandbox Code Playgroud)

会给你:

#include <stdio.h>
main(){int i=0;for(i=1; i<=5; i++){printf("Hello %d \n",i);}}
Run Code Online (Sandbox Code Playgroud)

但是,正如评论中所述,这没有多大意义,也不会减少编译对象文件的大小!

  • 但我想这是针对此类代码的。您需要添加许多其他内容,例如#define 或其他指令 (2认同)
  • 并非所有分布式 C 代码都经过编译。例如,OpenCL 程序从文件或字符串读取 C 代码,并依赖 JIT 编译器来实现可移植性。 (2认同)
  • 完全缩小会更加复杂 - 删除注释,删除非换行符空格(但不在字符串内),删除换行符(但如果行上的第一个字符是“#”,并且不要忘记正确处理反斜杠/延续,则不会);然后减少符号名称(例如将“foo”替换为“f”);然后开始做困难的事情(比如将 `int i = 0; for(i=1...` 替换为 `for(int i=1...`)。需要做很多工作。 (2认同)