我正在用 C 编写一个实体组件系统,我编写了一个宏来定义一个函数来将每个组件添加到任何实体。宏如下:
#define EntityAddComponent(type) \
type* EntityAdd##type(char* entname ,type* ComponentList){ \
int h = hashName(entname); \
memcpy(ComponentList[h].entName,entname,8); \
return ComponentList+h; \
}
entname
是实体的名称。 ComponentList
是一个数组,记录了该类型的每个组件。该函数将实体的名称写入新组件并返回指向该组件的指针。
然后使用宏创建多个函数:
EntityAddComponent(SpriteComponent);
EntityAddComponent(CollisionComponent);
EntityAddComponent(PhysicsComponent);
我使用
EntityAddSpriteComponent
但它根据 gdb
返回一个指向不可访问内存的指针。
我用 gdb
做了一些调试,发现函数返回的指针并非完全不正确:
我期待的实际指针是
0x55555555c13c
.
而
EntityAddSpriteComponent
返回的指针是0x5555c13c
.