C语言 如果一个typedef类型解析为相同的类型,那么将它们显式地转换为另一个类型有什么好处吗?

dgsult0t  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(99)

在C中,当从一个类型转换为共享相同基础值的另一个类型时,最好使用显式转换吗?
下面是一个例子:

typedef int int1;
typedef int int2;

int main()
{
    int1 i = 0;
    int2 j;
    j = i; // no explicit cast
    // j = (int2) i; // explicit cast
    return 0;
}

既然int1和int2都是基础类型int,那么将一种类型显式地转换为另一种类型有什么好处吗?

slmsl1lt

slmsl1lt1#

就代码生成而言,强制转换是不必要的,也没有任何效果。
但是如果你使用typedef来定义抽象类型,它们碰巧是相同的底层类型这一事实应该是一个用户不应该知道的实现细节;它可能会随着时间的推移而改变。所以理想情况下,你应该使用强制转换来将它们视为抽象级别上的独立类型。
由于C没有真实的的用户定义类型和运算符重载,用户需要知道它是否是算术类型,这样他们就知道他们是否可以使用算术运算,以及在类型之间进行转换是否有意义。
尽管如此,程序员们大多不会为此费心。由于C在typedef级别不强制类型兼容性,因此将其用于ADT几乎没有好处。typedef主要用于两个原因:

  • struct XXX和复杂类型(特别是函数指针)的别名
  • 可能随时间或在实现之间更改的类型的名称(例如size_tpid_t)。

相关问题