下面的代码比较复杂一些,请分段思考。
另外要联系思考:在""和''中间的双斜杠中第一个斜杠在"和'后面判断就跳过了,第二次是让case语句来处理,然而case的第一个if就是依靠前面是否已经探测到过"或',探测到了的话,要跳过。
还要考虑到非注释中的单引号''中间只能有一个/,否则C语句非法。
===============================================================================
/********************************************************
功能:去除C/C++中的注释
输入:指向C/C++程序代码的指针
来源:程序员面试宝典第45页
注意:①要考虑到""或' '中的//和/*,//和/*的嵌套关系。
②单引号、双引号中的//是两个字符,第一个字符在单引号的case语句中跳过了,
第二个字符则在case '/'中处理。
*********************************************************/
#include #include #include #include #include #include
void remove_comment(char *buf, size_t size)
{
char *p, *end, c; //p-动态移动的字符指针,end-指向文件末尾的字符指针,c-存储没一个p指向的字符
char *sq_start, *dq_start; //sq_start-单引号开始位置(single),dq_start-双引号开始(double)
char *lc_start, *bc_start; //lc_start-//的开始位置