tobotras: (Default)
tobotras ([personal profile] tobotras) wrote2013-03-18 11:57 am

Стилистическое

Глядя в код некоторых коллег увидел тут глубокое экзистенциальное различие между нами. Акакувас?

[Poll #1902710]

[identity profile] mklochkov.livejournal.com 2013-03-18 02:45 pm (UTC)(link)
Два упомянутых уважаемых человека говорят примерно об одних и тех же эффектах, но по-разному. Возьмем пример из той самой книжки Линдена, где он описывает, как делать не надо:
char * localized_time(char * filename)
{
    struct tm *tm_ptr;
    struct stat stat_block;
    char buffer[120];
    /* get the sourcefile's timestamp in time_t format */
    stat(filename, &stat_block);
    /* convert UNIX time_t into a struct tm holding local time */
    tm_ptr = localtime(&stat_block.st_mtime);
    /* convert the tm struct into a string in local format */
    strftime(buffer, sizeof(buffer), "%a %b %e %T %Y", tm_ptr);
    return buffer;
} 

И Линден, и croco заставляют нас обратить внимание, что в предпоследней строке buffer, хотя вроде как является именем массива, приводит к тому, что в регистр eax помещается всего лишь указатель на некий фрагмент памяти, а этот фрагмент после возврата из функции имеет неопределенное содержание и вообще может не существовать.