C++: Размер массива, switch в одну строку и cдвиги

Размер массива в C/C++:

MyHugeStructure array[100];
int array_size = sizeof(array)/sizeof(*array);
for(int i = 0; i < array_size; i++)
array[i].id = i;

Следующие два варианта актуальны и для других языков.

Switch в одну строку с поддержкой всех типов:

str = number == 1 ? "one" : 
      number == 2 ? "two" :
      number == 3 ? "three" :
      number == 4 || rand() == 42 ? "four" :
      number == 5 ? "five" :
      "unknown number";

Стандарт C — штука нестрогая. Например, char — это не 1 байт, не 2 и не 4. char — это sizeof(char) и единственное ограничение: sizeof(char) < sizeof(int). Вспоминаем, что из себя представляют числа в памяти и поэтому НИКОГДА не пытаемся поделить на 2 через сдвиг отрицательное число.

//ТАК ДЕЛАТЬ НЕЛЬЗЯ!!
int a = -2;
printf("%dn", a >> 1);

Взято отсюда