(9 jawaban)
Tutup 4 tahun yang lalu.
Saya mencoba menulis skrip yang akan menghapus semua komentar dan semua yang ada di antara file C di direktori saya saat ini. Saya telah menggunakan sed
, dan inilah yang saya miliki sejauh ini:
sed -i '/ * [^()] */d' *.c
Ini berfungsi saat komentar berada di baris yang sama dengan tanda bintang atau garis miring terbalik.
Namun itu tidak berfungsi ketika ada baris komentar tanpa garis miring atau tanda bintang.
Saya tahu sed berjalan baris demi baris, saya hanya tidak tahu bagaimana mengatakannya untuk terus menghapus sampai melihat */
.
Jawaban yang Diterima:
Menghapus komentar tanpa menggunakan C-preprocessor sebenarnya bukanlah hal yang sepele. Saya pernah menemukan sesuatu seperti ini:
perl -0777 -pe'
s{
/*.*?*/
| //[^n]*
| (
"(?:\.|.)*?"
| '''(?:\.)?.*?'''
| ??'''
| .[^'''"/]*
)
}{if ($1eq""){" "}else{$1}}exsg'
Yang harus mencakup sebagian besar kasus seperti hal-hal seperti:
printf("%c%c%s", '"' /* d-quote */, ''', "/*" "*/");
Lihat diskusi menarik di sana untuk lebih jelasnya.