|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ф-я с неограниченным количеством параметров... |
|
C/C++ - Ф-я с неограниченным количеством параметров...
|
Новый участник Сообщения: 17 |
Профиль | Отправить PM | Цитировать
Здравствуйте! Кто может разъяснить по функциям с неограниченными параметрами на данном примере
#include<iostream> #include<cstdarg> #include<string> using namespace std; void print(char *str,...) { va_list arg_ptr; va_start(arg_ptr,str); while(*str!='\0') { if (*str!='%') cout << *str; if (*str=='%'){ str++; switch (*str){ case 'd': cout << va_arg(arg_ptr,int); break; case 'c': cout << (char)va_arg(arg_ptr,int); break; case 's': cout << va_arg(arg_ptr,char*); break; default: break; } } str++; } va_end(arg_ptr); } int main(){ print("I want to print %d parametrs", 4); print("I want to add %s in this text", "word") print("I want to print this %c symbol", '$') } |
|
Отправлено: 23:42, 21-12-2012 |
Пользователь Сообщения: 121
|
Профиль | Отправить PM | Цитировать Функция является упрощенной учебной реализацией функции printf()
#include<iostream> #include<cstdarg> #include<string> using namespace std; void print(char *str,...) /* Первый аргумент объявляется явно и обязательно передается при вызове функции. Он является единственным явно указанным аргументом, а значит он должен быть передан макросу va_start для инициализации списка неизвестных аргументов. Если бы явно указанных аргументов было несколько, то макросу va_start передавался бы последний явно заданный аргумент. */ { va_list arg_ptr; // Список аргументов va_start(arg_ptr,str); // Инициализация списка аргументов while(*str!='\0') { if (*str!='%') cout << *str; if (*str=='%'){ str++; switch (*str){ /* Если в str встретилась последовательность '%d', то из списка аргументов извлекается очередной элемент, считая что он является int. */ case 'd': cout << va_arg(arg_ptr,int); break; /* Если в str встретилась последовательность '%c', то из списка аргументов извлекается очередной элемент, считая что он является int. Используется тип int т.к. тип char может не поддерживаться реализацией макроса va_arg*/ case 'c': cout << (char)va_arg(arg_ptr,int); break; /* Если в str встретилась последовательность '%s', то из списка аргументов извлекается очередной элемент, считая что он является указателем. */ case 's': cout << va_arg(arg_ptr,char*); break; default: break; } } str++; } /* Если в функции был использован макрос va_start, то перед ее завершением обязательно нужно вызвать макрос va_end. */ va_end(arg_ptr); } int main(){ print("I want to print %d parametrs", 4); print("I want to add %s in this text", "word") print("I want to print this %c symbol", '$') } |
Отправлено: 15:22, 25-12-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Рецепт ухи с минимальным количеством рыбы | Kaban-keb | Флейм | 4 | 03-08-2010 15:23 | |
Дерево ссылок с неограниченным числом вложений | rizz | Вебмастеру | 3 | 30-08-2009 09:42 | |
как удалить папку с количеством файлов ,превыщающих 10 млн | illusionmgs | Хочу все знать | 15 | 28-04-2009 19:53 | |
[решено] Лицензирование организации с количеством ПК больше 250 | Sanau | Лицензирование продуктов Microsoft | 6 | 23-03-2007 18:31 | |
(статья) Мультизагрузочный CD WinXP с неограниченным кол-вом конфигураций установки | VseDoFeNi | Автоматическая установка Windows 2000/XP/2003 | 1 | 14-09-2005 18:46 |
|