LINUX.ORG.RU

История изменений

Исправление vtVitus, (текущая версия) :

m_printf(«blabla %d», a, " blablabla %f", b," blablablabla %d", c, " blabla bla %f ", d, " blablabla %d", e;)

И что мешает написать?

#include <stdio.h>
#include <stdarg.h>
#include <string.h>

#define THE_END "!"
#define pr(...) pr_fn(0, ##__VA_ARGS__, THE_END)

void pr_fn(int fake, ...) {
        va_list args;
        const char * format;
        va_start(args, fake);

        while(1) {
                format = va_arg(args, const char*);
                if (0 == strcmp(format, THE_END))
                        break;
                vprintf(format, args);
        }

        va_end(args);
}


int main() {
        char * t = "test1";
        int d = 5;
        float f = 0.4f;

        pr("test string: %s", t, ", test int: %d", d, "! test float: %.4f\n", f);
        pr("test two args: %s %d", t, d, ", test float: %.4f\n", f);


}
vitus@dacha1:/tmp$ gcc t.c 
vitus@dacha1:/tmp$ ./a.out 
test string: test1, test int: 5! test float: 0.4000
test two args: test1 5, test float: 0.4000

Исходная версия vtVitus, :

m_printf(«blabla %d», a, " blablabla %f", b," blablablabla %d", c, " blabla bla %f ", d, " blablabla %d", e;)

И что мешает написать?

#include <stdio.h>
#include <stdarg.h>
#include <string.h>

#define THE_END "!"
#define pr(...) pr_fn(0, ##__VA_ARGS__, THE_END)

void pr_fn(int fake, ...) {
        va_list args;
        const char * format;
        va_start(args, fake);

        while(1) {
                format = va_arg(args, const char*);
                if (0 == strcmp(format, THE_END))
                        break;
                vprintf(format, args);
        }

        va_end(args);
}


int main() {
        char * t = "test1";
        int d = 5;
        float f = 0.4f;

        pr("test string: %s", t, " test int: %d", d, "! test float: %.4f\n", f);

}
vitus@dacha1:/tmp$ gcc t.c 
vitus@dacha1:/tmp$ ./a.out 
test string: test1 test int: 5! test float: 0.4000