Hatred's Log Place

DON'T PANIC!

May 26, 2010 - 2 minute read - programming

Cmake, Qt4 и кросс-компиляция

Есть у меня проектик, он как тестовый полигон, хоть код и достаточно в большом количестве поддается только одной характеристике: исторически сложилось. Но на нем первом я опробовал кросс-компиляцию для Windows из Linux. Теперь его же перевел в обучающих целях на Cmake. Однако, все новое не должно отменять старых достижений, как следствие встал вопрос - а как теперь делать сборку для Windows?

С учетом того, что система сама по себе пока малознакома, решил понапрягать гугл (точнее: http://google.com/linux)

Почти сразу нашел две статьи мини-цикла:

Сделав по этому методу, немного помучавшись, получил все-таки рабочее окружение для отстройки и собрал в проект. Но не давало покоя много ручной суетливой работы, и, практически, полный отказ от уже реализованных методов поиска Qt библиотек в Cmake.

Именно по вышеуказанной причине я решил продолжить изыскания. Поиском по готовым модулям Cmake нашел упоминание некой директивы CMAKE_TOOLCHAIN_FILE, которая, по внутреннему ощущению, должна была мне помочь.

Дальнейший поиск привел меня на вики самого Cmake: How to use MinGW to cross compile software for Windows, где было сказано про тот самый toolchain file. С минимальными изменениями поместил его в каталог cmake в корне дерева проекта.

Ниже приведу листинг этого файла, назвал его win32-x-mingw32.cmake, в адоптации для ArchLinux:

# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)
 
# which compilers to use for C and C++
SET(CMAKE_C_COMPILER i486-mingw32-gcc)
SET(CMAKE_CXX_COMPILER i486-mingw32-g++)
SET(CMAKE_RC_COMPILER i486-mingw32-windres)
 
# here is the target environment located
SET(CMAKE_FIND_ROOT_PATH  /usr/i486-mingw32)
 
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search 
# programs in the host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# next options is needed by some cases
#set(CMAKE_EXE_LINKER_FLAGS
#    ${CMAKE_EXE_LINKER_FLAGS}
#    -Wl,-subsystem,windows
#    -Wl,-enable-auto-import
#    -Wl,-enable-runtime-pseudo-reloc)

# Uncomment this if you have problem: unrecognized option '-rdynamic'
#set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)

set(MINGW32 1)

Это, конечно, не все, остались последние штрихи.

Использование данного тулчайна приведет к установке переменной CMAKE_CROSSCOMPILING, на основании этого, перед вызовом

find_package(Qt4 REQUIRED)

или аналогичного, достаточно вставить (в случае ArchLinux и пакета mingw32-qt из AUR или моей репы mingw32) следующий код:

if(CMAKE_CROSSCOMPILING)
  set(QT_HEADERS_DIR "/usr/i486-mingw32/include")
  set(QT_LIBRARY_DIR "/usr/i486-mingw32/lib")
endif()

После этого сборка осуществляется примерно так:

mkdir win32-build
cd win32-build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/win32-x-mingw32.cmake ..
make

Все! :)

PS проверено на Cmake 2.8.1 и Qt 4.6.2

Updated: обновлён файл тулчейна

May 23, 2010 - 2 minute read -

DokuWiki и web-закладки

Внимание: статья полностью неактуальна ввиду переезда на статику в 2019 году.

Случайно наткнулся на плагин dokubookmark, ставится в два движения, настраиваются неймспейсы… Но тороплюсь.

Для чего нужен: позволяет быстро создать web-закладку (а по сути запись в DokuWiki) на текущий сайт, помимо этого, сразу можете назначить теги (если стоит плагин tag), автоматом так же вставится текущий выделенный текст (если он есть) на странице, это дело можете сразу подправить, выбрать направление: публичные или приватные закладки (для приватных закладок рекомендую отдельнную область имен (namespace), которой назначить, соответственно, ограниченные права) и сохранить.

Как их потом искать? В шаблоне по-умолчанию сразу ставится тег Bookmark, я рекомендую его не убирать, потом по этому тегу просматривать свои закладки. Помимо этого:

  • по назначенным тегам, если озаботились этим
  • поиском по сайту

Что бы это дело работало, создайте себе браузерную закладку (я бы предположил поместить её на панель закладок, если оная у вас включена), с любым именем и следующим содержимым в качестве адреса:

javascript:Q=document.selection?document.selection.createRange().text:document.getSelection();void(window.open('http://SITE/wiki/doku.php?do=dokubookmark&te='+encodeURIComponent(Q)+'&ur='+encodeURIComponent(location.href)+'&ti='+encodeURIComponent(document.title),'dokuwikiadd','scrollbars=yes,resizable=yes,toolbars=yes,width=680,height=520,left=210,top=150,status=yes'));

Только исправьте адрес и путь на сайте на свои.

Все, пробуйте :)

UPD: Поддержка кирилицы

Из коробки пока не работает нормально с кирилицей (решение ниже, оно же отправлено разработчику)

Вы можете заметить, что для экранирования передаваемой строки используется escape(), так что кодировку строки-источника мы определить никак не сможем. Есть другие вызовы, которые так же экранируют строку, но в кодировке UTF-8, не зависимо от настроек сайта, это:

  • encodeURI()
  • encodeURIComponent() Различия между ними можно посмотреть в этой статье (и о escape() так же): http://habrahabr.ru/blogs/webdev/17640/, после чего выберите ту, которая по вкусу.

Но этого не достаточно, в самом плагине, нужно открыть файл helper.php и заменить все вхождения

htmlentities($some_text_var)

на

htmlentities($some_text_var, ENT_COMPAT, "UTF-8")

Дело в том, что у htmlentities(), согласно документации, кодировка по умолчанию ISO-8859-1, за подробностями в документацию (умный форматировщик кода у меня тут, даже ссылки сразу на первоисточники поставил, пользуйтесь).

UPD2: Все, эти пляски не нужны, автор обновил версию, за что ему большое спасибо :)

May 22, 2010 - 1 minute read -

DokuWiki, blog и include плагины

Коротко: include плагин некорректно закрывает <div> если задана опция отображать только первую секцию, в результате может поехать… Ну сами догадайтесь.

Исправление, подразумевается, что мы в директории plugins:

  1. открыть include/helper.php
  2. найти там функцию _get_firstsec(&$ins, $page)
  3. найти в ней строкуphp$ins[] = array('section_close');
  4. заменить на: php$ins[] = array('section_close', array());
  5. очистить кеш
  6. радоваться :)

Вот так выглядело до исправления:

http://img153.imageshack.us/img153/1839/screenshoot201005221900.png

Так после:

http://img232.imageshack.us/img232/1196/screenshoot201005222034.png

UPD: написал письмо разработчикам, отреагировали быстро, в git уже есть изменения :)

May 21, 2010 - 1 minute read -

YouTube и HTML5

На правах реминдера.

http://www.youtube.com/html5

позволяет включить для видео тег

<video>

и забыть о необходимости флеша. Работает сразу в chrome/chromium, для Firefox есть расширение которое заменяет тег на

<embed>

и после этого нормально работает.

May 13, 2010 - 6 minute read - linux

Резервное копирование при помощи rsync+ssh

Статей на эту тему много, к примеру:

Но нигде не нашел внятного объяснения как сохранять права доступа, группу и владельца, особенно, если удаленный сервер (backup-сервер) работает не от пользователя root.

В общем, постановка задачи:

  • инкрементный бекап
  • клиент-сервер
  • сохранять права доступа, владельца и группу
  • сохранять только указанные директории, представлять возможность исключения по паттерну, делать исключения в исключениях :)
  • выполнение каких-то операций пред выполнением резервирования

May 10, 2010 - 2 minute read -

Xorg 1.8

Поставил из любопытства, в частности поглядеть на новые средства конфигурации для Input устройств - теперь HAL не используется, а используется, в Linux (кстати, а как на других *nix?), UDEV.

Сразу, для олдовых мужиков, которые издревле конфигурировали иксы через /etc/X11/XFree86.conf или /etc/X11/xorg.conf, тут практически ничего не изменилось:

  • появилась возможность “дробить конфигурацию”, ложить в отдельных файликах в /etc/X11/xorg.conf.d
  • именно для Input-устройств появилась новая конфигурационная секция (что бы все драйверы не грузились, только нужное) - InputClass о которой можно так же почитать в man xorg.conf (там обратите внимание на новые директивы, которые помогают определять устройство, всякие Match*)

Теперь, как узнать различную информацию которую можно подсунуть этим самым Match*? Тут рекомендуют обратиться к udevadm, но отчего-то у меня она оказалась мало-информативна. Воспользовался логикой: UDEV берет информацию из SYSFS, при помощи правил в /etc/udev/rules.d добавляет/модифицирует свою, но основную можно глянуть и самому в SYSFS. Для этого идем в /sys/class/input делаем ls и смотрим сколько у нас тут всякого! По крайней мере у меня на EeePC:

$ ls
event0   event11  event4  event7  input0   input11  input4  input7  mice
event1   event2   event5  event8  input1   input2   input5  input8  mouse0
event10  event3   event6  event9  input10  input3   input6  input9  mouse1

Ну а потом обзором по всем этим устройствам, меня больше интересовало имя моего тачпада, это оказалось устройство event10:

$ cat /sys/class/input/event10/device/name 
ETPS/2 Elantech Touchpad

Там и другие файлы, другая информация есть, смотрите что нужно.

Из остальных: event1 оказался клавиатурой, там же оказались и ACPI кнопки типа Power Button (event5, event6 - почему только два?), Sleep Button (event4), встроенная usb веб-камера (event8), PC Speaker (event11). Унификация, фигли :)

Ну и вот мои конфиги:

  • Для тачпада: /etc/X11/xorg.conf.d/09-elantech.conf``` Section “InputClass” Identifier “touchpad catchall”
    # Как я получил имя продукта, описано выше MatchProduct “ETPS/2 Elantech Touchpad”

    Option  "SHMConfig"              "on"
    Option  "MaxSpeed"               "1.00"
    Option  "MinSpeed"               "0.75"
    Option  "Emulate3Buttons"        "on"
    Option  "VertTwoFingerScroll"    "1"
    Option  "HorizTwoFingerScroll"   "1"
    Option  "TapButton1"             "1"
    Option  "TapButton2"             "2"
    Option  "TapButton3"             "3"
    Option  "LockedDrags"            "11"
    
    Driver "synaptics"
    

EndSection


  * Для переключения раскладки клавиатуры: **/etc/X11/xorg.conf.d/09-keymap.conf**```
# Мои общесистемные настройки переключения клавиатуры для Xorg 1.8
Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"

        Option "XkbModel"    "evdev"
        Option "XkbRules"    "base"
        Option "XkbLayout"   "us,ru"
        Option "XkbVariant"  ",winkeys"
        Option "XkbOptions"  "grp:lwin_toggle,grp_led:scroll,compose:ralt,terminate:ctrl_alt_bksp"
EndSection

Немного более детально можно почитать:

PS на правах хинта, а то постоянно вылетает из головы: получить базовый xorg.conf: X -configure или Xorg -configure

May 10, 2010 - 1 minute read - projects programming

Crowns 0.4.0

Выпустил версию 0.4.0 из основных изменений:

  • добавлена поддержка подложки (фоновой картинки), для реализации отображения синнузий
  • поддержка импорта из текстовых файлов данных с возрастом, плюс реализована совместимость со старыми форматами
  • оптимизация отрисовки проекций крон: реализована отрисовка кривыми Безье
  • экспорт построений в SVG

Как обычно версия для Windows отстроена путем кросс-компиляции, требуется тестирование.

Полный список изменений: ChangeLog

Скачать: Download

May 1, 2010 - 1 minute read - life

Спокойствие

Как оказывается спокойно с выключенным IM.

Да, вот тут раздача свена, друг, ещё будучи в VL LUG начинал портировать, потом долго мутили немцы: http://www.linux.org.ru/forum/games/4773950

Apr 26, 2010 - 6 minute read - туризм

Нет, мы не эльфы...

Сегодня ходили с Настей на Фалазу в однодневку. В субботу вечером погода пугала серыми низкими облаками, хотя на вопрос от Насти по поводу погоды в воскресенье, уверенно ответил - все отлично, прогноз погоды я ещё не знал. Перед сном таки заглянул и, надо же, действительно - отлично :)

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

По дороге на горнолыжку, несколько не доходя до Пасеки, случился, не нарочно, классический акт стопа попутки (ну откровенно говоря водитель сам остановился..): Настя отходит с дороги по своим делам, я высматриваю корягу, говорю, рядом с ней полежу. Пока делаю сиё труднейшее дело, слышу шум приближающейся машины и, чуть недоезжая, она останавливается. Мне любопытно, поднимаю голову: Настя вышла на дорогу, дверь открыта, разговаривает с водителем, и тут из-за коряги выруливаю я… А ситуация получилась такая: она вышла на дорогу и водителеть притормозил, открыл дверь, спросил куда и предложил садиться, Настя сказала, что не одна (в этот момент выруливаю я). Таким образом с ветерком доезжаем до самой горнолыжке за что, Человеку, большое спасибо :)

Дальше подъем, поднялись по боку трассы до верху, снег тут плотный, влажный. Наверху трассы несколько сместили тропу, сейчас проще подняться до самого конца подъемника и за ним чуть спуститься, высмотреть метки на деревьях краской и топать по тропе. Предварительно спустились вниз к домикам, запаслись водой, на всякий случай. Я надел бахилы.

Тропа пока хорошая, достаточно прочная, но временами таки проваливались по самый пояс. Ненароком вспомнилась сцена из фильма “Властелин колец”, когда герои передвигались по снегу - все проваливались, а эльф бежал по снегу, тогда и родилась присказка которой сопровождалось каждое проваливание: эх, все таки мы не эльфы :)

По тропе вышли на хребет, подниматься было тяжко, решено сделать привал. Находим, как грачи, проталину, Настя быстро собирает “порох” на растопку, я пока подыскивают полешки, что бы удобно сложить костер - вскипятить чаю. Пока собираю, поддтаскиваю, она разводит огонь. Перекусываем, пьем чай, тратим около 40-60 минут, но душевно. Формируем программу-максимум и несколько вариантов программ-минимумов.

Программа максимум:

  • Дойти до вершины, насладиться видом, спуститься, сделать чаю в термос, сделать чаю на привал, дойти и успеть на электричку

Программы минимумы:

  • Дойти до вершины, быстро спуститься, успеть на электричку. Чай не делаем.
  • Не дойти до вершины, топать до часа Ч, поворачивать назад, делать чай, успевать на электричку
  • Не дойти до вершины, топать до часа Ч, поворачиваться назад, не делать чай, успевать на электричку
  • Предыдущее с неуспеванием на электричку :simple_smile:

Выполнили, забегая вперед, программу-максимум :)

Костер после привала затушили: большие палешки повтыкал в снег, мелкие угли присыпали снегом, на всякий. После перекуса стало заметно веселее идти, атож, организм не дурак покушать :) Кроме того, развился навык болталогии, хотя дыхание сбивалось, но болтали о всякой ерунде и не только, вставляя “мы не эльфы” время от времени. По пути встрели группу туристов из пяти человек, судя по рюкзакам - были с ночевой или шли откуда-то далеко (типа траверса или..) из за больших рюкзаков, были тяжелее, поэтому они были точно не эльфы) Кроме того, попутно представляли как будет выглядеть обратная дорога, прикидывали, как лучше, сразу на пятой точке скатываться или использовать её только как средство экстренного торможения, сошлись на том, что на месте решим.

И вот, внезапно, вершина :) Прекрасный вид. На ней опять поставили крест, следанный из подручных материалов - молодцы ребята, кто это сделал, а вот священно-служителям я бы рекомендовал лично такие места посещать, а то по-отрастили брюха, забыв про грех чревоугодия, ну да не я им судья. Осмотрелись, почти сразу за нами поднялись две девочки - Надя и Марина (познакомились чуть позже). Перебросились парой приветственных фраз, приглашаем на обратном пути, если успеют, присоединиться к нашему привалу с костром и чаем. Сказали, отправляемся в обратную дорогу.

Первая часть спуска (до нашего бивуака) была веселой и быстрой, скатывались как на лыжах, тормозя за деревья или любимой частью тела, на которую всегда находятся приключения. Попутно шутили, почему некоторые ёлочки наклонены в строну спуска, сошлись на том, что это их карма быть стопорами, помошниками в торможениях.

На старом бивуаке вновь разводим костер, достаточно быстро кипятим воду для термоса и прямо в нем завариваем чай. Ставим второй котелок, малость перекусываем. Только поспевает чай, подходят девчата, те, которых встретили наверху, тут уж знакомимся, представляемся. Угощаемся чаем и шоколадками. Обратную дорогу идем вместе. Настя подсушивает обувь, носки, у меня влажно, но не хлюпает - польза от бахил явная.

Вторая часть спуска до горнолыжки чуть более трудна - снег тут за день больше подтаял и чаще проваливаемся, хотя тоже быстро преодолеваем. Идя после по дороге, думаем, что хорошо бы кто опять остановился и подбросил, с этими мыслями и болтавней, плавно и незаметно дошли до самой деревни. По дороге находим первого клеща (его проблемы).

В деревне нас встречают собачки, которые за годы жизни много встречались с туристами и научились понимать, когда у них можно по-клянчить какие-то вкусности, мы не можем устоять перед их благодарным и просящим взором, скармливаем остатки сала и колбасу с сыром и обеспечиваем себя экскортом до самой станции :)

За время похода и поездки в электричке пришел к выводу, что болтологию нужно рассматривать с точки зрения релятивисткой механики: расстрояния проходятся быстрее за разговором. Правда пока затрудняюсь сейчас ответить, что именно происходить: сокращение расстояния или убыстрение тока времени. Нужно, однако, садиться за научный труд :laughing: Хотя иногда трудно говорить при ходьбе, да и дышать больше ртом приходится, что бывает чревато.

Кроме того, заметил, что рюкзак нужно иметь всегда с поясным ремнем (пошел со своим спортивно-городским), потому как, даже не очень тяжелый рюкзак, который давит только на плечи, значительно утомляет спину, а с ремнем можно часть нагрузки перенести на поясницу, тем самым повысив комфорт в движении.

Ну все, до новых встреч и новых знакомст в лесу, если всопмню что интересного - допишу.

UPD:

Фото, которые сделала Надя

А это стихи, которые она написала пока обратно ехали в электричке:

№1 Когда не на пару и не на работу Встается легко в без пятнадцати пять, И адреналин прогоняет дремоту Когда начинаешь ботинки искать… Но завтрак сготовлен и собран рюкзак, Созрел в голове план коварный похода, Нельзя упустить электричку никак И вдаль повела нас тропа от порога. Нас лес повстречает прохладой весенней, Прибавив для вкусу дорожную грязь. И после цепочка из этих мгновений Нас в каменных джунглях согреет опять. Дорога к вершине – в капризах из наста, И снег норовит заползти в башмаки Еще б потеплей - и нужны будут ласты, Но в них не удобно по лесу ползти… Нас мало по малу пускает Фалаза, И небо к нам ближе стало чуть-чуть Становиться жить разноцветнее сразу, И рядом маячит Вселенская Суть!

№2 Как-то раз на выходные Мы ударились в бега. Взяли тапки запасные, Взяли в термосе чайка. Без потерей мы добрались, На вершине - солнца свет. Мы б от счастья разорались, Но там был уже дуэт! Саша с Настей не орали, И не прыгали везде, Ну, мы их зауважали, Расспросили: че, да где. Они стрелку нам забили, На хребте да у костра Там все вместе чай попили, Но дорога нас ждала. Электрон не за горами Пешкодрапом – два часа. Восхищались небесами, Говорили про леса… По пути нас провожали Два дворняги – другана, Колбасы когда им дали Обещали ждать всегда. Вобщем мы в больших надеждах На совместный вновь поход, Может, на вершинах снежных, Может и наоборот!

Apr 17, 2010 - 3 minute read - туризм

Из весны в зиму и обратно

Сегодня ходили на водопад на ключе Левый Горбатый (один из “шкотовских водопадов”) в составе трех человек: Я, Юс, Лиза (хотя должно было быть 7 мордолиц), планировали на два дня но так сложилось, что обратились в однин. Но по порядку.

Для начала, на сайте Зеленого есть описание маршрутов на Шкотовское плато, от себя внесу небольшие коррективы как добираться туда, и выбираться от туда, описание для безлошадных :)

Для начала добираемся до Шкотово, сделать это можно на первой электричке, что идет из Владивостока до Тихоокеанской, отправляется в 6.21. Прибывает она примерно в 8.10-8.15, почти сразу есть автобус до Сергеевки, можно сесть до него, или в 9.05 есть автобус 564 (???) Уссурийск-Партизанск (уточните в кассе), если будет задержка.

На автобус садимся, берем билеты до села Центрального, но объясняем водителю, что не на повороте выходим, а чуть дальше “фазенды” (это определение услышал сегодня от водителя, говорит: тут выходят люди, которе потом напрямую в Центральное идут пешком, с поворота слишком круто), где выезд на лесовозную дорогу (географически находится точно севернее самого Центрального). В прошлом году водитель был злой, особо объяснений слушать не стал, сегодня почти как карета остановилась :) и всего 50 руб с человека, даже за багаж не взял - тут видать как повезет, но вообще, спасибо мужику :)

Ну а дальше топаем по дороге, проходим серпантин, дальше, когда обрыв станет слева от дороги, а сопка справа (до этого будет наоборот), спуск к водопаду отмечен кучей наклеек, веревочек на дереве, сегодня там висели буддийские флажки.

Ладно, теперь о впечатлениях.

Собрали в Шкотово, сели на автобус 9.05, доехали, шел мокрый снежок, приехав на поворот в вступив на лесовозную дорогу впечатлились просто страшной кашей из глины, на счастье нам, чуть подмерзшей, так что прошли без особых проишествий.

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

На место пришли около 13 часов, натянули тент, что бы защитить себя и рюкзаки от снега, на печке сделали чаю, попили, перекусили, немного накатили коньячку из фляжки. А вокруг красота: хвойные с толстыми снежными шапками, почти как в фильмах, сам водопад ещё подо льдом, но красоту и впечатления это не отменило: обзор шикарный. И воздух…

Ещё как пришли, все несколько мокрые - снег не сухой же, Юрка переоделся в сухое, я по старинной привычке - нет (лучше двигаться и не мерзнуть или развести костер), сидим, получился такой диалог:

Ю: тебе нормально, не мерзнешь?

Я: неа, нормально

Ю: как так, я в сухом и у меня жира больше!

Я: ну дык, зато у меня - качественней! :laughing:

Вот так, настоящие мужики всегда найдутся чем помериться :)

Обратно выдвинулись примерное в 15 часов. И вот стали замечать, обратный процесс со негом и температурой: ближе к дороге снега вообще не стало, зато дорога превратилась в наглядную демонстрацию весенней распутицы на Руси, а место въезда на грунтовку в сплошное глиняное болото - еле прошли.

Как вышли, в кустах на противоположной стороне дороги, разбили пикничок, почистили обувь, пока подъехал знакомый и добросил до Шкотово. Там, пока ждали, подъехали велосипедисты, что ехали с нами на первой электричке, оказалось с одним, Сашей, уже познакомились, буквально неделю назад - они с нашим общим знакомым ехали на сплав под Партизанск, в общем - Земля квадратная :) Они оказались из турклуба Гринтур, катались до Стеклянухи, там сплавлялись, тоже поделились впечатленями. В общем, доехали вместе в приятной компании, ведь турист туристу, друг, брат и лишняя банка тушенки :laughing:

Apr 5, 2010 - 1 minute read - linux

OpenSource #058

В этом выпуске вторая часть моей статьи по схемотехнике в Linux: “Схемотехника в Linux с помощью gEDA. Часть 2: pcb”

Скачать выпуск: http://osa.samag.ru/get/OpenSource058.zip

PS выпуск первоапрельский, но вредительства нет :)

Apr 4, 2010 - 1 minute read - programming

Интересная нотация switch/case в gcc

Относится к расширениям gcc, не претендует на переносимость, но все же: в gcc у case можно указывать диапазоны значений:

case LOWVAL ... HIVAL:

Например:

switch(var) 
{
     case 0 ... 2:
        /* какой-то код */
        break;
     case 3 ... 5:
        /* какой-то другой код */
        break;
     default:
        /* что делаем, когда ничего не помогает */
}

этот код эквивалентен такому:

switch(var) 
{
     case 0:
     case 1:
     case 2:
        /* какой-то код */
        break;
     case 3:
     case 4:
     case 5:
        /* какой-то другой код */
        break;
     default:
        /* что делаем, когда ничего не помогает */
}

ЗЫ про одно полезное расширение gcc я уже писал: 0b00100100