mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-08 12:10:59 +00:00
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
This commit is contained in:

committed by
Mahavir Jain

parent
a0644bf8ae
commit
31edd48b43
56
examples/cxx/exceptions/main/exception_example_main.cpp
Normal file
56
examples/cxx/exceptions/main/exception_example_main.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
/* 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;
|
||||
}
|
Reference in New Issue
Block a user