Урок 12.1. Определение символических констант

12.1. Определение символических
констант

Для определения символических констант служит уже знакомая Вам
директива #define. Как и все директивы препроцессора, директива #define начинается
с символа #. В простейшем случае общая форма записи директивы #define
следующая:

#define
_идентификатор_ _строка подстановки_

Здесь _идентификатор_ - любое имя, записанное в соответствии с
правилами Турбо Си. _строка подстановки_ - строка, на которую замещается любое
вхождение _идентификатора_. Единственное исключение - если _идентификатор_
встречается в строке, заключенной в кавычки. В этом случае _идентификатор_
считается частью символьной строки и подстановка не производится. Определения,
даваемые директивой #define имеют силу от места, где встретилась эта директива
до конца файла.

Пример:

#define STRING1 "Это строка номер
один"

main ()

{

printf ("STRING1: %s\n",STRING1);

}

В результате работы этой программы будет напечатано:

STRING1: Это строка номер один

Как видим, в первом случае STRING1
не было замещено. И произошло это потому, что STRING1 "защищено" кавычками. _строка
подстановки_ должна уместиться физически в одной строке. В противном случае ее
можно перенести на следующую строку с помощью символа \.

Например, записи

#define STRING1 "Это строка \

номер один"

и

#define STRING1 "Это строка номер
один"

совершенно идентичны.

После того, как произведена подстановка, результирующая строка снова
просматривается и если в ней есть имена, определенные с помощью директивы #define, они замещаются соответствующими
подстановками.

Например, вследующемфрагменте:

#define ADDRESS BASE+OFFSET+INDEX

#define BASE 534

#define OFFSET 612

#define INDEX 163

. . .

x=ADDRESS;

после обработки строки x=ADDRESS; препроцессором, она превращается в x=BASE+OFFSET+INDEX; , которая в свою очередь после обработки
препроцессором превращается в x=534+612+163; и в таком виде передается
компилятору,а сложение производится уже при выполнении программы.

Если с помощью директивы #define
определено имя, ранее уже определенное с помощью другой директивы #define, препроцессор выдает предупреждение о
переопределении константы, но продолжает работать. Использование символических
констант чрезвычайно полезно, так как программы становятся более мобильными,
переносимыми. Кроме того, смысл таких констант яснее и программы легче
модифицировать.

Например:

int table[100]; /* количество элементов в
таблице */

 

#define NUM_ELEM 100

int table[NUM_ELEM]

Очевидно, что второе описание более наглядно, чем первое.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов