【发布时间】:2021-06-23 16:29:35
【问题描述】:
考虑这段代码sn-p:
#include <threads.h>
int thread_start(void *ptr)
{
struct {
int a;
int b;
} *data = ptr;
return 0;
}
int main(int argc, char *argv[])
{
struct {
int a;
int b;
} data;
thrd_t thread;
thrd_create(&thread, thread_start, &data);
thrd_join(thread, NULL);
return 0;
}
关于 void * 到 struct { int; int } * 的转换,假设匿名结构的字段与最初分配的结构的字段相同,这是根据 C 标准明确定义的行为吗?
【问题讨论】:
-
我想是这样,但在标准中找不到明确的参考。不过,其他人可能比我做得更好。
-
这能回答你的问题吗? Compatible types and structures in C 好像不是。
-
@EugeneSh。我认为这表明它们不是直接分配的兼容条款。但是,via
void*的投射和重新投射有点不同。毕竟,它们都必须具有相同的别名/对齐要求等。 -
我记得在某处读到过,两个结构是等价的,当且仅当它们逐个字符完全相同时。不记得它是否仅适用于标记结构或所有(包括匿名)结构。
标签: c language-lawyer standards