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 + -
显示快捷键?