Altera todo o caractere // para comentar em c ++ para os caracteres de comentário c / * * / [duplicado]

1

Estou tentando alterar alguns caracteres em um arquivo, como este:

//this is a thest of how this works
#include <stdio.h>

int main()
{
// declare some variables here
int num1 = 4;
float num2 = 3.5;

// print the result 
printf("The result is %f\n", num1 * num2); // this does it

/* does it work? */
return 0;
}

Eu quero mudar todo o caractere // para comentar em c ++ para os caracteres de comentário c / * * / fazendo com que o arquivo fique assim:

/*  This is a test of how this works */
#include <stdio.h>

/*this is a thest of how this works */
#include <stdio.h>

int main()
{
/* declare some variables here */
int num1 = 4;
float num2 = 3.5;

/* print the result  */
printf("The result is %f\n", num1 * num2); /* this does it */

/* does it work? */ */
return 0;
}

Eu não sei muito bash em tudo e é isso que eu vim com sed 's ///// * * // g' myprog.c não funcionou, o que estou fazendo de errado ou o que preciso fazer para fazer essas mudanças? Estou tentando fazer um comando de uma linha

    
por Jeff Schaller 08.10.2018 / 16:24

2 respostas

4

sed 's|//\(.*\)|/* */|'

Mas cuidado, há vários casos em que não faria a coisa certa, como em:

char *url = "http://host/";
/*
   comment with // nested C++-syle comment
 */
// comment \
continued on the next line

Para contabilizar esses casos e mais, você pode adaptar o código em outros Q & A como:

perl -0777 -pe '
  BEGIN{
    $bs=qr{(?:\|\?\?/)};
    $lc=qr{(?:$bs\n|$bs\r\n?)}
  }
  s{
    /$lc*\*.*?\*$lc*/
    | /$lc*/((?:$lc|[^\r\n])*)
    | "(?:$bs$lc*.|.)*?"
    | '\''$lc*(?:$bs$lc*(?:\?\?.|.))?(?:\?\?.|.)*?'\''
    | \?\?'\''
    | .[^'\''"/?]*
  }{defined($1)?"/*$1 */":$&}exsg'

Qual no exemplo acima dá:

char *url = "http://host/";
/*
   comment with // nested C++-syle comment
 */
/* comment \
continued on the next line */
    
por 08.10.2018 / 16:57
1

Você só precisa disso:

 's+//+/*+g' file | sed 's+\/\*.*+& */+'


/*this is a thest of how this works */
#include <stdio.h>

int main()
{
/* declare some variables here */
int num1 = 4;
float num2 = 3.5;

/* print the result  */
printf("The result is %f\n", num1 * num2); /* this does it */

/* does it work? */ */
return 0;
}
    
por 08.10.2018 / 16:28

Tags