Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Расставим точки над структурами C/C++

Программирование *C++ *C *
Недавно познакомился со структурами C/C++ — struct. Господи, да «что же с ними знакомиться» скажете вы? Тем самым вы допустите сразу 2 ошибки: во-первых я не Господи, а во вторых я тоже думал что структуры — они и в Африке структуры. А вот как оказалось и — нет. Я расскажу о нескольких жизненно-важных подробностях, которые кого-нибудь из читателей избавят от часовой отладки…


Читать дальше →
Всего голосов 125: ↑90 и ↓35 +55
Просмотры 215K
Комментарии 82

Практика работы со временем в разных часовых поясах в unix-like системах

C++ *
Из песочницы
Если ваше приложение зависит не только от локального времени, но и от его представлении в других часовых поясах, вы наверняка сталкивались со сложностью представления времени в разных временных зонах. Не сталкивались? Значит вы не портировали своё приложение в мир Unix.

Действительно, в ОС Windows для работы с временными зонами программисту предоставляется удобный набор специализированных функций WinAPI. Примером могут служить структура TIME_ZONE_INFORMATION и функция GetTimeZoneInformation к ней в придачу.

Но что делать, если вам необходимо знать смещение относительно UTC+0, правила перехода на «летнее время», учитывать при этом високосные годы с високосными секундами и прочую специфическую информацию для какого-нибудь региона, да всё это в unix-подобных операционных системах? Статья посвящена практике работы со всем этим барахлом на языке C/C++.
Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 3.1K
Комментарии 1

Релиз NetBeans IDE 7.2 Beta

Разработка веб-сайтов *


Сегодня всех любителей IDE NetBeans порадовали новым релизом, содержащим довольно много интересных и очень полезных новшеств.

Пока новая версия IDE в состоянии Beta (релизную обещают в июне), но, как говорят сами разработчики, зачем ждать, если новыми возможностями можно воспользоваться уже сегодня?

Наиболее значимые изменения включают в себя поддержку различных PHP фреймворков, улучшенную поддержку Groovy, интеграцию Scene Builder в JavaFX, а также множество других улучшений в Java EE, Maven, C/C+ + и платформы NetBeans. Назовем наиболее интересные из них.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Просмотры 3.2K
Комментарии 29

Асинхронные запросы к MySQL на API (libmysqlclient)

MySQL *C++ *C *
Так получается, что сейчас тружусь над планировщиком для MySQL соединений. И тут недавно пришлось покапаться в документации/блогах и т.д. И вот решил поделиться с сообществом как реализовать асинхронные запросы к MySQL серверу на С++ используя API и библиотеку libmysqlclient.

Читать дальше →
Всего голосов 24: ↑21 и ↓3 +18
Просмотры 5.8K
Комментарии 46

Релиз NetBeans IDE 7.2

Разработка веб-сайтов *


Хорошая новость для всех Java, C/C++ и PHP — разработчиков: вчера, 25 Июля 2012, состоялся релиз очередной версии IDE NetBeans 7.2!

Наиболее значимые изменения:

  • Улучшена производительность
  • Интеграция FindBugs
  • Интеграция JavaFX Scene Builder
  • Различные улучшения в редакторе Java
  • Расширение возможностей Java EE
  • Поддержка PHP 5.4 и пр.
  • Обновлена поддержка Groovy и Grails Support
  • Поддержка TestNG
  • UPD: Поддержка аннотаций в PHP
  • Поддержка PHP-фреймворков Symfony2, Doctrine2 и ApiGen


Более подробно об изменениях можно почитать здесь.

Ссылка на страницу загрузки.
Читать дальше →
Всего голосов 29: ↑22 и ↓7 +15
Просмотры 7.5K
Комментарии 46

Руководство новичка по эксплуатации компоновщика

Программирование *
Из песочницы
David Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).

Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).

Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status

Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Читать дальше →
Всего голосов 194: ↑193 и ↓1 +192
Просмотры 167K
Комментарии 38

О модульности, хорошей архитектуре, внедрении зависимостей в С/C++ и разноцветных кружочках

Программирование *C++ *C *
Не в совокупности ищи единства, но более – в единообразии разделения.
Козьма Прутков


Немного воды вначале


Нельзя не заметить, что аспектно-ориентированное программирование с каждым годом берет новые рубежи популярности. На хабре было уже несколько статей посвященных этому вопросу, от Java до PHP. Пришло время обратить свой взор на С/C++. Теперь я в первом же абзаце признаюсь, что речь пойдет не об «настоящих аспектах», но о чем-то, близко с ними связанном. Также рассуждение будет вестись в контексте embedded-проектов, хотя описываемые методы могут применяться где угодно, но именно embedded, это та область, где эффект будет максимально ощутимым. Еще я буду использовать слова «хидер» и «дефайн» для обозначения, соответственно, «заголовочного файла» и «макроопределения». Сухой и академичный язык это хорошо, но в данном случае, мне кажется, все будет проще понять, если пользоваться устоявшимися англицизмами.
Читать дальше →
Всего голосов 46: ↑44 и ↓2 +42
Просмотры 39K
Комментарии 33

Третья проверка кода проекта Chromium с помощью анализатора PVS-Studio

Блог компании PVS-Studio C++ *Google Chrome
Браузер Chromium очень быстро развивается. Например, когда в 2011 году мы впервые проверили этот проект (solution), он состоял из 473 проектов. Сейчас, он состоит уже из 1169 проектов. Нам было интересно, смогли ли разработчики Google сохранить высочайшее качество кода, при такой скорости развития Chromium. Да, смогли.
Читать дальше →
Всего голосов 143: ↑132 и ↓11 +121
Просмотры 34K
Комментарии 58

Обновился Google Testing Framework

Тестирование IT-систем *C++ *
На днях обновился Google Testing Framework до версии 1.7.0.
В новой версии:
* Новая функция: death-тесты поддерживаются на OpenBSD и в IOS Simulator;
* Новая функция: Test :: RecordProperty () теперь может быть использована за пределами тестового метода;
* Новые возможности: — gtest_list_tests теперь печатает параметры-типы и параметры-значения для каждого теста;
* Улучшение: указатели char и массивы символов теперь обрабатываются корректно;
* Улучшение: отчеты об отказах в XML файлах теперь содержат номер строки и файл;
* «Potentially breaking change»: RUN_ALL_TESTS () теперь реализована в виде функцим вместо макроса для того, чтобы лучше работать с Clang;
* Исправления совместимости с C++ 11 и различных платформ;
* и другое.

Оригинал здесь.
Всего голосов 17: ↑11 и ↓6 +5
Просмотры 4.9K
Комментарии 0

Конечный автомат (он же машина состояний) на чистом С

Алгоритмы *C *
Из песочницы
Почти каждый микроконтроллерщик сталкивался с громадными switch-case и мучительно их отлаживал.
И много кто, начиная писать реализацию какого-либо протокола, задумывался как написать её красиво, изящно, так чтобы через месяц было понятно что ты имел в виду, чтобы она не отжирала всю память и вообще какала бабочками.
И вот тут на помощь приходят машины состояний, они же конечные автоматы (те самые которые используются в регулярных выражениях).

Собственно через регулярные выражения я к ним и пришёл.
Читать дальше →
Всего голосов 51: ↑48 и ↓3 +45
Просмотры 112K
Комментарии 50

Использование альтернативного аллокатора памяти в проекте на C/C++

Программирование *C++ *C *
Из песочницы
Эта статья написана прежде всего для программистов C/C++, использующих в своей работе Visual Studio 2013. Поскольку я, как говорится, totally windows guy, то я не могу оценить полезность этой статьи для программистов, не использующих эту среду в своей работе. Итак.

Не секрет, что стандартный аллокатор new/delete/malloc/free в языке C/C++ не блещет быстродействием. Конечно, всё зависит от реализации, но, если говорить об оной от компании Microsoft, то это факт. Кроме того, стандартная реализация аллокатора обладает еще одним фатальным недостатком — фрагментацией памяти. Если в вашей программе происходят частые выделения/освобождения памяти, вы можете обнаружить, что спустя несколько часов работы ваша программа упала по причине нехватки памяти, хотя свободной памяти еще достаточно — просто в результате фрагментации в пуле аллокатора не осталось свободного участка достаточного размера. (Это, кстати, абсолютно реальный случай, который произошел на одном из проектов, в котором я принимал непосредственное участие.)
И что же делать?
Всего голосов 27: ↑20 и ↓7 +13
Просмотры 17K
Комментарии 40

PVS-Studio: новый триальный режим

Блог компании PVS-Studio
PVS-Studio
Мы временами экспериментируем с триальным режимом, чтобы знакомство с анализатором PVS-Studio проходило как можно эффективней. Сейчас мы вновь поменяли формат триальной версии. Эта заметка должна ответить на все вопросы, которое могут возникнуть у разработчиков, пожелавших познакомиться с нашим инструментом. Фактически эта статья является ответом на вопрос «можно ли попробовать демонстрационную версию и какие в ней ограничения?».
Читать дальше →
Всего голосов 34: ↑23 и ↓11 +12
Просмотры 11K
Комментарии 62

Мы закрываем проект CppCat

Блог компании PVS-Studio C++ *Visual Studio *C *Разработка под Windows *
CppCat RIP

Чуть больше года назад, мы решили провести эксперимент и выпустить альтернативу статического анализатора кода PVS-Studio для маленьких команд и индивидуальных разработчиков. Так появился очень недорогой анализатор под названием CppCat. Сейчас можно подвести итоги этого эксперимента и признать, что он оказался неудачным. За срок чуть более года он принёс приблизительно столько денег, сколько было потрачено на его разработку, продвижение и поддержку. Таким образом проект убыточен. Ведь потраченное время (самый ценный ресурс) мы могли бы использовать для совершенствования PVS-Studio. Мы вынуждены закрыть проект CppCat и сосредоточиться на PVS-Studio. Надеюсь, читателям будет интересен чужой опыт в реализации новой бизнес идеи. Негативный опыт — это тоже полезный опыт.
Читать дальше →
Всего голосов 131: ↑100 и ↓31 +69
Просмотры 47K
Комментарии 169

PVS-Studio — приглашаем послушать и посмотреть

Блог компании PVS-Studio
PVS-Studio PHDays, SDCast
Так получилось, что на днях Андрей Карпов принял участие в Positive Hack Days и выступил там с докладом. А Евгений Рыжков стал гостем SDCast'а, и в результате чего получился 40-минутный подкаст. В обоих случаях речь идёт о статическом анализе кода вообще, и анализаторе PVS-Studio в частности. Если Вам интересна эта тематика, то приглашаю под habracut, где можно узнать чуть больше деталей и увидеть ссылки на эти материалы.
Читать дальше →
Всего голосов 20: ↑17 и ↓3 +14
Просмотры 4.2K
Комментарии 2

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

Блог компании PVS-Studio Разработка веб-сайтов *C++ *C *Разработка под Windows *
Apple II emulator for Windows
Одной из основных сложностей при использовании инструментов статического анализа является работа с ложными срабатываниями. Существует множество способов устранить ложные срабатывания, используя настройки анализатора или изменяя код. Я взял маленький проект Apple II emulator for Windows и покажу, как можно на практике работать с отчётом статического анализатора PVS-Studio. Покажу на примерах, как править ошибки и подавлять ложные срабатывания.
Читать дальше →
Всего голосов 24: ↑17 и ↓7 +10
Просмотры 6.5K
Комментарии 16

Управление памятью: Взгляд изнутри

C++ *Системное программирование *
Перевод

Доброго времени суток!
Хочу представить вашему вниманию перевод статьи Джонатана Барлетта (Jonathan Bartlett), который является техническим директором в компании New Medio. Статья была опубликована 16 ноября 2004 года на сайте ibm.com и посвящена методам управления памятью. Хотя возраст статьи достаточно высок (по меркам IT), информация в ней является фундаментальной и описывает подходы к распределению памяти, их сильные и слабые стороны. Всё это сопровождается «самопальными» реализациями, для лучшего усвоения материала.

Аннотация от автора
Решения, компромиссы и реализации динамического распределения памяти
Получите представление о методах управления памятью, которые доступны Linux разработчикам. Данные методы не ограничиваются языком C, они также применяются и в других языках программирования. Эта статья даёт подробное описание как происходит управление памятью, на примерах ручного подхода (manually), полуавтоматического (semi-manually) с использованием подсчёта ссылок (referencing count) или пула (pooling) и автоматического при помощи сборщика мусора (garbage collection).

Читать далее...
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 54K
Комментарии 3

Intel® Tamper Protection Toolkit — обфусцирующий компилятор и средства проверки целостности кода

Блог компании Intel Программирование *C++ *Компиляторы *C *

Совсем недавно компания Intel выпустила очень интересный набор инструментов для разработчиков программного обеспечения, позволяющий добавить защиту программного кода от взлома и существенно усложнить жизнь взломщикам программ. Этот набор включает в себя обфусцирующий компилятор, средство для создания файла подписи, используемого для проверки целостности загружаемых динамических библиотек, а также библиотеку функций проверки целостности и дополнительные полезные инструменты. Intel® Tamper Protection Toolkit beta можно совершенно бесплатно скачать на сайте Intel.
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 9.7K
Комментарии 17

Как обнаружить переполнение 32-битных переменной в длинных циклах в 64-битной программе

Блог компании PVS-Studio
Одна из проблем, с которой сталкиваются разработчики 64-битных приложений, это переполнение 32-битных переменных в очень длинных циклах. С этой задачей хорошо справляется анализатор кода PVS-Studio (набор диагностик Viva64). На тему переполнения переменных в циклах есть ряд вопросов на сайте StackOverflow.com. Но поскольку мои ответы могут счесть исключительно рекламными, а не как полезную информацию, я решил описать возможности PVS-Studio в статье.
Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 7.5K
Комментарии 0

Проверка проекта Samba с помощью PVS-Studio под Linux

Блог компании PVS-Studio C *Разработка под Linux *
Перевод
Проверка Samba с помощью PVS-Studio под LinuxЕсли вы следили за новостями о последних разработках в области инструментов анализа C/C++ кода, то, должно быть, слышали про инструмент PVS-Studio. Я узнал о нем благодаря статьям, которые разработчики публикуют на своем сайте и в которых они рассказывают о проверках проектов с открытым кодом. К настоящему времени уже проверено внушительное число проектов, включая ядро Linux, Qt, Unreal и т.д., и каждый раз им удается находить интересные ошибки, подолгу живущие в коде, никем не обнаруженные. Опечатки, неаккуратное копирование, неопределенное поведение, бессмысленный код, синтаксические ошибки, которые чудесным образом пропускаются компилятором…

Как сказал Джон Кармак, "Все, что является допустимым с точки зрения синтаксиса и пропускается компилятором, в конце концов окажется в вашей кодовой базе".
Читать дальше →
Всего голосов 44: ↑37 и ↓7 +30
Просмотры 14K
Комментарии 22

Главный вопрос программирования, рефакторинга и всего такого

Блог компании PVS-Studio Совершенный код *C++ *C *
Улучшим качество кода!
Я написал маленькую электронную книгу в которой рассматриваю вопросы как сделать код лучше. Книга ориентирована на Си/Си++ программистов, но будет интересна и разработчикам, использующих другие языки. Формат книги не подходит для моего любимого Хабра, но мне интересно получить обратную связь и обсудить мысли, изложенные в статье. Поэтому я решил разместить здесь только анонс, а с самой статьей можно познакомиться здесь. И приглашаю в комментарии для обсуждения.
Читать дальше →
Всего голосов 66: ↑53 и ↓13 +40
Просмотры 46K
Комментарии 97