За что я люблю язык С

Пришлось тряхнуть стариной и написать несколько сотен строк кода на С. Лет десять уже этим не занимался, расслабился и огреб по полной программе:

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  Метки:   Рубрики: Разработка, Языки  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  Метки:   Рубрики: Разработка, Языки  2 комментария

C programming language

Базовые знания о С и Unix/Linux у меня где-то на уровне катания на велосипеде — когда-то научился, в последнее время пользуюсь редко, но если надо — стандартные действия на автопилоте выполняю. С недавних пор приходится расширять знания о C, начинаю понимать, что это уже далеко не тот язык, который я знал. Особенно если речь идет о расширениях, которые поддерживает gcc.»

09.06.2007  Метки:   Рубрики: Разработка, Языки  2 комментария