if(b)
{
c=a/b;
}else
{
printf("деление на ноль");
}
C++ - исключения
Заранее огромное спасибо.
Код:
Или вот выдержка из хелпа библиотеки C++:
This following example program demonstrates the use of exceptions:
Код:
#include <stdexcept>
#include <string>
static void f() { throw runtime_error("a runtime error"); }
int main ()
{
string s;
// First we'll try to incite then catch an exception
// from the Standard C++ Library string class.
// We'll try to replace at a position that is non-existent.
//
// By wrapping the body of main in a try-catch block we can be
// assured that we'll catch all exceptions in the exception
// hierarchy. You can simply catch an exception as is done below,
// or you can catch each of the exceptions in which you have an
// interest.
try
{
s.replace(100,1,1,'c');
}
catch (const exception& e)
{
cout << "Got an exception: " << e.what() << endl;
}
// Now we'll throw our own exception using the function
// defined above.
try
{
f();
}
catch (const exception& e)
{
cout << "Got an exception: " << e.what() << endl;
}
return 0;
}
#include <string>
static void f() { throw runtime_error("a runtime error"); }
int main ()
{
string s;
// First we'll try to incite then catch an exception
// from the Standard C++ Library string class.
// We'll try to replace at a position that is non-existent.
//
// By wrapping the body of main in a try-catch block we can be
// assured that we'll catch all exceptions in the exception
// hierarchy. You can simply catch an exception as is done below,
// or you can catch each of the exceptions in which you have an
// interest.
try
{
s.replace(100,1,1,'c');
}
catch (const exception& e)
{
cout << "Got an exception: " << e.what() << endl;
}
// Now we'll throw our own exception using the function
// defined above.
try
{
f();
}
catch (const exception& e)
{
cout << "Got an exception: " << e.what() << endl;
}
return 0;
}
по-моему все понятно (:
Ключевые слова для работы с исключениями:
try - начало блока, в котором будет происходить "отлов" исключений. В принципе, любая программа под винду сейчас имеет главный цикл, расположенный именно в таком блоке. Синтаксис - try { ....... }
catch - начало блока обработки пойманного исключения. Ловить можно исключения конкретных типов или вообще любые. Тип отлавливаемого (и обрабатываемого в блоке catch) исключения указывается в круглых скобках после слова catch. Для любых типов исключений в скобках указывается многоточие. С одним блоком try могут быть связаны несколько блоков catch. При этом будет выбран первый найденный блок catch, к типу которого можно привести (неявно) тип пойманного исключения. Если после обработки исключения надо позволить обработать его и внешнему блоку отлова исключений, то производим повторное возбуждение исключения с помощью throw. Синтаксис - catch ( тип ) { ........ }
throw - возбуждение исключительной ситуации. При возбуждении исключительной ситуации для упрощения обработки исключения производят передачу некоторой информации, которая и определяет тип исключения (по которому его и отлавливает catch). Синтаксис - throw значение.
Пример:
Код:
try {
//if ( 0 == b ) throw "divisin by zero";
c = a / b;
}
catch( char* excpt ) {
// сюда попадём, если раскомментируем if и b будет равно 0
printf( excpt );
}
catch( ... ) {
// сюда попадём при любом исключении, если оно не отловлено предыдущим catch
printf( "division by zero" );
}
//if ( 0 == b ) throw "divisin by zero";
c = a / b;
}
catch( char* excpt ) {
// сюда попадём, если раскомментируем if и b будет равно 0
printf( excpt );
}
catch( ... ) {
// сюда попадём при любом исключении, если оно не отловлено предыдущим catch
printf( "division by zero" );
}
The_Ice, пример и правда был непонятен сначала. А MSDN конечно рулит:).