Когда я выполняю следующий код, выводится 5 6
.
int main()
{
int one = 5, two = 6;
#ifdef next
one = 2;
two = 1;
#endif
printf("%d %d", one, two);
return 0;
}
Определенно код внутри #ifdef #endif
не выполняется.
Я не могу понять полезность идентификатора next
. Какое ключевое слово вместо next
заставит компилятор выполнить код внутри секции #ifdef #endif
?
@FredLarson: next
плохое имя, но все заглавные буквы архаичны. Это связано со временем ограниченных наборов символов и длин идентификаторов. Для многих макросов нет практической причины, по которой стиль макроконстанты должен отличаться от стиля для static const int
или enum
: для пользователя это просто символ какой-то константы или значения конфигурации, и в этом его суть. имя должно передать.
@EricPostpischil: я бы сказал, что одной из причин является масштаб. Макрос с плохим названием прорвет всю единицу перевода, сея хаос, совершенно не осознавая области действия. Можно утверждать, что макросы сами по себе в значительной степени архаичны (ну, по крайней мере, в C++. Возможно, в меньшей степени в C). Там, где они все еще полезны, мне нравится, чтобы они выделялись как можно больше.
Вы просто определяете макрос
#define next
int main()
{
int one = 5, two = 6;
#ifdef next
one = 2;
two = 1;
#endif
printf("%d %d", one, two);
return 0;
}
Теперь значения изменятся.
Я был бы очень осторожен с использованием имени макроса, которое является коротким, общим и в нижнем регистре. Возникающая путаница может свести с ума. Обычно имена макросов пишутся ЗАГЛАВНЫМИ БУКВАМИ, чтобы уменьшить вероятность конфликтов имен.