问题
想去除C语言里面的所有注释,包括 /**/ 和 // ,网上找的方法一般是正则表达式或者自己写字符串匹配去除,但是那些只能应对简单的情况,对于工程里面很多复杂的C代码,例如遇到printf("/* hello world */")等这种特殊情况往往会出错,所以需要采用一种绝对不会出错的方法
解决方法
我们采用gcc的预处理,编译C代码的第一步是预处理,一般默认是删除注释,宏展开以及把头文件的内容放在代码里。
常用命令是
gcc -E test.c -o test.i
现在我们的目标是只去除注释,采用命令
gcc -fpreprocessed -dD -E test.c
这个命令执行完会把去除注释后的代码输出到屏幕上,可以采用重定向的方式写到文件里
需要注意的是去除注释后的内容有一点瑕疵,里面会多出来一些类似于
# 数字 "test.c"
所以第二步就是把这些多出来的字符串去掉
这些字符串的特征就是# 开头,第二列是数字,第三列是引号包括的文件名,删除掉就得到了纯代码文本