esp-idf/examples/cxx/exceptions/main/exception_example_main.cpp
Jakob Hasse 31edd48b43 C++: Moved all C++ examples to own folder
* moved C++ examples to a new cxx folder in
  examples
* added experimental C++ component
* added ESPException class to the C++ experimental
  component
* added test cases for ESPException and
  corresponding test macros
2020-02-18 12:48:57 +08:00

57 lines
1.3 KiB
C++

/* C++ exception handling example
This example code is in the Public Domain (or CC0 licensed, at your option.)
Unless required by applicable law or agreed to in writing, this
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
#include <iostream>
using std::cout;
using std::endl;
using std::runtime_error;
/* A simple class which may throw an exception from constructor */
class Throwing
{
public:
Throwing(int arg)
: m_arg(arg)
{
cout << "In constructor, arg=" << arg << endl;
if (arg == 0) {
throw runtime_error("Exception in constructor");
}
}
~Throwing()
{
cout << "In destructor, m_arg=" << m_arg << endl;
}
protected:
int m_arg;
};
/* Inside .cpp file, app_main function must be declared with C linkage */
extern "C" void app_main(void)
{
cout << "app_main starting" << endl;
try {
/* This will succeed */
Throwing obj1(42);
/* This will throw an exception */
Throwing obj2(0);
cout << "This will not be printed" << endl;
} catch (const runtime_error &e) {
cout << "Exception caught: " << e.what() << endl;
}
cout << "app_main done" << endl;
}