Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

параметры фунции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ функция копировки файлов http://www.cyberforum.ru/cpp-beginners/thread76842.html
написал функцию копировки файлов,и естетвенно не без ошибок!!! bool fileCopy(char firstFile,char secondFile){ FILE* f=fopen(firstFile,"r"); int c=0; int i=0; int y=0;...
C++ Написать проги на C 1) Найти сумму целых положительных чисел 30<n>100, кратных 3 и оканчивающихся на 2.4 и 8. 2)Составить программу для вычисления значения с точностью до 10^(-6) ... http://www.cyberforum.ru/cpp-beginners/thread76840.html
C++ Найти сумму элементов главной диагонали квадратной матрицы
Помогите решить 2 задачки : 1) Найти сумму элементов находящихся на главной диагонали квадратной матрицы размером 3x3.Элементы массива вводятся с клавы. 2) Задать 2-x мерную матрицу с размером...
C++ Удаление из списка
контрольная с бинарным файлом. вопрос: в работе мне надо удалить из созданного списка( структура:номера вызывающего и вызываемого абонентов (ЦЕЛЫЕ ОБЯЗАТЕЛЬНО ШЕСТИЗНАЧНЫЕ ЧИСЛА).....) номера...
C++ Составить программу для вычисления значения http://www.cyberforum.ru/cpp-beginners/thread76829.html
1) Найти сумму целых положительных чисел 30<n>100, кратных 3 и оканчивающихся на 2.4 и 8. 2)Составить программу для вычисления значения с точностью до 10^(-6) ...
C++ В квадратной матрице определить минимум среди элементов диагоналей 3) В одномерном массиве, состоящем из n целых чисел, вычислить сумму положительных элементов расположенных после последнего нуля. 4) В одномерном массиве, состоящем из n целых чисел, вычислить... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
20.12.2009, 00:13
Функция printf определена как int printf(const char* format, ...); , то есть, имеет переменное число аргументов: строка формата обязательна, а дальше можно передавать сколько хочешь. Если ты передашь больше, чем нужно, ненужные значения будут проигнорированы. Если передашь меньше, printf всё равно возьмёт нужные значения со стека, но это будет неизвестно что (скорее всего, локальные переменные вызвавшей функции). Переменное число параметров - вещь удобная, но опасная, поскольку ошибки выявляются только во время исполнения. Функция printf только читает переданные ей данные, поэтому максимальный риск заключается в том, что выведется неправильный текст (в случае с %s это может быть довольно большое количество неправильного текста) или будет попытка чтения из запрещённых областей памяти, что приведёт к аварийному останову программы. scanf пишет в память, поэтому к ассортименту добавляются такие эзотерические вещи, как изменение произвольных участков в памяти, включая любые переменные любых функций, разрушение программного кода и другие весёлые штукесы.
Вдохновившись этими блистательными перспективами, новичок может спросить: "А что, эти функции такие уникальные? Или я тоже могу писать свои функции с переменным числом аргументов?" Ответ - да, можете. Смотрите хелп по stdarg.h и макросам va_list и va_arg. Помимо самих аргументов, вам придётся как-то определять их тип и количество (printf делает это по строке формата).
Второй вопрос, связанный с этой темой - "а могу ли я написать функцию с переменным числом аргументов, которая передаёт их в другую функцию с переменным числом аргументов, например, тому же printf?" Ответ - можно, но не напрямую. Такой функции надо будет уже передавать сам va_list. Самому printf такое уже не передашь, но специально для этих целей есть vprintf.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru