2008-12-01 27 views
5

En C el siguiente horror es válida:¿C++ permite tipos de devolución por defecto para las funciones?

myFunc() 
{ 
    return 42; // return type defaults to int. 
} 

Pero, ¿qué hay en C++? No puedo encontrar una referencia a él de cualquier manera ...

Mi compilador (Codegear C++ Builder 2007) Actualmente se acepta sin previo aviso, pero he tenido comentarios que este es un error en C++.

+0

¿Qué compilador es ese? Nunca he encontrado uno que lo haya aceptado. – jalf

+0

CG2007 - agregado en la pregunta. – Roddy

Respuesta

16

Es mal formados en C++. Lo que significa que no se compila con un compilador estándar conforme. El párrafo 7.1.5/4 en el Anexo C de la Norma explica el cambio "Prohibición implícita int".

+0

Por ejemplo, si compila con g ++, asegúrese de tener las banderas '-W -Wall' para tener la advertencia, o' -pedantic' para tenerlo como un error. –

+0

estás caminando enciclopedia de C/C++ estándar :) – Ilya

+1

Ilya, ojalá lo fuera. Solo tengo una copia de él, jeje :) –

8

Los tipos de devolución implícita son válidos en C89, pero muchos compiladores lo advierten.

No son válidos en C++, ni en C99.

2

Esto no es legal C++, pero algunos compiladores lo aceptarán silenciosamente o con un diagnóstico.

4

Por lo tanto, definitivamente está "mal formado" C++, pero parece que muchos compiladores lo aceptan con una advertencia en el mejor de los casos.

  • Codegear C++ Builder 2007: No error o advertencia en absoluto
  • G ++: Requiere -W -Wall para generar advertencia, o -pedantic para generar error (Piotr)
  • MSVC 8: produce una error (tfinniga)
  • otros ...?

¡Agregue a/corregir esta lista!

1

Según publicado, está mal formado. MSVC 8 produce el siguiente error:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
Cuestiones relacionadas