I am working on a multiplatform project, and some platforms have disabled features, and in the interface for those features, a common thing I do is something like this:
bool Foo::bar() const {
// disabled
abort();
}
GCC/LLVM do not require that non-void functions return values (they just give a warning), and in this case, where I call abort()
, they are smart enough to not even give a warning (since the function will never return anyway).
Is there a way (compile flag?) to make Visual C++ 2010 behave the same way, so I don't keep breaking the Windows build? I know I could always return the value after the abort, but when working on the other platforms I usually forget about that, and the behavior of not giving an error seems more appropriate.
In general, the Visual C++ compilers allow you to annotate a function with __declspec(noreturn)
to indicate that the function will never return. This helps the compiler realize that any code after a call to such a function is unreachable.
The problem you're hitting here is covered in this SO question. To make a longer story short, abort()
doesn't have this annotation in the Visual C++ runtime headers.
As you want to disable the error add /w34716
as compile flag (assuming you are using warning level 3 or higher) - now only a warning is issued (if the warning level is 3 or higher). You could also disable the warning (/wd4716
), but that is probably no good idea - depending on the number of warnings due to this behaviour.
__declspec(noreturn)
should have this effect in MSVC++ compilers. I would expect standard abort
to be declared as __declspec(noreturn)
. But since compiler generates errors in your example, then it probably isn't declared that way. I would suggest that you check the declaration of abort
. If it has no __declspec(noreturn)
in it, you should add it somehow.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With