c语言取消注释,实现去除c语言注释的小工具

去除C代码中的注释,

1. 单行注释//;

2. 多行注释/**/;

3. 单行注释以“\”结尾则下一行也为注释;

4. 字符串中的注释不处理。

说是C语言,但其实所有C语系的都可以,比如Java。

小工具:去除C语言注释

复制代码 代码如下:

#include

int main(int argc, char* argv[]) {

enum {

literal,

single,

multiple,

string

} mode = literal;

char last = 0, current;

while ((current = getchar()) != EOF) {

switch (mode) {

case single: {

if (last != '\\' && (current == '\n' || current == '\r')) {

putchar(current);

current = 0;

mode = literal;

}

} break;

case multiple: {

if (last == '*' && current == '/') {

current = 0;

mode = literal;

}

} break;

case string: {

if (last == '\\') {

putchar(last);

putchar(current);

} else if (current != '\\') {

putchar(current);

if (current == '"') {

mode = literal;

}

}

} break;

default: {

if (last == '/') {

if (current == '/') {

mode = single;

} else if (current == '*') {

mode = multiple;

} else {

putchar(last);

putchar(current);

}

} else if (current != '/') {

putchar(current);

if (current == '"') {

mode = string;

}

}

} break;

}

last = current;

}

return 0;

}

测试代码

复制代码 代码如下:

#include

#include

int main (int argc, char *argv[])

{

// not show\

not show\

not show

// not show

/* not show */

int is; // not show

int/* not show */ ms; /* not show */

double ds; // not show\

not show\

not show

double dm; /* ...

not show

not show */ float fs; /**

* now show

*/

float/**/ fm;

char cs[] = "aaa // /***/";

char cm1[] = /* not show */"hello*/";

char cm2[] = "/*redraiment"/* not show */;

/* printf("/"); */

return EXIT_SUCCESS;

}

处理后的代码

复制代码 代码如下:

#include

#include

int main (int argc, char *argv[])

{

int is;

int ms;

double ds;

double dm;  float fs;

float fm;

char cs[] = "aaa // /***/";

char cm1[] = "hello*/";

char cm2[] = "/*redraiment";

return EXIT_SUCCESS;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值