the c programing language 1-23 删除注释
来源:互联网 发布:淘宝售前和售后哪个累 编辑:程序博客网 时间:2024/06/05 20:05
/* * K&R2 1-23 * Author: Donmmi * 程序说明: * 代码核心: * 摘自中文版书参考手册A.2.2注释一节 * 注释的定义:注释以/和*开始,以*和/结束(//代码也加上了)。 * 注释不能够嵌套,也不能够出现在字符串字面值或字符字面值中。 * 程序用单引号、双引号标记字符字面值和字符串的起始和结束。还标记转义字符。 * 被转义的或者在字符串中的单引号、双引号属于正常字符,不作为字符串、字符字面值的起始和结束标志。 * 宏中包含奇数个双引号或单引号没有考虑 */#include <stdio.h>#define IN 1#define OUT 0#define TRUE 1#define FALSE 0/* 设置debug标志,用来调试程序,会输出进入单引号或双引号或注释后标志的值,还输出转义的字符 */int debug = FALSE; int main(void) { int c, escpc; /* escpc变量用来保存被转义的字符 */ /* escpflag标记转义字符, cmtflag标记注释, strflag标记字符串, cnstflag标记字面量 */ int escpflag, cmtflag, strflag, cnstflag; int nextc, cmtendc; /* nextc保存字符用来判断注释结束字符,cmtendc保存注释结尾字符 */ cmtflag = strflag = cnstflag = OUT; escpflag = FALSE; while ((c = getchar()) != EOF) { if (cmtflag == OUT) { /* 不是常量字符并且不是字符串中的'/'为注释起始标志 */ if (c == '/' && strflag == OUT && cnstflag == OUT) { if (c == '/') { cmtflag = IN; /* 设置在注释中 */ if (debug == TRUE) printf("[cmtflag:%d]", cmtflag); } nextc = getchar(); if (nextc == '/') cmtendc = '\n'; /* 设置注释结束字符,/后面是/,下个换行符表示注释结束 */ else if (nextc == '*') cmtendc = '/'; /* 如果/后面是*,下个/表示注释结束 */ } else { if (strflag == OUT && c == '\'') { /* 标记字面量 */ if (cnstflag == OUT) cnstflag = IN; else cnstflag = OUT; } if (cnstflag == OUT && strflag == OUT && c == '"') /* 标记字符串 */ strflag = IN; else if (strflag == IN && c == '"') strflag = OUT; if ((cnstflag == IN || strflag == IN) && c == '\\') { /* 标记转义符 */ escpc = getchar(); /* 获取下个字符并且保存 */ escpflag = TRUE; } putchar(c); if (debug == TRUE) { if (c == '"') printf("[cnstflag:%d strflag:%d]", cnstflag, strflag); } if (escpflag == TRUE) { if (debug == TRUE) printf("[escaped:%c]", escpc); else putchar(escpc); escpflag = FALSE; } } } else if (cmtendc == c) /* 判断是否到达注释结尾 */ cmtflag = OUT; } return 0;}
0 0
- the c programing language 1-23 删除注释
- the c programing language 练习1-17
- The C programing language 第一章
- The C programing language K&R 笔记
- The C programing language chapter 6 : struct
- Day 1 :start C Language Programing course
- 重读The C Programing Language的一些小纠结。
- The C programing language 第二章课后题
- The C programing language 第三章课后题
- The C programing language 第四章,课后题
- the c programing language chap5 : pointer and array
- The C programing language chapter 7 : Input and Output
- The C++ Programing Language读书笔记之(1):Advise
- the c programing language 练习1-21 将空格字符替换为最少数量的制表符和空格
- the c programing language 1-22 较长输入行折成短些的多行,非缓冲方式实现
- Gotchas in the C++ programing language
- c++程序设计语言(the c++ programing language) 目录
- The C Programming Language 练习题1-23
- centos7安装JDK1.7+tomcat7+mysql5.5
- 使用logging模块来记录异常
- 通信系列2: 深入浅出SIP协议
- IOS行货自动打包
- Tyvj_P1001 第K极值
- the c programing language 1-23 删除注释
- hdu 2845 最长不连续子序列
- 持续集成
- Maya脚本学习——团队截屏工具
- Tyvj_P1002 谁拿了最多奖学金
- spring中的aop初步认识
- top和margin-top等的区别
- Chapter7. Sorting algorithm summary C++/Python 排序算法总结
- 创建并缩放到 globe的 bookmark