‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Кодю тут, на досуге (2)

Нашёл причину странного сбоя компилятора. Как оказалось, 32-битные компиляторы дают работоспособный код, 64-битные - нет. Начал искать внимательно и таки да, дело в разрядности указателя: я забыл подключить заголовочный файл, в котором описан прототип функции evaluate. И компилер, наткнувшись на неё и НЕ зная ещё о том, что она возвращает указатель, посчитал, что возвращаемое значение - просто целое число (при отсутствии явного прототипа он предполагается). Соотв., для 32-битного компилера длина указателя равна длине обычного int, а вот 64-битный указатель тупо режется и в возвращаемое значение попадает только младшая его часть (ибо для 64-битных систем длина int по-прежнему 32-бита)! Вот и выходило, что когда именно эта функция возвращает наверх своё значение, оно где-то ломалось и передавалось обратно уже в бессмысленном виде.

Подключил заголовочный файл, компилер увидел прототип функции и сгенерил таки правильный код.

Хех. Проблема нашлась бы раньше, если бы я сразу обратил внимание на странное предупреждение, что "присваивание делает указатель из целого без явного преобразования".

Так-то.


Вот результат вызова функции print (простейший вывод списка аргументов), которой передаётся три числа и некий список:
( 100 200 300 600 )
А если перед списком (который в данном случае есть вызов функции суммирования нескольких чисел) поставить символ цитирования (классический лисп мне не нравится в этой части тем, что использует две разных верхних кавычки и чисто визульно их бывает нелегко различить - только по контексту: одна кавычка для цитирования, другая для составления макросов... поэтому вместо цитирующей кавычки у меня тут знак $), то вывод будет таким:
( 100 200 300 ( #+ 100 200 #$ 300 #$ ) )
Тут видно, что перед числом 300 и закрывающей скобкой тоже есть символы цитирования. Я поставил их намеренно для проверки того, как оно сработает - оно сработало верно: в случае цитирования числа возвращается само число, а цитирование "ничего" ничего не возвращает! гениально!

осталась самая малость -- написать всё остальное. Практической необходимости, наверное, нет - но мне интересно конструировать такую штуку. А там, глядишь, применю где-нибудь.
Subscribe

  • Голоса в их голове

    Почему тупые так любят тупо пиздеть про свою веру, зачем-то ещё и приписывая её тем, у кого её нет? add по мнению тупого веруна, я его забанил (и…

  • Очередной титан духовнистости.

    Вот он, русский характер - густо полить грязью тех, до кого в интеллектуальном плане никогда не дотянуться... Мечтающие о расовых чистках всегда…

  • Обыкновенный

    занятно, когда какая-то юная деревенщина пытается учить жизни сформулируем иначе - 5 мая 1961 американский астронавт летал в космос на американском…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 6 comments