Advertisement
dllbridge

exception

Dec 9th, 2023
806
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.82 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include   <stdio.h>
  5. #include  <locale.h>
  6.  
  7.  
  8.  
  9.  
  10.  
  11. //////////////////////////////////////////////////////////     TaleTellingClass: Простой класс, который информирует
  12. struct TaleTellingClass                                 //                           о своем создании и уничтожении...
  13. {
  14.      
  15.    TaleTellingClass() { printf("Вызываем конструктор TaleTellingClass \n"); }
  16.   ~TaleTellingClass() { printf("Вызываем  ДЕСТРУКТОР TaleTellingClass \n"); }
  17. };
  18.  
  19.  
  20.  
  21.  
  22.  
  23. FILE *fp;
  24.  
  25.  
  26. //////////////////////////////////////////////////////////  
  27. void function1()                                        //
  28. {
  29.  
  30.      if((fp = fopen("test.txt", "r")))
  31.      {
  32.            
  33.         char sz[123];
  34.         fscanf(fp, "%s", sz);
  35.         printf("Читаем из файла до первого пробела: %s \n", sz);
  36.         fclose(fp);
  37.      }
  38.      else
  39.      {
  40.          printf("Выбрасываем исключение...\n");                                            // Выбросить 'const char*'
  41.  
  42.          throw "Ошибка при открытии файла...";                            // В противном случае, файл открыт успешно
  43.      }                                                        
  44. }
  45.    
  46.    
  47.    
  48. //////////////////////////////////////////////////////////
  49. void function2()                                        //
  50. {
  51.  
  52.      TaleTellingClass tellme;   // Создать локальный объект, чтобы проверить вызов деструктора при разматывании стека
  53.                                            
  54.      function1();                                                       //  Вызвать функцию, выбрасывающую исключение
  55. }
  56.  
  57.  
  58.  
  59.  
  60.  
  61. //////////////////////////////////////////////////////////
  62. int main()                                              //
  63. {
  64.    
  65.     setlocale(LC_ALL, "Rus");
  66.    
  67.     try
  68.     {
  69.        printf("Входим в try-блок...\n");
  70.        function2();
  71.        printf("Выходим без ошибок (исключений) из try-блока...\n");
  72.     }
  73.    
  74.     //        !!! Здесь (между try & catch)нельзя размещать код !!!    
  75.    
  76.     catch(int i)
  77.     {
  78.        printf("Вызван обработчик 'int' с %d \n", i);     return -1;                
  79.     }
  80.  
  81.  
  82.     catch(const char* p)
  83.     {
  84.        printf("Вызван обработчик 'char*’ [%s] \n", p);   return -1;      
  85.     }
  86.  
  87.  
  88.     catch(...)
  89.     {
  90.        printf("Вызван обработчик catch_all...\n");       return -1;
  91.     }
  92.  
  93. return 0;                                                                                 // Обошлось без приключений
  94. }
  95.  
  96.  
  97.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement