-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Wednesday 14 November 2001 02:32, Martin v. Loewis wrote: > > > A similar algorithm does not exist for reliably determining that a > > > function falls off its end. > > > > What if there is no return statement in a function with a non-void return > > type? > > Like this? > > int foo(){ > exit(3); > } > > Has no return statement, but still doesn't invoke undefined behavior.
Not exactly. Here is what I'm talking about: #include <iostream> int f(int x) { int f; f = 2; for (int i=1; i<=4; i++) { f = f + i * x; } } int main() { cout << "f(3)=" << f(3) << endl; } Are you a g++ author? This illustrates what I'm exactly talking about. IIRC some other compilers will complain about the f function not returning any value here. (Have to check, though) The problem with the above code is that g++ will compile the code as if it is normal, and when you run it, it will just spew out a random result. g++ compiles this code without giving any warnings by default. However, as you can see the f(..) function lacks a return statement. It's also evident that there cannot be any exit or throw out of the function. If there isn't a single control path that contains a return statement, you can't expect the function to ever return anything, it is a programming error. exit or throw would be employed in a function only in the case of exceptions, so if a function has a non void return type but only serves to exit or throw exception (like your example) that is also precisely a programming error. It might be valid in C++ specification (is it?), but the compiler should warn about it. I would think that the compiler should give a warning by default in this case, otherwise it is misleading to the programmer who is accustomed to the "typesafety" of the language. In other words, "-Wreturn-type" does not seem to solve this problem. The compiler would have to detect whether there is no path that returns a value rather than detecting whether there is a path that does not return a value to give a useful warning message. I'm reopening this bug. Set the severity to wishlist if you find appropriate. Thanks, - -- Eray Ozkural (exa) <[EMAIL PROTECTED]> Comp. Sci. Dept., Bilkent University, Ankara www: http://www.cs.bilkent.edu.tr/~erayo GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F 7C07 AE16 874D 539C -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQE78mJwfAeuFodNU5wRAlUmAJwPXjZMt+7aZpBrGJHSG5tbQCSnAwCbBiux Z0TlgSFNDuiU+XdGXJ5mKe8= =U9bh -----END PGP SIGNATURE-----