为什么typedef不是强类型的?

时间:2011-11-18 13:09:34

标签: c typedef strong-typing

typedefs没有强类型的原因是什么?有什么好处我看不到,还是由于向后兼容?见这个例子:

typedef int Velocity;
void foo(Velocity v) {
    //do anything;
}
int main() {
    int i=4;
    foo(i); //Should result in compile error if strongly typed.
    return 0;
}

我不是要求变通方法来获得强类型数据类型,而只是想知道为什么标准不需要typedefs强类型化?

谢谢。

3 个答案:

答案 0 :(得分:14)

因为C不是强类型的,而且typedef的起源是思维

typedef只是为了方便和可读性,它不会创建新类型。

答案 1 :(得分:4)

typedef只是一个漏斗(像许多其他关键字一样)。可以将其视为typealias

相反,C具有兼容类型的完整概念。这允许例如将编译单元链接在一起,即使函数protopyes的声明仅使用兼容类型而不是相同类型完成。所有这些都来自于日常生活中的简单实际需要,仍然能够为实施提供一些保证。

答案 2 :(得分:0)

即使Velocityint不同,您的代码也会因类型转换规则而编译并正常工作。什么是行不通的是将类型为Velocity *的表达式传递给期望int *等的函数。如果要实现后一种类型的强制执行,只需将Velocity作为结构或联合包含单个整数的类型,现在您将拥有一个新的实型。

相关问题