зачем нужна проверка при #define?
В одной из книг встретил вот такую конструкцию
#if ! defined MANY || MANY < 1
#define MANY 10
#endif
хотя там можно обойтись только
#define MANY 10
дальше в программе MANY используется только как волшебное число. В других файлах оно тоже не переопределяется. Так зачем понадобилась проверка?
Книга ООП для ANSI C, страница под номером 5
Единственное, что приходит в голову - это не удалённый артефакт.
Ответы (1 шт):
Такой способ позволит создать некий набор "препроцессорных опций", имеющих значение по-умолчанию. Если написать просто #define MANY 10, то чтобы поменять это значение пользователю необходимо будет исправлять исходник. Если его не задать совсем, то пользователь будет обязан как-то определить этот макрос. Хотелось бы дать пользователю возможность настроить этот параметр самостоятельно, а если пользователь не желает этого делать, то использовать значение по-умолчанию.
//Если макрос MANY отсутствует,
//либо его значение меньше единицы (ошибочное для кода из книги)
//то наделяем этот макрос неким дефолтным значением
#if ! defined MANY || MANY < 1
#define MANY 10
#endif
Теперь пользователь имеет возможность задать макрос MANY самостоятельно.
Например, есть возможность передать его значение в строке компиляции:
gcc source.c -DMANY=13
Теперь MANY представляет значение 13, и ветка с определением его как 10 будет пропущена.