Константы и препроцессор С
Иногда в программе приходится использовать константы. Можно объявить константу общеизвестным методом, например так:
float pi;
pi=3.14159;
однако в этом случае pi остается переменной и есть опасность, что программа может случайно изменить ее значение. Гораздо надежнее и удобнее объявить константу используя директиву препроцессора:
#define PI 3.14159
Это называется подстановкой во время компиляции. В этом случае вы можете быть уверены, что всюду в программе, где указана константа PI будет подставлено определенное значение. Особо отметим, что определение константы в этом случае делается именно так, как указано в примере, без знака равенства (=)! Это важно. Если во время определения константы будет сделана ошибка и указан знак равенства, например, так:
#define PI = 3.14159
то везде в программе в качестве константы будет подставлено значение ʺ= 3.14159ʺ.
Имена констант принято набирать заглавными буквами.
Заметим так же, что в программе используется спецификатор %1.2f, который требует округления до двух знаков после десятичной запятой.
Оператор #define может использоваться так же для объявления символьных и строчных констант:
Стандарт языка C90 позволяет использовать еще один способ создания символьных констант при помощи ключевого слова const для преобразования объявленной переменной в константу:
const int MONTH = 12; /*MONTH – символическая константа со значением 12*/
Препороцессор в С – полезное и важное инструментальное средство, необходимо овладеть им и использовать его чаще.
Функция printf()
Инструкции, которые вы даете printf() , обращаясь к ней с требованием печати переменной, зависят от типа этой переменной. Например, ране е мы использовали форму записи %d при печати целого числа и %с - при печати символа. Эти указания называются спецификациями преобразования, поскольку они определяют, каким образом преобразуются данные в форму, пригодную для вы вода. Далее приведем список спецификаций преобразования, которые стандарт ANSI С предусматривает для функции printf(), и затем покажем, как следует использовать наиболее употребляемые из них.
В таблице. 4.3 приведены спецификаторы преобразования и типы вывода, который они обеспечивают.