在C语言中,可以使用联合体(union)来替代结构体的继承依赖的 typedef。下面是一个示例代码:
#include 
// 定义基本类型
typedef enum {
    TYPE_INT,
    TYPE_FLOAT,
    TYPE_STRING
} DataType;
// 定义联合体
typedef union {
    int intValue;
    float floatValue;
    char* stringValue;
} Value;
// 定义数据结构
typedef struct {
    DataType type;
    Value value;
} Data;
// 打印数据
void printData(Data data) {
    switch (data.type) {
        case TYPE_INT:
            printf("Integer: %d\n", data.value.intValue);
            break;
        case TYPE_FLOAT:
            printf("Float: %.2f\n", data.value.floatValue);
            break;
        case TYPE_STRING:
            printf("String: %s\n", data.value.stringValue);
            break;
    }
}
int main() {
    // 创建数据对象
    Data data1 = {TYPE_INT, {123}};
    Data data2 = {TYPE_FLOAT, {3.14}};
    Data data3 = {TYPE_STRING, {"Hello, world!"}};
    // 打印数据
    printData(data1);
    printData(data2);
    printData(data3);
    return 0;
}
 
在上述代码中,定义了一个枚举类型 DataType,用于标识数据的类型。然后,使用联合体 Value 定义了 int、float 和 char* 三种不同类型的值,并将其作为结构体 Data 的成员。通过联合体的特性,结构体 Data 可以存储不同类型的值。最后,定义了一个打印函数 printData,根据数据类型打印相应的值。
在主函数中,创建了三个不同类型的数据对象,并通过 printData 函数打印出了它们的值。
注意:使用联合体需要特别小心,因为联合体会共享内存空间,因此在使用时需要确保访问的类型和值是正确的,否则可能会导致数据错误。