Архив за месяц: Август 2011

Подводные камни define’ов

Определение макросов с помощью define очень часто используется программистами. Но есть некоторые особенности, незнание которых может привести к длительным поискам ошибок. Например есть макрос: #define square1( a, b ) \ a*= a; \ b*= b;#define square1( a, b ) \ … Читать далее

Рубрика: Великий и могучий Си | Метки: , | Добавить комментарий

Что бы это значило?

Язык Си позволяет создавать выражения, которые не сразу и поймешь. Знакомый принес с собеседования вот такую задачку: Что выведет программа? int x = 2; x += x+++++x; printf( "x=%u\r\n", x ); int x = 2; x += x+++++x; printf( "x=%u\r\n", … Читать далее

Рубрика: Великий и могучий Си | Метки: , | Комментарии (5)

Функции изменения порядка бит

Первый вариант — хитрый unsigned char bits_reverse( unsigned char bits ) { bits = ( ( bits & 0xF0 ) >> 4 ) | ( ( bits & 0x0f ) < < 4 ); bits = ( ( bits & … Читать далее

Рубрика: Великий и могучий Си | Метки: , | Добавить комментарий

vim и меню переключения кодировки файлов

Во время работы в vim часто приходится редактировать файлы в различной  кодировке. Для того чтобы открыть файл в нужной кодировке, надо выполнить команду: :e ++enc=кодировка имяфайла Вместо «кодировка» надо поставить необходимую (koi8-r, cp866, cp1251, utf8 ) Если имя файла не … Читать далее

Рубрика: Редактор vim | Метки: | Добавить комментарий

Выравнивание и размер структуры

Есть у нас, допустим структура. struct my_struct{ int a; char b; int c; };struct my_struct{ int a; char b; int c; }; Но если на разных платформах ( например avr и arm ) выполнить следующий код printf("размер структуры %u\r\n", sizeof( … Читать далее

Рубрика: Великий и могучий Си | Метки: , | Комментарии (4)

Как создать демона в linux

Демон — это программа не имеющая стандартного ввода и вывода, и при этом работающая в фоновом режиме. Исходный код простейшего демона:

Рубрика: Великий и могучий Си | Метки: , | Комментарии (8)

Особенности перенаправления в bash

Как оказалось, в bash порядок указания перенаправлений имеет значение. Рассмотри две команды: a.out > outfile 2&>1 a.out 2&>1 > outfile Кажется, что делают они одно и тоже, но это не так.

Рубрика: Использование linux | Метки: , | Добавить комментарий