C 转换到嵌套结构指针是否安全?

C 转换到嵌套结构指针是否安全?,c,C,给定两个声明为 struct _inner { char *inner_value; }; struct _outer { struct _inner common; char *outer_value; }; 我可以假设以下从struct\u outer*到struct\u inner*的转换将在每个编译器中成功吗 struct _outer *outer_struct; struct _inner *inner_struct = (struct _inner *)

给定两个声明为

struct _inner {
    char *inner_value;
};

struct _outer {
    struct _inner common;
    char *outer_value;
};
我可以假设以下从
struct\u outer*
struct\u inner*
的转换将在每个编译器中成功吗

struct _outer *outer_struct;
struct _inner *inner_struct = (struct _inner *)outer_struct;
C语言的最低标准版本是什么?在这个版本中,这个转换保证会成功


编辑:我已将外部结构中的
struct\u one
更改为
struct\u inner

当然可以强制转换。但是如果您希望能够访问
char*inner_值和<代码>字符*外部值您需要在
\u outer
中更改订单:

struct _outer {
    char *outer_value; // <----|
    struct _one common; // <---|
};
struct\u外部{

char*outer_value;//C99标准保证此类铸造成功:

6.7.2.1-13:指向经过适当转换的结构对象的指针指向其初始成员(如果该成员是位字段,则指向其所在的单元),反之亦然。结构对象内可能有未命名的填充,但不在其开头


\u outer
没有任何
\u internal
,因此,如果您重新定义
struct\u outer{char*outer\u value;struct\u one common;}
没有问题,但按现状来看,这并不好。请注意,虽然这保证在更高版本的C标准中起作用,但添加此保证是编纂现有实践的一个示例。这是否也适用于structs内structs内structs内的structs?