Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ф-я с неограниченным количеством параметров...

Ответить
Настройки темы
C/C++ - Ф-я с неограниченным количеством параметров...

Новый участник


Сообщения: 17
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: SAU-trade
Дата: 22-12-2012
Здравствуйте! Кто может разъяснить по функциям с неограниченными параметрами на данном примере
Код: Выделить весь код
#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
Благодарности: 35

Профиль | Отправить 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", '$')
}
Обратите внимание, что функции с неизвестным числом параметров являются инструментом языка C. В C++ для этих целей рекомендуется использовать аргументы контейнеры.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:22, 25-12-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ф-я с неограниченным количеством параметров...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Рецепт ухи с минимальным количеством рыбы 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




 
Переход