За что я люблю язык С
Пришлось тряхнуть стариной и написать несколько сотен строк кода на С. Лет десять уже этим не занимался, расслабился и огреб по полной программе:
static char* stralloc( const char* str ) { char* res = malloc( strlen( str + 1 ) ); strcpy( res, str ); return res; }
Код выглядит как настоящий, замыленным взглядом ошибку увидеть сложно. А уж какие эффекты появляются! Эта функция вызывалась из двух мест:
static char* start() { return stralloc( "{'start':true}" ); } static char* stop() { return stralloc( "{'stop':true}" ); }
Если вызывать только из первого места сколько угодно раз — всё работает. Если вызвать из второго места — падает при втором вызове. Если увеличить длину второй строки на один символ — опять же всё работает.
Рекомендую попробовать всем, кто использует языки с автоматическим управлением памятью. Незабываемые ощущения гарантированы!
27.05.2010
Метки: C Рубрики: Разработка, Языки
11 комментариев
Маленькая задачка для C программистов
Мой коллега Александр Сортов поделился маленькой задачкой для C программистов:
Попробуйте без компьютера сообразить, сколько слов «before» и «after» будет напечатано после выполнения этого кода?
#include <stdio .h> int main() { int pid; printf("before"); pid = fork(); printf("\nafter"); if(pid == 0) { _exit(); } printf("\n"); } </stdio>
25.07.2007
Метки: C Рубрики: Разработка, Языки
2 комментария
C programming language
Базовые знания о С и Unix/Linux у меня где-то на уровне катания на велосипеде — когда-то научился, в последнее время пользуюсь редко, но если надо — стандартные действия на автопилоте выполняю. С недавних пор приходится расширять знания о C, начинаю понимать, что это уже далеко не тот язык, который я знал. Особенно если речь идет о расширениях, которые поддерживает gcc.
09.06.2007
Метки: C Рубрики: Разработка, Языки
2 комментария
ЖЖ