C中复合类型的目的是什么?

时间:2018-08-19 00:50:42

标签: c types c99 c11 c89

人们已将此帖子标记为this的重复,但这实际上并不是因为我不是在问什么是复合类型,而是它的目的是什么,并且我给出了一个可能导致使用的用例对软件开发人员有害,然后询问这是否应该是未定义的行为。

我正在阅读C11标准中有关复合类型的那一部分,就像:为什么到底有人会这样做吗?

我的意思是我看不到任何有趣的东西。我认为这对程序员来说非常令人困惑。举个例子,假设我们有一个函数TypeofAnyOne,人们在软件中到处使用,他们只是声明TypeofOne并使用它。程序员不关心函数的定义。然后有一天,一个聪明的家伙需要在该函数中添加参数,并将其定义更改为interface Relation { field: string; class: TypeofAnyOne; // okay now } 。该软件仍然可以愉快地进行编译,但是,上帝,所有使用旧界面的旧代码都被段错误搞砸了。

下面的代码是一个演示:

Relation

我不明白这种事情的目的。在我看来,这应该是未定义的行为,或者至少是为什么为什么像GCC这样的编译器什么也没说呢?

1 个答案:

答案 0 :(得分:3)

您的示例中的要点是函数f()没有原型,而另一个有原型。没有声明的形式来自早期的C语言,多年来已被标记为过时。

当将原型引入C来适应旧代码和新代码之间时,两者之间的复合类型构造很有帮助。

使用与预期参数不对应的参数调用函数具有未定义的行为,因此,使用这种机制,您必须知道自己在做什么。

简而言之,不要使用没有原型的声明。它们早已过时,并且可能随时从C标准中删除。