我试图声明一个依赖于另一个结构的结构.我想用来sizeof保证安全/迂腐.
typedef struct _parent
{
float calc ;
char text[255] ;
int used ;
} parent_t ;
Run Code Online (Sandbox Code Playgroud)
现在我想声明一个child_t大小相同的结构parent_t.text.
我怎样才能做到这一点?(下面的伪代码.)
typedef struct _child
{
char flag ;
char text[sizeof(parent_t.text)] ;
int used ;
} child_t ;
Run Code Online (Sandbox Code Playgroud)
我试着用几种不同的方法parent_t和struct _parent,但我的编译器不接受.
作为一个技巧,这似乎工作:
parent_t* dummy ;
typedef struct _child
{
char flag ;
char text[sizeof(dummy->text)] ;
int used ;
} child_t ;
Run Code Online (Sandbox Code Playgroud)
是否可以在child_t不使用的情况下声明dummy?
我有一个C#背景.我非常喜欢像C这样的低级语言.
在C#中,struct默认情况下由编译器布局内存.编译器可以隐式地重新排序数据字段或填充字段之间的附加位.因此,我必须指定一些特殊属性来覆盖此行为以获得精确布局.
AFAIK,C struct默认情况下不重新排序或对齐a的内存布局.但是,我听说有一个很难找到的例外.
什么是C的内存布局行为?什么应该重新订购/对齐而不是?