【问题标题】:is enum in C signed or unsigned? [duplicate]C中的枚举是有符号的还是无符号的? [复制]
【发布时间】:2015-03-11 02:38:29
【问题描述】:

枚举在 C 中是有符号的还是无符号的?我正在使用 Gcc 编译我的程序,我得到 2 个带有枚举值的结果,如下代码:

typedef enum test_e
{
    zero,
    one,
    two,
    three,
}test_t;

void compare_func(test_t var)
{
    printf("\n [1] my number is %d \n", var);

    if ( var > 0)
        printf(" %d > 0 \n", var);
    else if ( var < 0)
        printf(" %d < 0 \n", var);
}

typedef enum test_nega_e
{
    zero_nega,
    one_nega = -1,
    two_nega = -2,
    three_nega = -3,
}test_nega_t;

void compare_nega_func(test_nega_t var_nega)
{
    printf("\n [2] my number_nega is %d \n", var_nega);
    if ( 0 < var_nega)
        printf(" %d > 0 \n", var_nega);
    else if ( 0 > var_nega)
        printf(" %d < 0 \n", var_nega);
}

int main (void)
{
    test_t my_number;
    test_nega_t my_number_nega;

    my_number = -1;
    compare_func(my_number);

    my_number_nega = -1;
    compare_nega_func(my_number_nega);

    return 0;
}

结果是:

 [1] my number is -1 
 -1 > 0 

 [2] my number_nega is -1 
 -1 < 0 

所以“my_number”是无符号的,而“my_number_var”是有符号的?谢谢

【问题讨论】:

    标签: c enums unsigned


    【解决方案1】:

    你不能依赖一个有签名或无签名的枚举。

    Are C++ enums signed or unsigned?

    请注意 C 和 C++ 枚举是相似的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多