Cuando compila un archivo con extensión .cpp
, se compila como código C++ de forma predeterminada. En el lenguaje C++, el requisito de declaraciones de funciones es un requisito obligatorio y difícil. No tiene sentido hacer una opción -Wmissing-prototypes
para C++.
En otras palabras, no se puede "activar esta advertencia " en C++ porque "falta prototipo" es siempre un error en C++.
P.S. Como nota al margen: la noción de prototipo es específica para el lenguaje C solamente. No hay "prototipos" en C++.
En lenguaje C una función declaración puede ser un prototipo o no un prototipo, de ahí la necesidad de un término adicional para distinguir unas de otras. En C++, las declaraciones de funciones son siempre "prototipos" (desde el punto de vista C), por lo que en C++ simplemente no hay necesidad de este término adicional. En C++, las declaraciones de funciones son simplemente declaraciones de función . Eso solo lo dice todo.
EDIT: Después de leer su comentario llegué a la conclusión de que debe haber entendido mal el significado y el propósito de la opción -Wmissing-prototypes
y la alerta correspondiente. Tenga en cuenta que esta opción no verificará si ha incluido prototipos de todas sus funciones en algún archivo de cabecera. No hay ninguna opción para hacer eso en GCC, independientemente de si está usando C o C++.
El propósito de -Wmissing-prototypes
es diferente.Esta opción solo funciona cuando llama al una función que no tiene un prototipo visible en el punto de la llamada. En lenguaje C, hacer esto es legal, pero si desea una advertencia en este caso, use la opción -Wmissing-prototypes
. En lenguaje C++ llamar a una función que no tiene declaración visible ("prototipo") en el punto de la llamada siempre es un error inmediato, por lo que los compiladores C++ no necesitan ninguna opción como -Wmissing-prototypes
.
En otras palabras, si ha definido alguna función en algún archivo de implementación, pero se olvidó de incluir un prototipo para esta función en algún archivo de cabecera, que no recibirá advertencias del compilador hasta que realmente intenta llamada que función. No importa si su código es C o C++, si usa -Wmissing-prototypes
o no ... Hasta que intente llamar a la función, no habrá advertencias.
Pero una vez que intenta llamar a una función sin un prototipo, el compilador C informará una advertencia (si usó -Wmissing-prototypes
) y el compilador C++ siempre informará de un error.
No estoy seguro de cómo ese archivo foo.cpp debería arrojar una advertencia de "no prototipo". La definición de función que se muestra * does * incluye un prototipo. –
Puede ser, en lugar de solo preguntar cómo activar las advertencias que parecen no tener sentido en C++ (como dice la advertencia), publica algún ejemplo de qué tipo de error es que quieres detectar que el compilador de C++ ya no funciona t catch ("asegurando que' const char * 'se maneje correctamente")? – UncleBens
¿Dónde ves un prototipo? El código de ejemplo no incluye un archivo de encabezado, y no tiene una línea de prototipo separada en el archivo foo.cpp. – Eric