encode-6.mm

来自「linux下编程用 编译软件」· MM 代码 · 共 75 行

MM
75
字号
/* Encoding tests for ObjC class layouts.  *//* Contributed by Ziemowit Laski <zlaski@apple.com>.  *//* { dg-options "-lobjc" } *//* { dg-do run } */#include <objc/Object.h>#ifdef __NEXT_RUNTIME__#include <objc/objc-class.h>#define OBJC_GETCLASS objc_getClass#else#include <objc/objc-api.h>#define OBJC_GETCLASS objc_get_class#endif#include <stdlib.h>#include <string.h>#define CHECK_IF(expr) if(!(expr)) abort()@class Int1, Int2;struct Nested;struct Innermost {  unsigned char a, b;  struct Nested *encl;};struct Nested {  float a, b;  Int1 *next;  struct Innermost innermost;};@interface Int1: Object {  signed char a, b;  Int2 *int2;  struct Nested nested;}@end@interface Int2: Int1 {  struct Innermost *innermost;  Int1 *base;}@end@implementation Int1@end@implementation Int2@endstruct objc_ivar *ivar;static void check_ivar(const char *name, const char *type) {  CHECK_IF(!strcmp(ivar->ivar_name, name));  CHECK_IF(!strcmp(ivar->ivar_type, type));  ivar++;}int main(void) {  ivar = ((Class)OBJC_GETCLASS("Int1"))->ivars->ivar_list;  check_ivar("a", "c");  check_ivar("b", "c");  check_ivar("int2", "@\"Int2\"");  check_ivar("nested",     "{Nested=\"a\"f\"b\"f\"next\"@\"Int1\"\"innermost\"{Innermost=\"a\"C\"b\"C\"encl\"^{Nested}}}");      ivar = ((Class)OBJC_GETCLASS("Int2"))->ivars->ivar_list;  check_ivar("innermost", "^{Innermost=CC^{Nested}}");  check_ivar("base", "@\"Int1\"");    return 0;}

⌨️ 快捷键说明

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