Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

"Чистый" Си и колво необязательных аргументов

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
VeL



Зарегистрирован: 18.01.2006
Сообщения: 521
Откуда: Харьков

СообщениеДобавлено: Пн Июн 28 2010 22:49    Заголовок сообщения: "Чистый" Си и колво необязательных аргументов Ответить с цитатой

Доброго времени суток господа.

Пишу функцию с переменным колличеством аргументов.
Дальше мне в цикле нужно перебрать все аргументы.
Как узнать их колличество, чтобы написать условие цикла?


Код:
void myFunc(char *myvar1, ...)
{
    int valArg;

    va_list aPtr;
    va_start(aPtr, myvar1);
    valArg = va_arg(aPtr, int);

   
}


Дальше вызываем ее например так:

Код:
void main()
{
    myFunc("This is myarg", 254, 12, "some1", 3654, "some2");
}


Ну и потом мне эту строку нужно обработать
Слелать проверку if (aPtr == NULL) я тоже немогу, потму как это значение устанавливается в нуль только функцией va_end(aPtr)

Задачка вроде как практическая и часто используемая, а в литературе везде приводится пример, что в качестве одного из аргументов передается их колличество.
А как же например тогда работает printf которой мы не передаем колво аргументов? она же как то их сама считает

И можно ли чередовать необязательные аргументы разных типов?
_________________
Best regards
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
yw



Зарегистрирован: 21.10.2009
Сообщения: 15

СообщениеДобавлено: Сб Июл 10 2010 00:50    Заголовок сообщения: Ответить с цитатой

> Задачка вроде как практическая и часто используемая, а в литературе везде приводится пример, что в качестве одного из аргументов передается их колличество.

Близко к истине . Кстати , обязателен хотя бы 1 фиксированный параметр . Завершение списка аргументов определяйте сами в этой функции , как хотите , не обязательно из фиксированных параметров ; язык здесь не помощник

> А как же например тогда работает printf которой мы не передаем колво аргументов? она же как то их сама считает

Да , сама считает число форматов преобразования (%....) . И если фактические аргументы не тех типов (или не в том количестве) -- получите кривое поведение (в лучшем случае сбой) при исполнении программы

> И можно ли чередовать необязательные аргументы разных типов?

Да , но сами придумайте , как будете определять эти типы . Например , сделайте в стиле 'printf' -- стандартно , понятно и есть заготовки в стандартной библиотеке
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
alex1983-0112



Зарегистрирован: 22.08.2006
Сообщения: 46
Откуда: г. Семенов Нижегородская обл.

СообщениеДобавлено: Чт Июл 22 2010 22:44    Заголовок сообщения: Ответить с цитатой

Клац
_________________
#define TRUE FALSE// счастливой отладки
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...