Существует множество способов поиска утечек памяти в проектах на C++, начиная от магии с рантаймом и вызовами фцкнций _Crt*, и заканчивая тяжелым проприетарным софтом типа BoundsChecker и им подобным.
Однако, блуждая по просторам интернетов, совершенно случайно наткнулся я на очень простое и изящное рещение — маленькую библиотечку под названием Visual Leak Detector, позволяющую с легкостю получить дамп стека вызовов, приведших к выделению неосвобожденной памяти. Достаточно всего лишь включить заголовочный файл в один из .cpp-файлов, и вуаля — все ваши лики как на ладони!
среда, 10 февраля 2010 г.
суббота, 31 октября 2009 г.
О словоформах и наболевшем
Добрые русскоговорящие люди! Помните, что слова после числительных склоняются. Мы говорим «один час», но при этом «два часа», или «пять часов». Откуда же в интерфейсах берутся эти ужасные «4 час(а|ов)»?
Надо же всего лишь:
И программа заговорит с пользователем на чистом русском языке!
Надо же всего лишь:
function FormatCount( n:uint, forms:Array ):String
{
var last2 :uint = n % 100 ;
var last1 :uint = n % 10 ;
var isTeen :Boolean = last2 > 10 && last2 < 20 ;
var isSingle:Boolean = last1 == 1 ;
var isCouple:Boolean = last1 > 1 && last1 < 5 ;
if ( !isTeen )
{
if ( isSingle ) return forms[0];
if ( isCouple ) return forms[1];
}
return forms[2];
}
И программа заговорит с пользователем на чистом русском языке!
пятница, 4 сентября 2009 г.
Тернарный оператор в Lua
Иногда при скриптинге в Lua встречается следующая конструкция:
В большинстве языков подобная запись легко заменяется тернарным оператором:
Однако в Lua тернарный оператор отсутствует. Но не оставлять же такую громоздкую конструкцию?
Выход прост — к нам придут на помощь логические операторы or и and. В Lua для них выполняется следующее:
В самом деле, or имеет более низкий приоритет, и поэтому сначала выполняется контрукция с and. Если условие condition истинно, то по логике оператора and возвращается его второй аргумент ("on"). Строчка истинна, и поэтому or возвращает ее как результат всего выражения.
Если же уcловие condition ложно, то оператор and возвращает ложь, и оператор or, получив ложь в качестве первого операнда, возвращает значение второго ("off").
Таким образом, в результате махинаций с логическими операторами мы получили тернарный оператор в Lua!
if condition then
s = "on"
else
s = "off"
end
s = condition ? "on" : "off"
Выход прост — к нам придут на помощь логические операторы or и and. В Lua для них выполняется следующее:
- оператор and возвращает первое ложное значение среди сових операндов; если оба операнда истинны, возвращается последний из них
- оператор or возвращает первое истинное значение среди своих операндов; если оба операнда ложны, возвращается последний из них
s = condition and "on" or "off"
Если же уcловие condition ложно, то оператор and возвращает ложь, и оператор or, получив ложь в качестве первого операнда, возвращает значение второго ("off").
Таким образом, в результате махинаций с логическими операторами мы получили тернарный оператор в Lua!
Подписаться на:
Сообщения (Atom)