-ReAl- (26.11.2010 17:25, просмотров: 1) ответил koyodza на как в константную символьную строку внедрить константу-адрес?
Ой бабоньки... Испортили GNU-тые язык... Когда-то что-то насколько-то и подобное делал так, как сейчас шибко грамотный gcc отказывается собирать: Пакетируем вместе используемые переменные в структуру. Первым элементом структуры ставим форматную строку для вывода. С переменными прямо там и работаем, в той структуре.
И задействуем vprintf
#include <stdio.h>
#include <stdarg.h>
struct var_header {
const char *fmt;
};
struct {
const char *fmt;
int i;
} var1 = {
"Var1: i=%d\n",
0
};
struct {
const char *fmt;
int i;
long l;
int j;
} var2 = {
"Var2: i=%d, l=0x%lX, j=%d\n",
1234,
0xDEADBEEF,
789
};
void var_printf( struct var_header *p)
{
va_list v;
va_start(v, p->fmt);
vprintf( p->fmt, v);
va_end(v);
}
int main()
{
var_printf( (struct var_header*) &var1);
var_printf( (struct var_header*) &var2);
return 0;
}
Для ввода данных делаем парную структуру, например
struct {
const char *fmt;
int *i;
long *l;
int *j;
} var2_input = {
"%d %lX %d",
&var2.i,
&var2.l,
&var2.j
};
и задействуем vscanf
Сейчас быстренько DOSBOX поставил да BCC 5.02 из архива распаковал — компилируется и отрабатывает (с vscanf-ом обленился пробовать).
А gcc извратил такую идею... Требует в функции var_printf наличие ... и независимо от того, что подсунуто в va_start — в v оказывается то троеточие.