access23.c

来自「this is a gcc file, you can download it 」· C语言 代码 · 共 80 行

C
80
字号
// PRMS Id: 9127// Bug: members of anonymous unions are not access-controlled.#include <stdio.h>struct Foo {public:  union {    long A;    void *pX;  };  union X {    long A;    void *pX;  } PUB ;  int PUB_A;protected:  union {    long B; // ERROR - protected    void *pY; // ERROR - protected  } ;  union Y {    long B;    void *pY;  } PRT; // ERROR - protected  int PRT_A; // ERROR - protectedprivate:  union {    long C; // ERROR - private    void *pZ; // ERROR - private  };  union Z {    long C;      void *pZ;  } PRV; // ERROR - private  int PRV_A; // ERROR - private};struct Bar : public Foo {public:  void DoSomething() {    PUB_A = 0;    Foo::A = 0;    printf("%x\n",pX);      Foo::PUB.A = 0;    printf("%x\n",PUB.pX);      B = 0;			    printf("%x\n",Foo::pY);      PRT_A = 0;    PRT.B = 0;		    printf("%x\n",Foo::PRT.pY);	    PRV_A = 0;			// ERROR -     Foo::C = 0;			// ERROR -     printf("%x\n",pZ);  	// ERROR -     Foo::PRV.C = 0;		// ERROR -     printf("%x\n",PRV.pZ); 	// ERROR -   }};int main(){  Foo a;  a.PUB_A = 0;  a.A = 0;  printf("%x\n",a.pX);    a.PRT_A = 0;			// ERROR -   a.B = 0;			// ERROR -   printf("%x\n",a.pY);  	// ERROR -   a.PRV_A = 0;			// ERROR -   a.C = 0;			// ERROR -   printf("%x\n",a.pZ);  	// ERROR -   a.PUB.A = 0;  printf("%x\n",a.PUB.pX);    a.PRT.B = 0;			// ERROR -   printf("%x\n",a.PRT.pY);  	// ERROR -   a.PRV.C = 0;			// ERROR -   printf("%x\n",a.PRV.pZ);  	// ERROR - }

⌨️ 快捷键说明

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