C语言中是否存在结构等价类型?

C语言中是否存在结构等价类型?,c,equivalence,C,Equivalence,C中是否存在结构类型等价性?严格来说,没有不同名称的类型是不同的类型,即使类型的结构相同。(当然,typedef只是为现有类型引入了一个替代名称;这些类型是相同的类型。) 然而,在实践中,有一些特技你可以拉和逃脱。但严格来说,他们是在作弊。使用void指针是颠覆系统的一种方式;另一个是不使用函数的原型声明;可变长度参数列表可以是另一个。严格来说,没有不同名称的类型是不同的类型,即使类型的结构相同。(当然,typedef只是为现有类型引入了一个替代名称;这些类型是相同的类型。) 然而,在实践中,有

C中是否存在结构类型等价性?

严格来说,没有不同名称的类型是不同的类型,即使类型的结构相同。(当然,
typedef
只是为现有类型引入了一个替代名称;这些类型是相同的类型。)


然而,在实践中,有一些特技你可以拉和逃脱。但严格来说,他们是在作弊。使用void指针是颠覆系统的一种方式;另一个是不使用函数的原型声明;可变长度参数列表可以是另一个。

严格来说,没有不同名称的类型是不同的类型,即使类型的结构相同。(当然,
typedef
只是为现有类型引入了一个替代名称;这些类型是相同的类型。)


然而,在实践中,有一些特技你可以拉和逃脱。但严格来说,他们是在作弊。使用void指针是颠覆系统的一种方式;另一个是不使用函数的原型声明;可变长度参数列表可以是另一个。

如果你问是否可以比较两个
结构是否相等,答案是否。只有赋值,你可以从函数返回结构。

如果你问是否可以比较两个
结构是否相等,答案是否。只有赋值,您可以从函数返回一个结构。

在C中没有运算符来比较两个结构,您可以使用memcmp代替:

if( memcmp( &structvar1, &structvar2, sizeof structvar1 ) )
  puts("not equal");
else
  puts("equal");

C中没有用于比较两个结构的运算符,您可以改用memcmp:

if( memcmp( &structvar1, &structvar2, sizeof structvar1 ) )
  puts("not equal");
else
  puts("equal");

这是真的,但不是被问到的。我看到莱弗勒的回答,如果这是你的意思,但我认为这个问题可能问了一些不同的问题,这就是为什么我的答案以“如果”开头。请记住,英语不是我们很多人的第一语言,包括我。这是真的,但不是被问到的。我看到莱弗勒的回答,如果这是你的意思,但我认为这个问题可能问了一些不同的问题,这就是为什么我的答案以“如果”开头。请记住,英语不是我们很多人的第一语言,包括我在内。1:这不是一个好办法。。。memcmp可能会考虑填充字节。你不知道你说了什么:同一个结构上的填充是相同的填充,因此memcmp永远不会有问题,因为sizeof包含这两个参数的(相同)填充。你无法知道填充字节的内容是否相等(例如,如果结构已分配了
malloc
,则初始内容是任意的)使用
memcmp
会告诉你两个结构是不同的,而实际上它们的所有成员都是相等的。-1:这不是一个好方法…可能会有memcmp会考虑的填充字节。你不知道你说的是什么:在同一个结构上的填充是相同的填充,因此对memcmp来说从来都不是问题,因为sizeof包括两个参数的填充是否(相同)您无法知道填充字节的内容是否相等(例如,如果已使用
malloc
分配结构,则初始内容是任意的)使用<代码> MeMCPM/CODE>将告诉你们两个结构是不同的,而实际上它们都是相等的。不确定是否同意100%。C编译一次编译一个编译单元,因此编译器不能决定将随机填充字节添加到结构中。还要考虑C++ POD类型的问题……它们如何兼容C?如果C结构即使在它们自己之间也不兼容,那么不确定是否我同意100%。C++编译一次编译一个编译单元,因此编译器不能决定向结构添加随机填充字节。甚至在他们之间也无法忍受?