Kommentare in einer C-Datei entfernen

Kommentare in einer C-Datei entfernen

Ich versuche, Kommentare aus einer Datei zu entfernen, die in jedem beliebigen Teil einer Zeile stehen und sich über mehrere Zeilen erstrecken können.

 struct my_struct{
  field1;
  field2; /** comment 1
  */ field3;
  /* comment 2 */
 } struct_name;

Ich benötige

struct my_struct{
  field1;
  field2; 
  field3;
 } struct_name;

Ich habe versucht,

grep -o '[^/*]*[^*/]' 

um jeglichen Text zwischen den passenden /* und */ zu entfernen, aber es werden die Kommentarsymbole entfernt, nicht aber der Text dazwischen. Was ist der richtige Weg? Wenn es einen anderen Weg mit „sed“ gibt, wäre es auch gut, diesen zu kennen.

Antwort1

Sie können dies tun mit einemC-Compiler::

gcc -fpreprocessed -dD -E -P file.c

überprüfenman gcc

Antwort2

/*Wenn Sie lediglich alles zwischen und entfernen */und alle Eigenheiten der Sprache C wie //-Kommentare im C99-Stil, zitierte Zeichenfolgen und Backslash-Escapes von Zeilenumbrüchen ignorieren möchten, sollte ein einfacher Perl-Regex ausreichen:

perl -0777 -pe 's,/\*.*?\*/,,gs' inputfile

verwandte Informationen