1 | |
Могут ли теоретически существовать методы с неопределенным числом аргументов?01.08.2015, 19:49. Показов 2587. Ответов 47
Метки нет (Все метки)
0
|
01.08.2015, 19:49 | |
Ответы с готовыми решениями:
47
Функция с неопределенным количеством аргументов Как отфильтровать сводную таблицу, если все критерии могут не существовать? Найти все возможные треугольники, которые могут существовать. Результат вывести на экран. Структура представления данных, где у родителя могут существовать более двух потомков |
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
01.08.2015, 20:00 | 4 |
В С++11 появились Variadic Templates.
0
|
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
|
|
01.08.2015, 23:24 | 5 |
Ferrari F1, разумеется могут. Только обязательно наличие первого параметра, а также от программиста требуется более-менее "угадать" типы аргументов. Пример - printf(const char* str ...). Из str она узнает не только о количестве аргументов, но и о их типе.
0
|
02.08.2015, 14:53 | 8 |
Попробуй написать что-то такое без использования va_arg'ов и стандартной библиотечной поддержки Си (т.е. на одних только "родных" технологиях Си++) и увидишь, что "из-за принципов" возникает много геморроя из ничего
cin cout и fscan fprintf
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
02.08.2015, 14:53 | 9 |
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||||||
02.08.2015, 15:08 | 12 | |||||
Например, так:
2
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
02.08.2015, 15:14 | 13 | |||||
Мне почему-то ближе такой вариант (с выводом в одну строку):
1
|
02.08.2015, 15:33 | 14 |
При таком раскладе действительно нет смысла опускаться до уровня языка Си. Правда опять всё упирается в шаблонное программирование, когда в хидера выставляется много кода, но это уже другой вопрос
0
|
02.08.2015, 16:42 | 16 |
Этого в принципе нельзя сделать. То, что сделано в gcc, это контроль со стороны компилятора в точке вызова printf'а при условии, что формат задан в виде строкового литерала. Понятно, что такими warning'ами накрывается 99% жизненных случаев, но это никак не технология безопасности. Между высоким уровнем (концепцией си++) и низким (концепция си) всегда есть соотношение: чем ниже уровень, тем меньше безопасности (в том смысле, что больше вещей перекладывается на программиста), но больше гибкости
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
02.08.2015, 20:50 | 17 |
А что же это тогда, если я явно получаю предупреждение в момент компиляции в случае несоответствия типов в формате и аргументов? Понятно, что это всё-таки предупреждение, а не ошибка, но дело тут в первую очередь именно в обнаружении ситуации на ранней стадии.
0
|
02.08.2015, 23:40 | 18 |
В таком примере сия технология ничего не обнаружит
C char *format = "%s"; ... printf (format, 1);
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
03.08.2015, 09:06 | 19 | |||||
Потому что в таком примере обработка формата по сути выносится в run-time.
На сях вероятно стоило бы использовать #define, а не char* для обеспечения проверки в compile-time. А вот на C++ правильно объявить указатель на строку формата:
0
|
03.08.2015, 11:58 | 20 |
А кто тебе сказал, что форматная строка является константной? Она точно так же может генерироваться в runtime
0
|
03.08.2015, 11:58 | |
03.08.2015, 11:58 | |
Помогаю со студенческими работами здесь
20
Организовать цикл с неопределенным числом итераций Функции с неопределенным числом фактических параметров Вычислить функцию с неопределенным числом параметров Вводится строка из нескольких слов и чисел,разделенных неопределенным числом пробелов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |