Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
17.04.2015
Размер:
34.77 Кб
Скачать

10. Стиль программирования.

При записи макросов и констант соледует придерживаться следующих правил записи:

1. Выбор имен для констант и макрокоманд

Константой является имя, которое связывается Си-компилятором с неизменяемым в программе значением. Для используемых в программе констант и макрокоманд следует выбирать содержательные имена. Кроме этого, чтобы помочь программисту, читающему исходный код, отличать имена констант от имен переменных, для задания имен констант и макрокоманд рекомендуется использовать прописные буквы. Следующие директивы #define содержат различные определения макрокоманд (макроопределения):

#define TRUE 1

#define FALSE 0

#define PI 3.1415

#define PROGRAMMER "Kris Jamsa"

Константы могут содержать целые числа, числа с плавающей точкой и символьные строки.

2.Хорошим стилем будет использовать дополнительные скобки в сложных макросах. В примере выше переменная "x" всегда окружена своими собственными круглыми скобками. В этом случае выражение будет вычесленно полностью перед сравнением с 0 или умножением на -1. Также, окружая скобками параметры, мы предовращаем загрязнение кода .

Скобки, содержащиеся в макроопределении, позволяют избежать недоразумений, связанных с порядком вычисления операций. Например, при отсутствии скобок выражение t=LENGTH*7 будет преобразовано в выражение t=80+10*7, а не в выражение t=(80+10)*7, как это получается при наличии скобок, и в результате получится 780, а не 630.

3.Идентификатор (макрос) в директиве define принято записывать прописными буквами:

Программисты, пишущие на С, часто используют заглавные буквы для определения идентифика­торов. Данное соглашение помогает любому человеку, читающему программу, бросив на нее один взгляд, узнать, что он имеет дело с макросом. Также вce #define лучше помещать в начале файла или вообще в отдельный заголовочный файл.

11.Директива undef

Директива undef используется для отмены действия директивы define, синтаксис которой

#undef идентификатор

В некоторых примерах были использованы константы и макрокоманды, которые либо определены препроцессором, либо определялись в самой программе (или ее заголовочном файле). В зависимости от потребностей программы, может оказаться необходимым, чтобы препроцессор отменил или переопределил одну или более таких констант. Например, по следующей макрокоманде переопределяется макрокоманда _toupper, которая определена в заголовочном файле ctype.h:

#define _toupper(c) ((((с) >= 'а' ) && ( (с) <= 'z' ) ) ? (с) - 'а' + 'А': с)

При компиляции программы многие препроцессоры будут выдавать предупреждающее сообщение, информирующее о переопределении макрокоманды. Для того чтобы избежать вывода предупреждающего сообщения, следует использовать директиву #undef следующим образом:

#undef_toupper

#define_toupper(c) ((((с)>='а')&&((с)<='z')) ? (с) - 'а' + 'А': с)

Директива отменяет действие текущего определения define для указанного идентификатора. Не является ошибкой использование директивы undef для идентификатора, который не был определен директивой define, например:

#undef WIDTH

#undef MAX.

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

#undef ИмяЗамещаемойЧасти

Эта инструкция прекращает действие препроцессора по замене соответствующего идентификатора.

#define PI 3.14 + 0.00159

float pi1 = PI;

#undef PI

#define PI 3.14159

float pi2 = PI;