2008-12-01 18 views
5

W C następujące horror jest ważny:Czy C++ zezwala na domyślne typy zwracania dla funkcji?

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

Ale co w C++? Nie mogę znaleźć odniesienie do niej albo sposób ...

Mój kompilator (CodeGear C++ Builder 2007) obecnie akceptuje je bez ostrzeżenia, ale miałem komentarze, że ten jest błąd w C++.

+0

Który to kompilator? Nigdy nie spotkałem kogoś, kto by to zaakceptował. – jalf

+0

CG2007 - dodano w pytaniu. – Roddy

Odpowiedz

16

Jest to źle sformułowany w C++. Oznacza to, że nie kompiluje się ze standardowym zgodnym kompilatorem. Paragraf 7.1.5/4 w załączniku C do normy wyjaśnia zmianę "Zakazywanie domniemanego int".

+0

Na przykład, jeśli kompilujesz z g ++, upewnij się, że flagi '-W -Wall' mają ostrzeżenie, lub' -pedantic' ma to jako błąd. –

+0

jesteś chodzącą encyklopedią standardu C/C++ :) – Ilya

+1

Ilya, chciałbym być. Po prostu mam jego kopię hehe :) –

8

Niejawne typy powrotu są poprawne w C89, ale wiele kompilatorów ostrzega o tym.

Nie są one poprawne w C++ ani w C99.

2

To nie jest legalne C++, ale niektóre kompilatory zaakceptują to w trybie cichym lub diagnostycznym.

4

Jest to z pewnością "źle sformułowany" C++, ale wygląda na to, że wiele kompilatorów akceptuje go w najlepszym razie z ostrzeżeniem.

  • CodeGear C++ Builder 2007: Nie ma błędu lub ostrzeżenia w ogóle
  • G ++: Wymaga -W -Wall generować ostrzeżenia lub -pedantic wygenerować błąd (Piotr)
  • MSVC 8: produkuje błąd (tfinniga)
  • inne ...?

Proszę dodać/poprawić tę listę!

1

Jak napisano, jest źle sformułowany. MSVC 8 podaje następujący błąd:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
Powiązane problemy