Aquí es donde obtengo el error, también en general, me está dando una advertencia de declaración implícita de esta función de golpe. Tampoco estoy seguro de por qué. Editar: acabo de enterarme de que C no puede tener argumentos predeterminados. ¿Hay alguna forma de evitar esto?

void bump(char*s, char c = 'o')
 {
   s.push_back(c);
 }

int main()
{
 char *s = "foo";
 printf("%s\n",s);

 bump(&s, '\0'); 
 printf("%s\n",s);

 bump(&s, 'x');
 printf("%s\n",s);

 return 0;
}
-2
K Okla 30 ene. 2018 a las 08:46

1 respuesta

La mejor respuesta

Me acabo de enterar de que C no puede tener argumentos predeterminados. ¿Hay alguna forma de evitar esto?

Realmente no. Consulta la respuesta de Sourav Gosh (que ofrece consejos útiles). Lo que podría hacer es definir una función diferente (con otro , único, nombre), p. Ej.

void bump_o(char*s) { bump(s, 'o'); }

E incluso podría definir esa función como static inline en algún archivo de encabezado.

También puede usar una macro:

#define BUMP_O(S) bump((S), 'o')

Pero eso es generalmente de mal gusto.

Tenga en cuenta que C y C ++ son lenguajes diferentes . El código que nos muestra no es correcto C (consulte n1570).

Recomiendo compilar su código con todas las advertencias y la información de depuración (por ejemplo, gcc -Wall -Wextra -g con GCC), y usar un depurador (por ejemplo, gdb)

0
Basile Starynkevitch 30 ene. 2018 a las 11:16