В Linux для этой задачи можно использовать сам C++ компилятор из состава gcc.
Команда будет выглядеть так:
cat file.cpp | cpp -E -undef -fpreprocessed -dDI | tail -n+2
Дополнительная команды tail удаляет первую строку из вывода, так как ее добавляет cpp в процессе очистки исходного кода *.cpp-файла. Обычно в этой строке написано откуда получен входной поток, и эта строка выглядит как # 1 "<stdin>", именно она и удаляется.
В результате получается чистый исходный файл, в котором нет ни одного комментария, причем удаляются и однострочные комментарии, написанные синтаксисом //, и многострочные комментарии, которые имеют синтаксис /* ... */.