Макрос - это НЕ процедура. Это КОНСТАНТА. Это просто способ написания констант в отдельном месте с последующей ссылкой на это место.
Подстановка вместо имени макроса его содержимого происходит еще ДО исполнения кода. В момент компиляции. Это значит, что в Вашем случае, содержимое макроса #section() никак, никоим образом, не будет зависеть от условия. Оно всегда будет равно значению, присвоенному "ниже" по телу метода. В данном примере, всегда будет равно #define.selection(#selectField2)
Соответственно, смотрите, что именно будет в теле макроса на момент выполнения цикла while
|