Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

44m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 1. Держим оборонуClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

себе жизнь в будущем, если придется вернуться к этому коду, особен% но если можно управлять выводом диагностики.

Существует ряд систем диагностирования, облегчающих такую работу. При этом часто наличие диагностики не влечет накладных расходов, когда она не требуется; ее можно удалить путем условной компиляции.

Выполняйте приведение типов с осторожностью

Большинство языков позволяет приводить (преобразовывать) данные из одного типа в другой. Эта операция не всегда проходит успешно. Ес% ли вы попытаетесь преобразовать 64%разрядное целое в меньший, 8%раз% рядный тип, то что произойдет с 56 оставшимися битами? Среда вы% полнения может неожиданно сгенерировать исключительную ситуа% цию, а может исказить ваши данные, ничего при этом не сообщив. Программисты часто не задумываются над такого рода вещами, а по% тому их программы ведут себя неожиданным образом.

Если вы действительно хотите выполнить преобразование типа, тща% тельно продумайте его. Фактически вы говорите своему компилятору: «Забудь про контроль типа – я лучше знаю, что это за переменная». Вы делаете пролом в системе типов и смело идете в него. Это зыбкая почва: если вы ошибетесь, компилятор не станет вам помогать, а тихо пробормочет про себя: «Я тебя предупреждал». В лучшем случае (на% пример, если вы пишете на Java или C#) среда исполнения может опо% вестить вас путем генерации исключения, но это зависит от конкрет% ного преобразования.

Для C и C++ особенно характерна неопределенность в точности раз% ных типов данных, поэтому не рассчитывайте на взаимозаменяемость типов. Не следует предполагать, что int и long имеют один и тот же размер и могут присваиваться один другому, даже если на вашей плат% форме это проходит. Код может переноситься с одной платформы на другую, но плохой код переносится плохо.

Подробности

Есть много приемов создания защитных конструкций на нижнем уровне, основанных на разумной практике кодирования и здоровом недоверии к окружающим. Например:

Определяйте поведение по умолчанию

В большинстве языков есть оператор switch (переключатель), позво% ляющий любую неожиданность обработать в группе default (по умолчанию). Если попадание в default является ошибкой, явно от% разите это в коде. Если ошибки нет, также отразите это в коде, и то% гда сопровождающему код программисту станет все ясно.

Аналогично, если вы пишете оператор if без предложения else, за% думайтесь, не следует ли обрабатывать логический случай по умол% чанию.