Есть лот угловых вариантов для рассмотрения. Stray //
s может появляться в строковых литералах, символьных константах (да, действительно) и в комментариях /* ... */
и //
. Сращивание строк с конечными символами \
может действительно испортить ситуацию, а \
можно представить как триграф ??/
. Я серьезно сомневаюсь, что я думал обо всех них.
Если вам нужна 100% надежная замена, вам придется воспроизвести (или украсть!) Часть препроцессора компилятора C.
Если вам не нужна 100% надежность, вы можете подумать о том, чтобы просто сделать простую замену, затем сравнить входные данные с выходными данными и вручную устранить любые проблемы. (Обычно для кода, скорее всего, его не будет, но вам нужно будет проверить.) Практичность этого подхода частично зависит от того, сколько кода вам нужно перевести.
В большинстве угловых случаев код не компилируется:
printf("Hello // world\n");
->
print("Hello /* world\n"); */
Вы также можете подумать, действительно ли это необходимо. Большинство компиляторов C89 / C90 поддерживают //
комментарии, по крайней мере, по желанию.