c++ - try\catch block in the main() function without brackets -
visual studio 2015; c++ language.
i remember read somewhere entry point (i.e. main method) possible write this:
#include <iostream> using namespace std;  int main() try{   return 0; // here... } catch (...){   cout << "i 'catch'..." << endl; // row wasn't called!   return 1; // oops... next `f10` key pressing jumps "try"    // block row! } i.e. @ case try\catch block located not in brackets:
int main() { // start bracket   try{     return 0;   }   catch (...){     return 1;   } } // end bracket both cases compiled , work too, but... in first variant, when step step pressing f10 key after try block catch block also. second variant of code haven't such behaviour.
why happen?
your construction function-try-block , defined in drafs n4296 c++ 11 specification @ 8.4 function definitions [dcl.fct.def.general] with:
function definitions have form
- function-definition:
- attribute-specifier-seqopt decl-specifier-seqopt declarator virt-specifier-seqopt function-body
- function-body:
- ctor-initializeropt compound-statement
- function-try-block
- = default ;
- = delete ;
and later in 15 exception handling [except] with:
function-try-block:
- try ctor-initializeropt compound-statement handler-seq
examples suggest normal usage function-try-block should ctor, valid normal function (and main syntactically mere function)
it valid , works normally, meaning catch block evaluated if exception occurs in ctor-initializeropt on in compound-statement. can confirm in code adding prints in blocks or testing return value.
in unix system
foo echo $? should echo 0
in windows system under cmd.exe windows
foo.exe if errorlevel 1 echo "catch block" should not output catch block
if debugger lets execute instructions in catch block... not c++ 11 conformant!
but known when exiting block, msvc debugger puts cursor on last line of block, assume is happening here because last line of function-try-block is last line of catch.
Comments
Post a Comment