За что я люблю язык С
Пришлось тряхнуть стариной и написать несколько сотен строк кода на С. Лет десять уже этим не занимался, расслабился и огреб по полной программе:
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
int main() {
int pid;
printf("before");
pid = fork();
printf("\nafter");
if(pid == 0) {
_exit();
}
printf("\n");
}
»
25.07.2007
Метки: C Рубрики: Разработка, Языки
2 комментария
C programming language
Базовые знания о С и Unix/Linux у меня где-то на уровне катания на велосипеде — когда-то научился, в последнее время пользуюсь редко, но если надо — стандартные действия на автопилоте выполняю. С недавних пор приходится расширять знания о C, начинаю понимать, что это уже далеко не тот язык, который я знал. Особенно если речь идет о расширениях, которые поддерживает gcc.»
09.06.2007
Метки: C Рубрики: Разработка, Языки
2 комментария