Le 24/01/2016 19:14, KatolaZ a écrit :
Soo, the above is nearly the same as
>
>   char buf[total];
>   p = buf;
>
>Why then use alloca()?
>
Maybe because
char buf[total];

works only in ANSI C11. I still don't see the need for an internal
buffer to print out a formatted string, to be honest:)

    The following works in plain old C:

#include <stdio.h>
#include <string.h>
static void print_start(char const *name, char const *what)
{
     unsigned name_len, what_len, total;

     name_len = strlen(name);
     what_len = strlen(what);
     total = name_len + what_len + 3;
     {
       char buf[total], *p=buf;
       memcpy(p, name, name_len);
       p += name_len;
       *p++ = ' ';
       memcpy(p, what, what_len);
       p += what_len;
       *p++ = ':';
       *p = ' ';
       *buf &= ~0x20;

       Write(2, buf, total);
     }
}

Embedded subprograms have other use cases. In long programs, they allow to declare variables with a limited scope, just near where they are used.

    Didier

_______________________________________________
Dng mailing list
[email protected]
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to