В 32-битной архитектуре long обозначается двумя словами . А теперь представьте, что могло бы случиться, если бы из-за недостаточной синхронизации выполнение оператора switch наблюдало бы long с его старшими 32 битами от одной записи, а 32 младшими - с другой! Он мог бы попытаться пойти… кто знает куда! В основном где-то наугад. Даже если обе записи представляют допустимые случаи для оператора switch, их забавная комбинация, вероятно, не приведет ни к первому, ни ко второму - или, что еще хуже, это может привести к другому допустимому, но не связанному с ним случаю!
По крайней мере, с int (или меньшими типами), независимо от того, насколько сильно вы напортачили, оператор switch по крайней мере прочитает значение, которое кто-то на самом деле написал , а не значение «из воздуха».
Конечно, я не знаю истинной причины (прошло уже более 15 лет, я так давно не обращал внимания!), Но если вы понимаете, насколько небезопасной и непредсказуемой может быть такая конструкция, вы согласитесь, что это определенно очень хорошая причина, чтобы никогда не включать longs (и, как и предполагалось long -pun, будут 32-битные машины, эта причина останется в силе).