struct
现在我知道我可以通过将指向 a 的指针转换为 this 的第一个成员的类型来实现继承struct
。
然而,纯粹作为一种学习经验,我开始怀疑是否有可能以稍微不同的方式实现继承。
这段代码合法吗?
#include <stdio.h>
#include <stdlib.h>
struct base
{
double some;
char space_for_subclasses[];
};
struct derived
{
double some;
int value;
};
int main(void) {
struct base *b = malloc(sizeof(struct derived));
b->some = 123.456;
struct derived *d = (struct derived*)(b);
d->value = 4;
struct base *bb = (struct base*)(d);
printf("%f\t%f\t%d\n", d->some, bb->some, d->value);
return 0;
}
这段代码似乎产生了预期的结果,但正如我们所知,这远不能证明它不是 UB。
我怀疑这样的代码可能是合法的原因是我看不到这里可能出现的任何对齐问题。但当然,这远非知道不会出现此类问题,即使确实没有对齐问题,代码也可能由于任何其他原因仍然是 UB。
- 上面的代码有效吗?
- 如果不是,有什么办法使它有效吗?
- 有
char space_for_subclasses[];
必要吗?删除了这一行后,代码似乎仍然表现自己