RicardasSim icon

looping through enum

RicardasSim | PRO | 08/03/19 03:38:39 AM UTC | 0 ⭐ | 649 👁️ | Never ⏰ | []
C |

2.04 KB

|

None

|

0 👍

/

0 👎

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
 
int main()
{
 
    printf("val:\n");
 
    enum val { first, second, third };
 
    for( uint32_t i = first; i <= third; ++i)
    {
        printf("%d ",i);
    }
 
    printf("\nmonths:\n");
 
    /* February = 2, March = 3, ... */
    enum months { January = 1, February, March, April, May, June, July, August, September, October, November, December };
 
    for( uint32_t i = January; i <= December; ++i)
    {
        printf("%d ",i);
    }
 
    printf("\nflags:\n");
 
    enum flags {
 
        FLAG_1   = 0x00000001,
        FLAG_2   = 0x00000002,
        FLAG_3   = 0x00000004,
        FLAG_4   = 0x00000008,
        FLAG_5   = 0x00000010,
        FLAG_6   = 0x00000020,
        FLAG_7   = 0x00000040,
        FLAG_8   = 0x00000080,
        FLAG_9   = 0x00000100,
        FLAG_10  = 0x00000200,
        FLAG_11  = 0x00000400,
        FLAG_MAX  = 0x00000800
 
    };
 
    for( uint32_t i = FLAG_1; i <= FLAG_MAX; i*=2)
    {
        printf("0x%X ",i);
    }
 
    printf("\n");
 
    for( uint32_t i = FLAG_1; i <= FLAG_MAX; i=i<<1)
    {
        printf("0x%X ",i);
    }
 
    printf("\nflags again:\n");
 
    enum flags_again {
 
        FLAG_A_1   = 0x00000001,
        FLAG_A_2   = 0x00000002,
        FLAG_A_MAX  = 0x00000800
 
    };
 
    for( uint32_t i = FLAG_A_1; i <= FLAG_A_MAX; i*=2)
    {
        printf("0x%X ",i);
    }
 
    printf("\n");
 
    for( uint32_t i = FLAG_A_1; i <= FLAG_A_MAX; i*=2)
    {
        switch(i)
        {
            case FLAG_A_1:
            case FLAG_A_2:
 
                printf("0x%X ",i);
 
                break;
 
            default:
                break;
        }
    }
 
    printf("\nflags once more:\n");
 
    enum flags_once_more {
 
        FLAG_B_1   = 0x00000001,
        FLAG_B_2   = 0x00000002,
        FLAG_B_3   = 0x00000004,
        FLAG_B_4   = 0x00000008,
        FLAG_B_MAX  = 0x7FFFFFFF
 
    };
 
    for( uint32_t i = FLAG_B_1; i <= FLAG_B_MAX; i=i<<1)
    {
        switch(i)
    {
        case FLAG_B_1:
        printf("FLAG_B_1 ");
        break;
 
        case FLAG_B_2:
        printf("FLAG_B_2 ");
        break;
 
        case FLAG_B_3:
        printf("FLAG_B_3 ");
        break;
 
        case FLAG_B_4:
        printf("FLAG_B_4 ");
        break;
 
        default:
        printf("U ");
        break;
    }
    }
 
    printf("\n");
 
    return 0;
}
 
/*
output:
 
val:
0 1 2
months:
1 2 3 4 5 6 7 8 9 10 11 12
flags:
0x1 0x2 0x4 0x8 0x10 0x20 0x40 0x80 0x100 0x200 0x400 0x800
0x1 0x2 0x4 0x8 0x10 0x20 0x40 0x80 0x100 0x200 0x400 0x800
flags again:
0x1 0x2 0x4 0x8 0x10 0x20 0x40 0x80 0x100 0x200 0x400 0x800
0x1 0x2
flags once more:
FLAG_B_1 FLAG_B_2 FLAG_B_3 FLAG_B_4 U U U U U U U U U U U U U U U U U U U U U U U U U U U
 
*/

Comments