В книге не дается полная программа, а только утверждается, что переменный угол является двойным, а angletype - это int, который каким-то образом определит, какой случай использовать?
Этопохоже, что angletype
, вероятно, является перечислением, например:
typedef enum {
DEG,
RAD
} AngleType;
AngleType angleType;
Где-то в коде, предшествующем switch
, значение angletype
должно быть установлено на одно из значений.(Перечисление - не единственный путь ... DEG
и RAD
, конечно, могут быть #define
с, но в любом случае, если вы его нарезаете, DEG
и RAD
имеют некоторые установленные значения, известные при компиляциивремя и angletype
является переменным.
В случае, если angletype
равно DEG
, то switch
переходит к случаю DEG
:
case DEG:
angle *= PI / 180.0; /* convert to radians */
/* fall through */
case RAD:
while (angle > PI) /* normalise radians */
//...
СначалаЛиния в теле случая DEG
преобразует angle
в радианы, умножая ее на π / 180 (поскольку в π радианах 180 °). Как только angle
преобразуется в радианы, имеет смысл продолжитьс делом RAD
для любой дополнительной работы. Обратите внимание, что в конце дела DEG
нет оператора break
... это означает, что выполнение не останавливается на достигнутом, оно просто продолжается вRAD
кейс.