-
- А что тут странного? Что такое, например, ADC2 как не константа. Или нет? - Bill(20.10.2013 13:11)
- здесь это адрес регистра. У топикстартера адрес переменной, это тоже константа, если переменная статическая. Если же она не статическая, то он сам себе злобный буратино - koyodza(20.10.2013 13:16)
- Еще раз: для компилятора адрес не является константой! Чему этот адрес равен: 1, 100, 1000? - Bill(20.10.2013 13:18)
- адрес статической переменной элементарно может выступать в роли константы. Может не во всех случаях, но по крайней мере для switch подходит, если выполнить приведение типов - koyodza(20.10.2013 13:20)
- Чему конкретно равен этот адрес: 1, 10, 20? - Bill(20.10.2013 13:24)
- вычисляется на этапе линковки - koyodza(20.10.2013 13:28)
- Вот именно!!! На этапе компиляции это значение неизвестно и, стало быть, не является константой! - Bill(20.10.2013 13:31)
- ну компилятор может вычислить что адреса ссылаются на разные объекты, а линкер заполнит их при линковке - zeleny(21.10.2013 00:20)
- ну и что? - koyodza(20.10.2013 14:30)
- а как поведёт себя программа, если два выражения в case окажутся одинаковыми после линковки? - инженегр(20.10.2013 14:39, )
- Да дело даже не в этом. Компилятор просто не сможет отсортировать значения case. - Bill(20.10.2013 14:45)
- Теоретически компилятор может заниматься "тупым перебором" при невозможности отсортировать на этапе компиляции, но вот предсказуемости от такой программы ждать не следует. - инженегр(20.10.2013 15:58, )
- В том-то и дело, что в соответствии со стандартом все значения case должны быть константами или константными выражениями, вычисляемыми на этапе компиляции. - Bill(20.10.2013 16:09)
- Теоретически компилятор может заниматься "тупым перебором" при невозможности отсортировать на этапе компиляции, но вот предсказуемости от такой программы ждать не следует. - инженегр(20.10.2013 15:58, )
- Да дело даже не в этом. Компилятор просто не сможет отсортировать значения case. - Bill(20.10.2013 14:45)
- Ну а значение case должно быть константой. Поэтому программа и не компилируется. - Bill(20.10.2013 14:34)
- а как поведёт себя программа, если два выражения в case окажутся одинаковыми после линковки? - инженегр(20.10.2013 14:39, )
- Вот именно!!! На этапе компиляции это значение неизвестно и, стало быть, не является константой! - Bill(20.10.2013 13:31)
- вычисляется на этапе линковки - koyodza(20.10.2013 13:28)
- Чему конкретно равен этот адрес: 1, 10, 20? - Bill(20.10.2013 13:24)
- адрес статической переменной элементарно может выступать в роли константы. Может не во всех случаях, но по крайней мере для switch подходит, если выполнить приведение типов - koyodza(20.10.2013 13:20)
- Еще раз: для компилятора адрес не является константой! Чему этот адрес равен: 1, 100, 1000? - Bill(20.10.2013 13:18)
- здесь это адрес регистра. У топикстартера адрес переменной, это тоже константа, если переменная статическая. Если же она не статическая, то он сам себе злобный буратино - koyodza(20.10.2013 13:16)
- А что тут странного? Что такое, например, ADC2 как не константа. Или нет? - Bill(20.10.2013 13:11)