ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
223895 Топик полностью
-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 оказывается то троеточие.