0 out of 1 rated this helpful - Rate this topic

noreturn

This __declspec attribute tells the compiler that a function does not return. As a consequence, the compiler knows that the code following a call to a __declspec(noreturn) function is unreachable.

If the compiler finds a function with a control path that does not return a value, it generates a warning (C4715) or error message (C2202). If the control path cannot be reached due to a function that never returns, you can use __declspec(noreturn) to prevent this warning or error.

Note Note

Adding __declspec(noreturn) to a function that is expected to return can result in undefined behavior.

In the following sample,the else clause does not contain a return statement. Declaring fatal as __declspec(noreturn) avoids an error or warning message.

// noreturn2.cpp
__declspec(noreturn) extern void fatal () {}

int main() {
   if(1)
     return 1;
   else if(0)
     return 0;
   else
     fatal();
}
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Poor choice of function in the example
As the standard defined behavior for the main function is to add "return 0" implicitly when reaching an end of it, removing the modifier will have no effect here. However for any other function it will be certainly recommended.