基于参数的Typecast变量

时间:2017-02-03 09:46:06

标签: c casting typecasting-operator

在C中,我想基于Variable将变量类型化为不同的变量。我该如何让它变得动态?像

贪婪的方式

    if ( typecast_to_uint16 == 1 ) {
            uint16 v = (uint16)val;
    } else if (typecast_to_char == 1) {
            char p = (char )val;
    } else if (typecast_to_some_struct_a == 1) {
            struct a b = (struct_a)val;
    }

这是一种贪婪的方式,是否有任何优化或动态的方式,我可以直接类型化变量,如使用结构?

例如:

     (type_cast_array[struct_a_index]) ret_val;

编辑问题以清除混淆..

1 个答案:

答案 0 :(得分:0)

这不能在没有运行时检查的情况下完成,你必须自己做。

C是一种静态编译语言,不支持将类型作为第一类值进行操作。也就是说,您不能将变量的类型放在不同的变量中,例如间接地投射到那种类型。

这是因为操作值的实际机器代码是在编译时生成的,编译器必须知道事物的类型才能生成正确的指令。

正如评论中所提到的,tagged union通常是一种干净地模拟不同类型变量的方法。