9:38p |
Программистские досуги Развлекаясь сборкой разных версий мадов (MUD) я нашел интересный баг (или не баг, а фичу).
Некий код не собирался при помощи gcc 4.4.5 (Debian 6), хотя я помню, в 5 Дебиане я его собирал без проблем. Более подробный анализ показал следующую ситуацию:
Есть массив int flag[3]
flag[0] - это lvalue, это понятно
А вот конструкция вида
(i<0) ? flag[0] : flag[1]
рассматривается старым компилятором (3.*) как lvalue, а новым (4.*) нет
Возникает вопрос, есть ли у gcc 4.4.5 флага, чтобы он вел себя как 3.*, хотя бы в этой ситуации. Если нет, я тупо перепишу макрос на 3 строчки в функцию и все разрулится. Вообще, кто копал коды CircleMUD, это ужасужасужас. Эти упоротые укурки из Дании очень любят макросы, многострочные, длинные и много раз вложенные, хорошо, хоть без рекурсии |