:: Re: [DNG] "Common knowledge?"-quest…
Startseite
Nachricht löschen
Nachricht beantworten
Autor: Didier Kryn
Datum:  
To: dng
Betreff: Re: [DNG] "Common knowledge?"-question
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