2 / 2 / 1
Регистрация: 28.08.2013
Сообщений: 414
|
||||||
1 | ||||||
Почему нельзя подставлять переменные в выражения #if #else?26.03.2014, 14:25. Показов 2650. Ответов 27
Метки нет (Все метки)
Почему код работает, не должен же, потому что выражение стоящее после #if вычисляется на этапе компиляции, переменные подставлять нельзя??
0
|
26.03.2014, 14:25 | |
Ответы с готовыми решениями:
27
Почему в switch нельзя определять переменные? Почему нельзя использовать глобальные переменные Почему нельзя использовать в операторе case переменные, которые определены как #define Почему локальные переменные методов нельзя изменять в анонимных классах? |
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
26.03.2014, 18:43 | 21 |
Тем не менее препроцессор может прочитать и то, и другое. И так как на ТС он не ругался, декларацию, причём, даже не константы, а переменной, он понял и девятку подставил. Хотя по идее должен был ругаться отборной нецензурщиной.
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
26.03.2014, 18:59 | 22 |
Было бы кстати неплохо для расширения кругозора узнать, что это за книга и какой у вас компилятор.
0
|
18893 / 9850 / 2410
Регистрация: 30.01.2014
Сообщений: 17,293
|
|
26.03.2014, 19:13 | 23 |
Ничего он не подставил. Он ищет макроопределение обозначенное как а для сравнения с 99, естественно такого нет. Результат будет всегда одинаковый, независимо от того что задано в переменной а.
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
26.03.2014, 19:20 | 24 |
Тогда бы он ругался по-непечатному.
0
|
18893 / 9850 / 2410
Регистрация: 30.01.2014
Сообщений: 17,293
|
|
26.03.2014, 19:24 | 25 |
Не обязан. У препроцессора более простое отношение ко всем: протестируй разные варианты в своем окружении и убедишься. У него философия простая:
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
26.03.2014, 19:51 | 26 | |||||
Это когда
0
|
Модератор
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
|
||||||
26.03.2014, 20:06 | 27 | |||||
короче протестировал я на двух компиляторах
вот такую конструкцию const int a=10;
но если VS молчит как партизан то CodeVision честно сказал так что DrOffset, прав
2
|
18893 / 9850 / 2410
Регистрация: 30.01.2014
Сообщений: 17,293
|
|
26.03.2014, 20:10 | 28 |
taras atavin, ты о чем вообще?
Поменяй в том примере а-малую, на B, например, и результат не изменится. А после проверки добавь #define B 100, увидишь что начнет срабатывать первое условие. Как еще тебе объяснять - не знаю. Не по теме: Это такие дикие основы, что даже странно, почему тут развели тему на 3 страницы.
0
|
26.03.2014, 20:10 | |
26.03.2014, 20:10 | |
Помогаю со студенческими работами здесь
28
Можно ли в запросе фильтра подставлять переменные Почему нельзя командой copy скопировать системные файлы на дискету? Почему? Почему в локальном классе доступны финальные переменные или переменные инициализированные при объявлении На рабочем столе нельзя перетаскивать ярлыки, нельзя копировать файлы и нельзя их вставлять Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |