⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 catchptr1.c

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 C
字号:
// Test pointer chain catching// Copyright (C) 2000 Free Software Foundation, Inc.// Contributed by Nathan Sidwell 9 Apr 2000 <nathan@nathan@codesourcery.com>#include <stdio.h>void fn () {};struct A {void fn () {}};static int var = 1;static const int const_var = 2;struct B;struct C;int test0 (){  try    {      throw &fn;    }  catch (void *)    {      // should not decay to void *      return 1;    }  catch (...)    {      return 0;    }  return -1;}int test1 (){  try    {      throw &A::fn;    }  catch (void *)    {      // should not decay to void *      return 1;    }  catch (...)    {      return 0;    }  return -1;}int test2 (){  try    {      throw &var;    }  catch (void *)    {      // should decay to void *      return 0;    }  catch (...)    {      return 1;    }  return -1;}int test3 (){  try    {      throw &var;    }  catch (void const *)    {      // should decay to const void *      return 0;    }  catch (...)    {      return 1;    }  return -1;}int test4 (){  try    {      throw &const_var;    }  catch (void *)    {      // should not decay to void *      return 1;    }  catch (void const *)    {      // should decay to const void *      return 0;    }  catch (...)    {      return 2;    }  return -1;}int test5 (){  try    {      throw (void ***)0;    }  catch (void ***)    {      return 0;    }  catch (...)    {      return 1;    }  return -1;}int test6 (){  try    {      throw (void const* const* const*)0;    }  catch (void ***)    {      return 1;    }  catch (void * const* const*)    {      return 2;    }  catch (void const* * const*)    {      return 3;    }  catch (void const* const* *)    {      return 4;    }  catch (void const* const* const *)    {      return 0;    }  catch (...)    {      return 1;    }  return -1;}int test7 (){  try    {      throw (void ***)0;    }  catch (void const* const**)    {      return 1;    }  catch (void const** const *)    {      return 2;    }  catch (void * const* const *)    {      return 0;    }  catch (...)    {      return 3;    }  return -1;}int test8 (){  try    {      throw (B **)0;    }  catch (C **)    {      return 1;    }  catch (B **)    {      return 0;    }  catch (...)    {      return 2;    }  return -1;}int test9 (){  try    {      throw (B **)0;    }  catch (C const *const *)    {      return 1;    }  catch (B const *const *)    {      return 0;    }  catch (...)    {      return 2;    }  return -1;}static int (*tests[])() ={  test0,  test1,  test2,  test3,  test4,    test5,  test6,  test7,    test8,  test9,    NULL};int main (){  int ix;  int errors = 0;    for (ix = 0; tests[ix]; ix++)    {      int n = tests[ix] ();            if (n)        {          printf ("test %d failed %d\n", ix, n);          errors++;        }    }  return errors;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -