4.6.8 Незаданное Число Параметров

4.6.8 Незаданное Число Параметров

Для некоторых функций невозможно задать число и тип всех параметров, которые можно ожидать в вызове. Такую функцию описывают завершая список описаний параметров многоточием (...), что означает «и может быть, еще какие-то неописанные параметры». Например:

int printf(char* ...);

Это задает, что в вызове printf должен быть по меньшей мере один параметр, char*, а остальные могут быть, а могут и не быть. Например:

printf(«Hello, world »); printf(«Мое имя %s %s », first_name, second_name); printf(«%d + %d = %d »,2,3,5);

Такая функция полагается на информацию, которая недотупна компилятору при интерпретации ее списка параметров. В случае printf() первым параметром является строка формата, содержащая специальные последовательности символов, позволящие printf() правильно обрабатывать остальные параметры. %s означает «жди параметра char*», а %d означает «жди параметра int». Однако, компилятор этого не знает, поэтому он не может убедиться в том, что ожидаемые параметры имеют соответствущий тип. Например: printf(«Мое имя %s %s »,2);

откомпилируется и в лучшем случае приведет к какой-нбудь странного вида выдаче. Очевиднще хуже, каждый вызов функции с автоматическим объектом класса включает по меньшей мере один вызов программ выделения и освобождения свободной памяти. Это сделало бы также невозможным реализацию inline-функций членов, которые обращаются к данным закрытой части. Более того, такое изменение сделает невозможным совместную компоновку C и С++ программ (поскольку C компилятор обрабатывает struct не так, как это будет делать С++ компилятор). Для С++ это было сочтено неприемлемым.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

5.1. Обходим ограничения браузера на число соединений

Из книги автора

5.1. Обходим ограничения браузера на число соединений Активное (англ. keep-alive) соединение стало настоящим прорывом в спецификации HTTP 1.1: оно позволяло использовать уже установленный канал для повторной передачи информации от клиента к серверу и обратно (в HTTP 1.0 соединение


Число загрузок с одного хоста

Из книги автора

Число загрузок с одного хоста Над временной диаграммой (кроме блокирования картинок) нам также стоит задуматься о том, что картинки после скрипта загружаются только по две. Это происходит из-за ограничений на число файлов, которые могут быть загружены параллельно. В IE <=


Максимальное число дескрипторов для функции select

Из книги автора

Максимальное число дескрипторов для функции select Ранее мы сказали, что большинство приложений не используют много дескрипторов. Например, редко можно найти приложение, использующее сотни дескрипторов. Но такие приложения существуют, и часто они используют функцию select


4.24 Максимальное число пересылаемых элементов

Из книги автора

4.24 Максимальное число пересылаемых элементов Каждая из рассмотренных нами технологий имеет различные максимальные размеры для своих кадров. После исключения заголовка кадра, заключительной части, а также заголовков LLC и SNAP (если они присутствуют), полученный результат


2.24. Преобразование строки в число (десятичное или иное)

Из книги автора

2.24. Преобразование строки в число (десятичное или иное) Есть два основных способа преобразовать строку в число: методы Integer и Float модуля Kernel и методы to_i и to_f класса String. (Имена, начинающиеся с прописной буквы, например Integer, обычно резервируются для специальных функций


3.3. Проверка, содержит ли строка допустимое число

Из книги автора

3.3. Проверка, содержит ли строка допустимое число ПроблемаИмеется строка string и требуется определить, содержит ли она допустимое число.РешениеДля проверки допустимости числа можно использовать шаблон функции lexical_cast библиотеки Boost. При таком подходе допустимое число


3.5. Лексический анализ строки, содержащей число в экспоненциальной форме

Из книги автора

3.5. Лексический анализ строки, содержащей число в экспоненциальной форме ПроблемаИмеется строка, содержащая число в экспоненциальной форме, и требуется сохранить значение числа в переменной типа double.РешениеНаиболее простым способом анализа числа в экспоненциальной


Кардинальное число и положение

Из книги автора

Кардинальное число и положение Одним из терминов, который иногда можно встретить в отношении наборов, включая таблицы- является кардинальное число (cardinality, "мощность множества"). Оно описывает количество строк в наборе, который может быть таблицей или выходным набором.


Пример 4-4. Целое число или строка?

Из книги автора

Пример 4-4. Целое число или строка? #!/bin/bash# int-or-string.sh: Целое число или строка?a=2334 # Целое число.let "a += 1"echo "a = $a " # a = 2335echo # Все еще целое число.b=${a/23/BB} # замена "23" на "BB". # Происходит трансформация числа в строку.echo "b = $b" # b = BB35declare -i b


Переменное число параметров

Из книги автора

Переменное число параметров Для указания того, что подпрограмма должна иметь переменное число параметров, используется ключевое слово params, за которым следует описание динамического массива. Например: function Sum(params a: array of integer): integer; begin Result := 0; for i: integer := 0 to a.Length do


Делим на число пи

Из книги автора

Делим на число пи Автор: Владислав БирюковКонечно, безоговорочно полагаться на приведенное на соседней странице ранжирование компаний не стоит – оно может служить лишь неким ориентиром. Слишком много в подобных расчетах условностей: какие показатели учитываются, с


4.3. Экспозиция и число диафрагмы

Из книги автора

4.3. Экспозиция и число диафрагмы Читая этот раздел, вы заметите, что понятия выдержки и диафрагмы употребляются, как правило, в паре. Объясняется это просто: выдержка и диафрагма определяют значение ключевого понятия фотографии – экспозиции. Определение Экспозицией


13-Я КОМНАТА: Число человеческое

Из книги автора

13-Я КОМНАТА: Число человеческое Автор: Сергей Вильянов «Здесь мудрость. Кто имеет разум, тот сочтет число зверя, ибо это число человеческое; число его — шестьсот шестьдесят шесть». Откровение святого Иоанна Богослова гл. 13. ст. 18 Как известно, люди обожают искусственные