C 枚举全为零

C Enum is all Zeroes

我比较迷茫。

#include "stdio.h"

typedef enum
{
    INTEGER,
    NUMBER,
    FLOAT,
    CHAR,
    ARRAY,
    STRING
} enumType;

typedef struct intType
{
    enumType type;
    int width;
    int value;
} Integer;

typedef struct fltType
{
    enumType type;
    int width;
    double value;
} Float;

Integer make_int(int val)
{
    Integer tmp;
    tmp.type = INTEGER;
    tmp.width = 32;
    tmp.value = val;
    return tmp;
}

int get_int(Integer val)
{
    int tmp = val.value;
    return tmp;
}

Float make_float(double val)
{
    Float tmp;
    tmp.type = FLOAT;
    tmp.width = 32;
    tmp.value = val;
    return tmp;
}

double get_float(Float val)
{
    double tmp = val.value;
    return tmp;
}

int main(void) {

    Integer i = make_int(42);
    printf("Type: %d\nWidth: %d\nValue: %d\n", (int)i.type, i.width, get_int(i));

    Float f = make_float(42.8);
    printf("Type: %d\nWidth: %d\nValue: %f\n", (int)i.type, i.width, get_float(f));

  return 1;

}

这应该输出六行,其中两行 "types" 不同。来自 enumType 的 INTEGER 和 FLOAT。

而是...

Type: 0
Width: 32
Value: 42
Type: 0
Width: 32
Value: 42.800000

都是0。

即使我修改了枚举,所以两个数字肯定不同,它仍然不起作用:

typedef enum
{
    INTEGER = 0,
    NUMBER,
    FLOAT = 1,
    CHAR,
    ARRAY,
    STRING
} enumType;

我不知道出了什么问题。

秒变printf

printf("Type: %d\nWidth: %d\nValue: %f\n", (int)i.type, i.width, get_float(f));

printf("Type: %d\nWidth: %d\nValue: %f\n", (int)f.type, f.width, get_float(f));