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

📄 c99-tag-1.c

📁 this is a gcc file, you can download it and learn its usetility, for further detail please look at t
💻 C
字号:
/* Test for handling of tags (6.7.2.3).  *//* Origin: Joseph Myers <jsm28@cam.ac.uk> *//* { dg-do compile } *//* { dg-options "-std=iso9899:1999 -pedantic-errors" } */voidfoo (void){  /* Forward declarations of structs and unions are OK; those of enums are     not.  */  {    struct s0;    struct s1 *x0;    union u0;    union u1 *x1;    enum e0; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "forward" "enum forward 1" { target *-*-* } 16 } */    enum e1 *x2; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "forward" "enum forward 2" { target *-*-* } 18 } */    /* GCC used to fail to diagnose a use of an enum inside its definition.  */    enum e2 { E2A = sizeof (enum e2 *) }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "forward" "enum forward 3" { target *-*-* } 21 } */  }  /* A specific type shall have its content defined at most once.  But we     may redeclare the tag in different scopes.  */  {    struct s0 { int i; };    {      struct s0 { long l; };    }    {      union s0 { long l; };    }    struct s0 { int i; }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "rede" "struct redef" { target *-*-* } 34 } */    union u0 { int i; };    {      union u0 { long l; };    }    {      struct u0 { long l; };    }    union u0 { int i; }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "rede" "union redef" { target *-*-* } 43 } */    enum e0 { E0A };    {      enum e0 { E0B };    }    {      struct e0 { long l; };    }    enum e0 { E0B }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "rede" "enum redef" { target *-*-* } 52 } */  }  /* Structure, union and enumerated types have a single namespace of tags.  */  {    struct s0;    struct s1;    struct s2 { int i; };    struct s2;    struct s3 { int i; };    struct s2 sv;    union u0;    union u2 { int i; };    union u2;    union u2 uv;    enum e0 { E0A };    enum e1 { E1A };    /* None of the following are allowed; some were not detected by GCC.  */    union s0; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 70 } */    union s1 { int i; }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 72 } */    union s2; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 74 } */    union s3 { int i; }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 76 } */    enum u0 { U0A }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 78 } */    enum u2 { U2A }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 80 } */    struct e0; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 82 } */    struct e1 { int i; }; /* { dg-bogus "warning" "warning in place of error" } */    /* { dg-error "wrong" "wrong tag type" { target *-*-* } 84 } */  }  /* Explicit shadowing in inner scopes is OK, but references to the tag     that don't explicitly shadow it must (whether in declarations or     expressions) use the correct one of struct/union/enum.  */  {    struct s0;    struct s1;    struct s2 { int i; };    struct s2;    struct s3 { int i; };    struct s2 sv;    union u0;    union u2 { int i; };    union u2;    union u2 uv;    enum e0 { E0A };    enum e1 { E1A };    {      union s0;      union s1;      union s2;      union s3;      struct u0;      struct u2;      struct e0;      union e1;    }    {      union s0 *x0; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 114 } */      int x1[sizeof (union s1 *)]; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 116 } */      struct t;      union s2 *x2;      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 119 } */      int x3[sizeof (union s3 *)]; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 121 } */      struct u;      enum u0 *y0; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong|forward" "wrong tag type" { target *-*-* } 124 } */      int y1[sizeof (enum u2 *)]; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong|forward" "wrong tag type" { target *-*-* } 126 } */      struct v;      struct e0 *z0; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 129 } */      int z1[sizeof (struct e1 *)]; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 131 } */      struct w;    }    /* When explicitly shadowed to be a tag of a different type, references       to the new type of tag must be accepted and those to the old type       rejected.  */    {      union s0;      union s0 *x0;      union s1;      struct s1 *x1; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 142 } */      union s2;      union s2 *x2;      union s3;      struct s3 *x3; /* { dg-bogus "warning" "warning in place of error" } */      /* { dg-error "wrong" "wrong tag type" { target *-*-* } 147 } */    }  }}

⌨️ 快捷键说明

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