Задача «Удаление комментариев из программы на C»

Реализовать программу, удаляющую комментарии из исходного кода программы на C.

Имя файла с исходным текстом и имя выходного файла передаются как аргументы командной строки. Пример запуска:

decommenter file.c out.c

Должны обрабатываться комментарии в стиле /* ... */ и // comment.

Если исходный текст является некорректным (например, комментарий /* не закрыт), то выходной файл создаваться не должен, вместо этого должно выводиться сообщение об ошибке.

Вариант усложнения: не должны удаляться комментарии внутри макроопределений #define.