RicardasSim

looping through enum

Aug 2nd, 2019
684
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4.  
  5. int main()
  6. {
  7.  
  8.     printf("val:\n");
  9.  
  10.     enum val { first, second, third };
  11.  
  12.     for( uint32_t i = first; i <= third; ++i)
  13.     {
  14.         printf("%d ",i);
  15.     }
  16.  
  17.     printf("\nmonths:\n");
  18.  
  19.     /* February = 2, March = 3, ... */
  20.     enum months { January = 1, February, March, April, May, June, July, August, September, October, November, December };
  21.  
  22.     for( uint32_t i = January; i <= December; ++i)
  23.     {
  24.         printf("%d ",i);
  25.     }
  26.  
  27.     printf("\nflags:\n");
  28.  
  29.     enum flags {
  30.  
  31.         FLAG_1   = 0x00000001,
  32.         FLAG_2   = 0x00000002,
  33.         FLAG_3   = 0x00000004,
  34.         FLAG_4   = 0x00000008,
  35.         FLAG_5   = 0x00000010,
  36.         FLAG_6   = 0x00000020,
  37.         FLAG_7   = 0x00000040,
  38.         FLAG_8   = 0x00000080,
  39.         FLAG_9   = 0x00000100,
  40.         FLAG_10  = 0x00000200,
  41.         FLAG_11  = 0x00000400,
  42.         FLAG_MAX  = 0x00000800
  43.  
  44.     };
  45.  
  46.     for( uint32_t i = FLAG_1; i <= FLAG_MAX; i*=2)
  47.     {
  48.         printf("0x%X ",i);
  49.     }
  50.  
  51.     printf("\n");
  52.  
  53.     for( uint32_t i = FLAG_1; i <= FLAG_MAX; i=i<<1)
  54.     {
  55.         printf("0x%X ",i);
  56.     }
  57.  
  58.     printf("\nflags again:\n");
  59.  
  60.     enum flags_again {
  61.  
  62.         FLAG_A_1   = 0x00000001,
  63.         FLAG_A_2   = 0x00000002,
  64.         FLAG_A_MAX  = 0x00000800
  65.  
  66.     };
  67.  
  68.     for( uint32_t i = FLAG_A_1; i <= FLAG_A_MAX; i*=2)
  69.     {
  70.         printf("0x%X ",i);
  71.     }
  72.  
  73.     printf("\n");
  74.  
  75.     for( uint32_t i = FLAG_A_1; i <= FLAG_A_MAX; i*=2)
  76.     {
  77.         switch(i)
  78.         {
  79.             case FLAG_A_1:
  80.             case FLAG_A_2:
  81.  
  82.                 printf("0x%X ",i);
  83.  
  84.                 break;
  85.  
  86.             default:
  87.                 break;
  88.         }
  89.     }
  90.  
  91.     printf("\nflags once more:\n");
  92.  
  93.     enum flags_once_more {
  94.  
  95.         FLAG_B_1   = 0x00000001,
  96.         FLAG_B_2   = 0x00000002,
  97.         FLAG_B_3   = 0x00000004,
  98.         FLAG_B_4   = 0x00000008,
  99.         FLAG_B_MAX  = 0x7FFFFFFF
  100.  
  101.     };
  102.  
  103.     for( uint32_t i = FLAG_B_1; i <= FLAG_B_MAX; i=i<<1)
  104.     {
  105.         switch(i)
  106.     {
  107.         case FLAG_B_1:
  108.         printf("FLAG_B_1 ");
  109.         break;
  110.  
  111.         case FLAG_B_2:
  112.         printf("FLAG_B_2 ");
  113.         break;
  114.  
  115.         case FLAG_B_3:
  116.         printf("FLAG_B_3 ");
  117.         break;
  118.  
  119.         case FLAG_B_4:
  120.         printf("FLAG_B_4 ");
  121.         break;
  122.  
  123.         default:
  124.         printf("U ");
  125.         break;
  126.     }
  127.     }
  128.  
  129.     printf("\n");
  130.  
  131.     return 0;
  132. }
  133.  
  134. /*
  135. output:
  136.  
  137. val:
  138. 0 1 2
  139. months:
  140. 1 2 3 4 5 6 7 8 9 10 11 12
  141. flags:
  142. 0x1 0x2 0x4 0x8 0x10 0x20 0x40 0x80 0x100 0x200 0x400 0x800
  143. 0x1 0x2 0x4 0x8 0x10 0x20 0x40 0x80 0x100 0x200 0x400 0x800
  144. flags again:
  145. 0x1 0x2 0x4 0x8 0x10 0x20 0x40 0x80 0x100 0x200 0x400 0x800
  146. 0x1 0x2
  147. flags once more:
  148. 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
  149.  
  150. */
Advertisement
Add Comment
Please, Sign In to add comment