Exercise 1.23 - Remove comments from a C program#
Question#
Write a program to remove all comments from a C program. Don’t forget to handle quoted strings and character constants properly. C comments don’t nest.
Solution#
/* Exercise 1.23
*
* Program to remove comments from a C Program.
*
* Program should echo quotes and character constants properly
* C comments do not nest
*
*/
#include<stdio.h>
void rcomment(int c);
void incomment(void);
void echo_quote(int c);
int main(void)
{
int c,d;
printf(" To Check /* Quoted String */ \n");
while((c=getchar())!=EOF)
rcomment(c);
return 0;
}
void rcomment(int c)
{
int d;
if( c == '/')
{
if((d=getchar())=='*')
incomment();
else if( d == '/')
{
putchar(c);
rcomment(d);
}
else
{
putchar(c);
putchar(d);
}
}
else if( c == '\''|| c == '"')
echo_quote(c);
else
putchar(c);
}
void incomment()
{
int c,d;
c = getchar();
d = getchar();
while(c!='*' || d !='/')
{
c =d;
d = getchar();
}
}
void echo_quote(int c)
{
int d;
putchar(c);
while((d=getchar())!=c)
{
putchar(d);
if(d == '\\')
putchar(getchar());
}
putchar(d);
}
Explanation#
If two subsequent characters start with / and *, we say we are in-comment, If we find two characters which are / and /, we will print the first character and start treating the second / as the possible start of comment. In the same manner, if we encouter a single quote or a double quote character, then we understand we are inside a quoted string, so we putchar everything before we find the matching character again. Within a quoted string, if we encouter a special character, then we try to read them literally as two characters and print them.
If / is followed by any other character, we simply print them.