суббота, 26 марта 2011 г.

среда, 16 марта 2011 г.

Параллельное присваивание

На примере языка Lua.

-- Multiple assignments allows one line to swap two variables.

print(a,b)
a,b=b,a
print(a,b)

-------- Output ------
1 2
2 1

Неплохо, так то..

Т.е. на каком-нибудь другом языке программирования, который не поддерживает параллельное присваивание надо будет написать что-то вроде:

t = a
a = b
b = t


пятница, 11 марта 2011 г.

четверг, 10 марта 2011 г.

Изучая иностранные языки

Making a basic .NET COM component is very straightforward.
Чито? Straightforward?? Что за страшное слово!? Когда видишь фразу COM component в связке со словом straightforward, думаешь, что открыв словарь ты увидишь что-то вроде "straightforward - сложно, блядь. очень". 


straightforward - простой.

среда, 9 марта 2011 г.

Язык программирования C и шуточки

char **argv
  argv: указатель на указатель char

int (*daytab)[13]
  daytab: указатель на массив[13] типа int

int *daytab[13]
  daytab: массив[13] указателей на int

void *comp()
  comp: функция, возвращающая указатель на void

void (*comp)()
  comp: указатель на функцию, возвращающую void

char (*(*x())[])()
  x: функция, возвращающая указатель на массив[] указателей на функцию, возвращающую char

char (*(*x[3])())[5]
  x: массив[3] указателей на функцию, возвращающую указатель на массив[5] типа char


вторник, 8 марта 2011 г.

inline-функции и макроподстановки

inline-функции:

При объявлении функции внутри программы C++ позволяет вам предварить имя функции ключевым словом inline. Если компилятор C++ встречает ключевое слово inline, он помещает в выполнимый файл (машинный язык) операторы этой функции в месте каждого ее вызова. Таким образом, можно улучшить читаемость ваших программ на C++, используя функции, и в то же время увеличить производительность, избегая издержек на вызов функций.

макроподстановки:
#define max(A, B) ((A)  > (B) ? (A) : (B))
Хотя внешне он напоминает вызов функции, на самом деле max разворачивается в тексте путём подстановки. Вместо формальных параметров (A или  B) будет подставлены фактические аргументы, обнаруженные в тексте. Возьмем, например, следующий макровызов:
x = max (p+q, r+s);
При компиляции он будет заменён на следующую строку:
x = ( (p+q) > (r+s) ? (p+q) : (r+s));
...
Если внимательно изучить способ подстановки макроса max, можно заметить ряд "ловушек". Так, выражения в развернутой форме макроса вычисляются дважды, и это даст неправильный результат, если в них присутствуют побочные эффекты наподобие инкремента-декремента или ввода вывода. Например, в следующем макровызове большее значение будет инкрементаровано два раза:
max(i++; j++)   
(c)The C Programming Language

понедельник, 7 марта 2011 г.

Тестовое задание

После пятиминутного собеседования в одну очень-очень известную компанию мне сказали, что отправят тестовое задание по C++! (weeehoooo) Как же я удивился, что программист на C++ должен знать как устроено приложение на WinAPI, как писать приложения на ATL, WTL, да ещё и с использованием GDI+ - какой же я наивный чукотский мальчик.