C语言 枚举类型在VS2010上无法实现自增,自减操作

如果一个变量只有几种可能的值,那么这个变量可以被定义为枚举类型。
枚举的意思就是把可能的值一一列举出来,那么变量的值也只限于列举出来的范围中。
枚举类型的说明:
1.声明:enum Color{red,yellow,blue,white,black};
2.定义:enum Color i,j,k,pri;
3.枚举元素代表一个整数,默认顺序是从0开始,可以用%d来输出,比如

#include <stdio.h>

int main()
{
    enum Color{red,yellow,blue,white,black};
    enum Color i,j,k,pri;
    int n,loop;
    n = 0;
    i = red;
    printf("%d",i);
    getchar();
    return 0;
}

此时打印出来的是0,但是不支持输出字符串

printf("%s",i);

此时输出为null。
4.枚举类型可以进行比较,比如

#include <stdio.h>
int main()
{
    enum Color{red,yellow,blue,white,black};
    enum Color i,j,k,pri;
    int n,loop;
    n = 0;
    i = red;
    j = yellow;
    if (i <j)
    {
        printf("yes!!");
    }
    getchar();
    return 0;
}

此时能打印出yes!!
5.C99标准把枚举类型作为一种整型数据,所以枚举类型是应该支持自加一操作的,《谭浩强 C程序设计》中也应用了枚举类型自加的操作,比如我们写这样一个代码:

#include <stdio.h>
int main()
{
    enum Color{red,yellow,blue,white,black};
    enum Color i,j,k,pri;
    int n,loop;
    n = 0;

    for ( i = red;i <black;i++)
    {
        printf("当为第%d个颜色\n",i);
    }
    getchar();
    return 0;
}

这时应该打印出4列话才对,但是我用vs2010 把文件后缀改成.c,该代码是报错的。

所以我只能理解为微软对C语言的支持不是太好,C99中的一些特性并没有支持。
换个角度想,其实应用枚举类型自加操作本身也不太好,当我们使用默认的顺序而不是在声明时指定,枚举元素才是连续的,指定后元素将不再连续,比如

#include <stdio.h>
int main()
{
    enum Color{red = 5,yellow = 3,blue,white,black};
    enum Color i,j,k,l,m;
    i = red;
    j = yellow;
    k = blue;
    l = white;
    m = black;
    printf("i为%d\n",i);
    printf("j为%d\n",j);
    printf("k为%d\n",k);
    printf("l为%d\n",l);
    printf("m为%d\n",m);
    getchar();
    return 0;
}

结果:

你可能感兴趣的:(C语言)