"return" bez "return"

0

Witam.

Kod:

#include <iostream>

int f()
{
 static int x = x+2;
}

int main()
{
 if(f()!=f())
  std::cout << "true"; else
  std::cout << "false";
 return 0;
}

Na 32-bitowym Windowsie wynik to true podczas gdy np.na Ideone daje false.
Czy ten kod nie powinien zawsze zwracać false (jeżeli nie ma return, to chyba domyślnie przyjmowane jest 0, prawda?)?

2

jeżeli nie ma return, to chyba domyślnie przyjmowane jest 0, prawda?

W przypadku funkcji main, tak.

Przy każdej innej funkcji (6.6.3, punkt 2):
Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function.

0

w czym to kompilujesz? w młynku do kawy?
jestem zdziwiony, że jakikolwiek kompilator dopuszcza do wyjścia z funkcji bez return/innego jego odpowiednika. chociaż... w sumie Delphi też tak robi... zgroza.

0
ŁF napisał(a):

w czym to kompilujesz? w młynku do kawy?
jestem zdziwiony, że jakikolwiek kompilator dopuszcza do wyjścia z funkcji bez return/innego jego odpowiednika. chociaż... w sumie Delphi też tak robi... zgroza.

A co kompilator ma do tego? Wystarczy używać odpowiednich flag ostrzeżeń i zostaniemy ostrzeżeni.

Dlaczego miałby nie dopuszczać? Standard mówi o undefined behavior i to właśnie się dzieje - wszystko jest ok.

0

słuszna słuszność. jednak w porównaniu do c#, gdzie większość błędów wychodzi już na etapie kompilacji, wygląda to jak rozpięty rozporek

1 użytkowników online, w tym zalogowanych: 0, gości: 1