-
- выражение как раз константное - указатели на константы. Возможно, линкер не видит ? - zeleny(20.10.2013 02:36)
- действительно странно. У меня аналогичная по смыслу конструкция работает нормально koyodza(563 знак., 20.10.2013 10:39)
- А что тут странного? Что такое, например, 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)
- А что толку сравнивать адреса/указатели между собой, если они таковы, как их в памяти расположил компилятор? Т.е. от хранящихся по этим адресам величин независимых. - Ксения(20.10.2013 02:39)
- эти указатели известны на этапе компиляции (по кр.мере линкеру). Не пойму чем switch отличается от if. - zeleny(20.10.2013 02:43)
- На этапе компиляции как раз значение указателя неизвестно. А линкер - это уже совсем другая история. Или нет7 - Bill(20.10.2013 10:25)
- if сравнивает не указатели, а числовые значения, в том числе и вычисляемые с обеих сторон от знака двойного равенства. Тогда как switch может вычислять и сравнивать switch-выражение только с набором case-констант. Сравнивать между собой адреса Ксения(87 знак., 20.10.2013 02:53 - 02:57)
- эти указатели известны на этапе компиляции (по кр.мере линкеру). Не пойму чем switch отличается от if. - zeleny(20.10.2013 02:43)
- действительно странно. У меня аналогичная по смыслу конструкция работает нормально koyodza(563 знак., 20.10.2013 10:39)
- выражение как раз константное - указатели на константы. Возможно, линкер не видит ? - zeleny(20.10.2013 02:36)