aboutsummaryrefslogtreecommitdiff
path: root/1-23_decomment.c
diff options
context:
space:
mode:
Diffstat (limited to '1-23_decomment.c')
-rw-r--r--1-23_decomment.c84
1 files changed, 0 insertions, 84 deletions
diff --git a/1-23_decomment.c b/1-23_decomment.c
deleted file mode 100644
index 63193cd..0000000
--- a/1-23_decomment.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <stdio.h>
-
-/* The C Programming Language: 2nd Edition
- * Exercise 1-23:
- * "Write a program to remove all comments from a C program. Don't forget to
- * handle quoted strings and character constants properly. C comments do not
- * nest."
- *
- * I'm not sure why the instructions tell the reader to account for quoted
- * strings and character constants. Comments always begin with either // or
- * /*, so that sets the boundary of state.
- *
- * The states for this program are IN_MULTI for a multi-line comment,
- * IN_SINGLE for a single line comment, and OUT for being outside a comment.
- * These three states are all I need to determine whether I should output the
- * contents of the C file or not. Characters are only output when the state is
- * OUT, and there are conditions for getting into and out of comment state.
- *
- * I don't know of any other way to do this without invoking some higher-level
- * libraries.
- */
-
-#define IN_MULTI 1
-#define IN_SINGLE 2
-#define OUT 0
-
-char c, p;
-int status;
-
-int main() {
- // Treat input like a stream, since that's all the K&R has explained so far.
- while ((c = getchar()) != EOF) {
-
- // Check for the ways to open a comment, and set state accordingly
- if (c == '/' && status == OUT) {
- // Look ahead and store the character that's returned
- p = getchar();
-
- if (p == '*') {
- status = IN_MULTI;
- } else if (p == '/') {
- status = IN_SINGLE;
- } else {
- putchar(c);
- putchar(p);
- continue;
- }
- }
-
- // Ignore everything in a single line comment until a newline
- if (status == IN_SINGLE) {
-
- if (c == '\n') {
- putchar(c);
- status = OUT;
- continue;
- }
-
- }
-
- // Ignore everything until you reach the end of a multi comment
- if (status == IN_MULTI && c == '*') {
- p = getchar();
-
- if (p == '/') {
- status = OUT;
- continue;
- }
-
- }
-
- // Output everything when we're not in a comment!
- if (status == OUT) {
- putchar(c);
- }
-
- }
-
- /* derpsauce
- *
- *
- * Testing comment for the lulz. lolololol
- */
-}