|
|
|
borisbn |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
Здравствуйте.
Имеется такой код:
А теперь самое интересное: в gcc 4.1.2 это не линкуется - http://codepad.org/LB1506hR в gcc 4.3.2 линкуется - http://ideone.com/q1Uik8 в gcc 4.5.2 опять не линкуется - это уже на моей машине. ссылку дать не могу. в gcc 4.7.2 снова линкуется - http://ideone.com/rP6zIF Вопрос: ошибка у меня и необходимо добавить
или ошибка в компиляторах, в которых не линкуется ? И вообще, что за чехарда с компиляторами (вернее с версиями) ? Или м.б. это какая-то настройка (на ideoone она включена, а у меня и на codepad нет) ? Если да, то какая ? Спасибо. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
volatile |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Вы уверены в версии? (возможно еще разные версии выходили параллельно (?не знаю), то есть возможно еще год релиза нужно смотреть) В шестой студии тоже нельзя было инициализировать стат.константы в классе. В поздних версиях уже можно. Почему? Видимо в силу тумнности выражений стандарта С++, создатели компиляторов не вкурили его достаточно глубоко. Посему старые версии такое не переваривают. Новые же версии, (даже с ключами например -std=c++98), переваривают нормально.
|
||||
|
|||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
> Вы уверены в версии?
Да, вроде. Вызывал g++ -v и он выдал 4.5.2. По поводу года не скажу. Он был в поставке с Ubuntu 11.04. Интересно то, что ошибка линковки возникает только если брать адрес (сылку) этой переменной (в моём случае это std::min). Если же использовать только как rvalue, то ошибки нет. Я, всё-таки, склоняюсь к мнению, что тут дело в настройках компилятора... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
borisbn, Да я понимаю ваше молчание...
Действительно, с какого это перепуга, правильность кода (компилируемость) зависит от введения/невведения оптимизации. Код либо правильный, либо нет. Оптимизация на это не должна никак влиять. Очень похоже на баг gcc. (Хотя логически понять причины такого поведения можно) Вот максимально-сокращенный код который не компилируецца у меня на gcc 4.7.0 ни при каких оптимизациях. Но кстати, прекрасно компилицца на студии.
Приглашаюцца к обуждению опытные gcc-шники, зубры-линуксоиды, а также вообще знатоки приплюснутых стандартов. Велкам... |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: нет Всего: 135 |
volatile, не.. я не по этому молчал. Вы попросили посмотреть параметры компиляции на моей машине, а её у меня на время забрали.
А по поводу оптимизации - вроде в online-компиляторах она выключена... И да.. не должна она влиять. Единственное - м.б. есть какая-то опция, влияющая на такое поведение ?
Поддерживаю. Ждёмс. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
, может все таки у студии баг (именнуемый в народе фичей) ?
Это сообщение отредактировал(а) mes - 9.6.2013, 12:49 |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
mes, ваша цитата мимо кассы. здесь говорицца для случая когда нет инициализации в описании класса. (Кстати в этом случае и студия компилировать не будет) И потом, давайте оставим студию, раз вас так она раздражает. Сам факт что компилируемость кода зависит от оптимизации, уже достаточно стрёмен, не находите ? Это сообщение отредактировал(а) volatile - 9.6.2013, 23:26 |
|||
|
||||
mes |
|
||||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
как по мне, так тут как раз таки грицца о случае, когда она есть при декларации внутри класса, и ее отсутвии вне класса..
да, это баг.. приведенный последний пример не должен компи линковаться ни при каких оптимизациях.. за исключением случая, когда факт использования взятия адреса с'оптимизирован : ни капли не раздражает, просто у них свой взгляд на вещи и ориентироваться по ней на стандартность поведения "рискованно" Это сообщение отредактировал(а) mes - 13.6.2013, 19:48 |
||||
|
|||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
||||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
Да и кстати, в окончательном варианте стандарта 2011, вашей цитаты, вообще нет (по крайне мере в данном пункте, и ближайших окрестностях). Дальше идёт про другое... Так что спорить о переводе не известно откуда взятой фразы, не имеет смысла. Добавлено @ 00:27 Это сообщение отредактировал(а) volatile - 14.6.2013, 00:38 |
|||
|
||||
mes |
|
||||||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
ну так с более 10ка лет был актуален другой стандарт, в котором эта фраза была актуальна.. ну и ?? обратили внимание на constexpr specifier ? и гдепродолжение цитаты, которое описывает приведенный Вами случай ? пару строчек ниже :
Добавлено @ 01:02 если внимательно прочитали цитату, то
в общем случае сомнительно считать багом, если линкуется потому, что оптимизатор выкинул ненужные связи.. Это сообщение отредактировал(а) mes - 14.6.2013, 01:04 |
||||||
|
|||||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: нет Всего: 85 |
mes, Ну хорошо, давайте предположим на миг что ваша трактовка верна, В вашей цитате ведь говорицца вообще о "статической константе" как таковой. Там нет ни слова ни о взятии адреса, ни о чем либо подобном. Что означает (если трактовать по вашему), абсолютно правильный компилятор вообще не должен принимать статическую константу, без отдельного определения ее где-то в *.cpp Не только взятие адреса (о котором, повторяю нет ни слова), но и именно саму константу! Именно так ваша трактовка и звучит. Не больше и не меньше. Но gcc, вашей трактовке не соответствует, даже с ключом -pedantic. (тестовый код элементарен, не привожу) Более того, вашей трактовке, не соответствует ни один известный мне компилятор. Так что смысла продолжать дисскуссию не вижу. |
|||
|
||||
mes |
|
||||||||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 1 Всего: 250 |
давайте хоть на миг )
не совсем, в середине цитате говорится еще об использовании константного выражения ассоциированного с константой
нет, Вы не правильно трактуете мою трактовку.. так упустили то самое предложение из середины цитаты.. и не обратили почему же стоит "still" и "if" в последнем предложении, которые явно намекают, что должна быть еще одна ситуация..
о взятии ни слова, но есть слова об использовании константы и использовании константного выражения... Акцент на взятии адреса был потому, что подобное использование никак нельзя отнести к константому выражению.. именно так Вы хотите ее воспринимать.. не моей )) так действительно, чего продолжать если подменяете сказанное своими ожиданиями услышанного.. |
||||||||
|
|||||||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | GNU toolchain | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |