Hanabishi
А это здесь так необычно? Забыл написать в начале, просто привык на вм все запускать.
Не то, чтобы необычно, просто у вм своих багов хватает и искать там причину — последнее дело. Почитайте хотя бы новости на опеннете: каждый новый выпуск вмвари сопровождается не сколько фичами, но исправлениями. Конечно же, намного проще диагностировать проблему с реальным оборудованием.
[email protected]# cat /dev/ass > /dev/head
СТОП: у вас арч в виртуалке стоит?
Если да, то я пас...
[email protected]# cat /dev/ass > /dev/head
Покажи вывод /var/log/Xorg.0.log.
[email protected]# cat /dev/ass > /dev/head
maisvendoo
Вообще Си многое прощает в плане несуразностей, которые потом выходят боком.
Да, с этим не могу не согласиться! Но ведь именно это и позволяет ему до сих пор оставаться основным языком системщиков. Это язык, который даёт вам полную свободу, и как вы ею воспользуетесь, так оно и вылезет в будущем, ага. Самый, можно сказать, демократичный язык, в плане реализации своих задумок :-) Правда потом частенько и сам не помнишь все эти хитросплетения своего алгоритма. Бывает, что строчек написано не так много, а сидишь и вспоминаешь, как это работает. Даже комментарии не всегда помогают. Но в последнее время основные мысли я стал оформлять в виде схем блоков, как бы по-детски это ни звучало; их придумали не зря и они экономят мне кучу времени.
[email protected]# cat /dev/ass > /dev/head
Ну да, я в вашем блоге давно не видел новостей. Если я правильно понимаю концепцию указателей, то это есть не что иное, как старательно выпиленный оператор GOTO? :-) Вообще, написание ОС — дело, требующее, как минимум, знания всей архитектуры ЭВМ, ассемблера, ну, и, особенностей всех компиляторов, компоновщиков etc. тех языков, коими пишется сия ОС. То, чего вы достигли, уже заслуживает того, чтобы снять перед вами, при встрече, шляпу :-)
[email protected]# cat /dev/ass > /dev/head
А ещё больше треша и угара начинается, когда по запарке присваиваешь локальной переменной то же имя, что и глобальной....
[email protected]# cat /dev/ass > /dev/head
maisvendoo
Глобальные таки зануляются,
Считаю это моветоном. Я всегда зануляю от греха подальше, ибо компиляторы разные, а знать все их особенности тяжко
Ооу, указатели — это вообще тема для отдельного доклада на несколько томов, сколько уже эпосов писано по их душу :-)
[email protected]# cat /dev/ass > /dev/head
Вы на си программировали когда-нибудь? Попробуйте не обнулить переменные и посмотрите что будет; результат вас может сильно удивить. Неужели нужно ещё разъяснять для чего это делается? Nafanja писа́л, что яблок у буратино осталось x+3. x — в данном случае неизвестное, но, когда пишешь код, — в той ячейке памяти, куда присвоится x, может быть что угодно. Вы не путайте математическое выражение и выражение в коде. В коде a = x + 3 — знак «=» является присваиванием (надеюсь, не нужно объяснять, что это такое и чем оно отличается от равенства (которое в коде выглядит как «==»)?), в то время, как в математике это является равенством. С математической точки зрения Nafanja прав, с программистской же — нет. Вся беда в том, что в математике ответ х+3 допусти́м, в то время, как в программе каждой переменной (в данном случае х) должно соответствовать строго определённое значение.
Итак задача:
Дано: Буратино дали 5 яблок, 2 из них он съел.
Вопрос: Сколько яблок осталось у буратино?
Решим эту задачу математически: Буратино обозначим переменной а. Если предположить, что у буратино уже было какое-то количество яблок (мы не знаем какое), то это неизвестное мы обозначим за х (что и предложил нам Nafanja). Т.е. а = х + (5 - 2), а = х +3.
Математический ответ: У буратино осталось х + 3 яблок.
С этим разобрались. В математике х + 3 допустимо.
Решение программистским способом (на си):

# include <stdio.h>

main ()
  {
    int a, x;      /* объявим переменные, но не проинициализируем их (боже, сколько программ сложилось от этого!) */

    a = x + (5 - 2);     /* буратино (а), дали 5 яблок, 2 из которых он съел, х - неизвестное кол-во яблок у буратино */

    printf ("Кол-во яблок у буратино: %d\n", a);      /* покажем наш результат миру */

    return 0;
  }
Что же у нас получится, когда мы выполним cc buratino.c? А получится белиберда, ибо переменные у нас не проинициализированы и при выполнении программы в ячейку а (она тоже не проинициализирована, но это не критично, т.к. выражение справа, по сути, является инициализацией этой переменной) запишется выражение х + (5 - 2). 5-2 программа высчитает, а вот с х что прикажете делать? Программа не выведет вам «математический» ответ в виде х +3, нет! в х программа присвоит произвольную область памяти, не проинициализировав (обнулив) её, что повлечёт за собой присваивание этой злосчастной х рандомное число (по сути то, что было в этой ячейке памяти до того, как туда обратилась наша программа; а быть там могло что угодно, т.к. менеджер памяти при выделении программе памяти заполняет её случайными данными).
В общем я устал писать, кто не понял, тот ССЗБ :-)
[email protected]# cat /dev/ass > /dev/head
Я бы посмотрел это выражение в коде :-)
a = x + 3 ? :-)
[email protected]# cat /dev/ass > /dev/head
Буратино дали пять яблок. Два из них он съел. Вопрос: сколько осталось у него яблок? Думаете три? А вот фиг! Никто не может сказать наверняка, сколько у него уже было яблок. Мораль: обнуляйте переменные!))
[email protected]# cat /dev/ass > /dev/head