История изменений
Исправление 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