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

Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Библиотека для распознавания изображений. Простая и быстрая. Подскажите пожалуйста http://www.cyberforum.ru/cpp-beginners/thread1093951.html
Добрый день. Возникла необходимость программно распознавать некие области на изображении. Суть в следующем: делается скрин экрана компьютера и необходимо на этом скрине найти расположение определенных элементов, надписей, кнопок и т.п.. Изображения кнопок все время будут одинаковые, шрифты надписей тоже, короче, все нужные для поиска области изображения всегда выглядят одинаково. Подскажите...
C++ Найти количество идеальных чисел в заданном диапазоне Находит количество идеальных чисел в заданном диапазоне. Идеальным называется число, равное сумме всех его делителей, не включая его самого (6 = 1 +2 +3) http://www.cyberforum.ru/cpp-beginners/thread1093909.html
C++ Найти максимальный из повторяющихся элементов двумерного массива
Есть три задачи, не могу разобраться, хоть убей. Буду крайне признателен если поможете. Заранее огромное спасибо. 1) Найти максимальный из повторяющихся элементов двумерного массива 2)Написать функцию (или макроопределение), которая находит угол тре-угольника по его сторонам. Написать функцию angles c переменным чис-лом параметров, которая находит углы n-угольника по заданным сторонам. Написать...
bcc32+NetBeans 7.3.1 C++
Всем привет. Подскажите пожалуйста, как прикрутить компилятор bcc32 к IDE NetBeans 7.3.1 Компилятор скачивал с оффициального сайта Embarcadero. Проблема в том, что в средствах сборки для c/c++ его нет, а при добавлении пишет, что наборы компиляторов не найдены. Нужно его вручную прикручивать как-то. ОС Win7.
C++ Как сделать указатель на массив http://www.cyberforum.ru/cpp-beginners/thread1093852.html
Здрасти. Как мне сделать указатель на массив: string stud= {{"49000", "Eddy", "Vedder", "dzienne", "19"}, {"49001", "Roger", "Waters", "wolny tok", "18"}, {"49002", "Jimmy", "Page", "dzienne", "20"}, {"49003", "Jim", "Morrison", "dzienne", "21"}, {"49004", "Jimi", "Hendrix", "dzienne", "19"}, {"49005", "Layne", "Staley", "dzienne", "17"}, {"49006", "Jerry", "Cantrell", "awans", "17"},...
C++ Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй ис Составить программу, которая определяет четыре объекта класса и выводит их на экран. Первый объект должен инициализироваться по умолчанию, второй использовать конструктор инициализации, третий - преобразование типа своего параметра к типу своего класса, а четвертый - функцию ввода данных. Помогите пожалуйста. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
11.02.2014, 14:56  [ТС]     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"?
Цитата Сообщение от ForEveR Посмотреть сообщение
kravam, printf работает не совсем так. Через ... можно передать любые параметры.
Я это знаю. Вникните в вопрос. Дело не в том, как она работает, а как она ОБЪЯВЛЕНА. А объявлена она так, что первый параметр не int, (а, по утверждению ShadowFirst, у функции со списком переменных параметров, он ничем кроме int быть не может, вот:
Цитата Сообщение от ShadowFirst Посмотреть сообщение
А если своими словами то вначале посылается не указатель на char а число int сколько аргументов будет идти дальше вот на это и ругается
).

++++++++++++++++++++++++++++++++++++++++++++

Цитата Сообщение от ShadowFirst Посмотреть сообщение
В свою очередь я вам то говорил не про printf а про va_start
Про что вы говорили, я помню, не надо делать хорошую мину при плохой игре- а именно, что вторым параметром макроса va_start должен быть первый параметр foo, а он ничем, кроме int быть не может, поскольку он и есть количество параметров, а без него мы как без рук. Ваши слова:
Цитата Сообщение от ShadowFirst Посмотреть сообщение
А если своими словами то вначале посылается не указатель на char а число int сколько аргументов будет идти дальше вот на это и ругается
Вот это вы говорили. А я сказал- "может" и в качестве примера привёл printf. И из того, что она не присутствует в моём коде, не значит, что о ней нельзя говорить и приводить в качестве примера. Кстати.

++++++++++++++++++++++++++++++++++++++++++++

SatanaXIII, первым пераметром foo НЕ ДОЛЖЕН быть int, такое вот требование к задаче. И одним из параметров должен быть char или bool

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Я бы с удовольствием поглядел код, которым вы будете описывать функции с переменным количеством аргументов.
Я не умею, и потому попросил об этом товарищей. А вот K&R умеют и поэтому я сдул у них код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include  <stdarg.h>
#include  <stdio.h>
void minprintf(char  *fmt,  ...){
     va_list ap; 
     char  *p,  *sval;
     int  ival;
     double  dval;
 
     va_start(ap, fmt); 
     for (p =  fmt;  *p;  p++)  {
        if (*p !=  '%' )  { 
           putchar(*p);
           continue;
     } 
     
     switch (*++p) {
       case  'd':
         ival =  va_arg(ap,  int);
         printf  ("%d",  ival);
       break;
       case 'f':
         dval = va_arg(ap, double);
         printf("%f",  dval);
      break; 
      case  's':
      for  (sval  = va_arg(ap, char *);  *sval;  sval++)
          putchar(*sval);
      break;
      default:
          putchar(*p);
          break;
     }
     va_end(ap);  
 }
}
 
////////////////////////////////////
 
int main () {}
Это компилится (и безо всяких int параметром для va_start, для ShadowFirst пишу; щас опять прибежит и скажет, что туда надо int пихать ). Но если добавить, такие, например, строчки:

C++
1
2
     char x= va_arg(ap, char);
     bool y= va_arg(ap, bool);
То всё, кранты. То есть небольшая подвижка в вопросе всё же есть- в первом приближении списки аргументов переменной длины, работают со всеми типами, кроме char и bool; почему? Предполагаю, дел связано с их размерами

++++++++++++++++++++++++++++++++++++++++++++

Цитата Сообщение от ForEveR Посмотреть сообщение
Можно так развлечься.
Не нужно никак развлекаться. Надо понять, почему среди аргументов в списке переменной длины не может быть bool или char, учитывая то, что такая невозможность нигде не оговорена- не в стандарте не у K&R

++++++++++++++++++++++++++++++++++++++++++++

Цитата Сообщение от Jupiter Посмотреть сообщение
мозги включи! магии не существует, а pritnf знает количество аргументов посредством парсинга строки формата.
Вот веришь, нет- способ, коим printf находит количество аргументов АБСОЛЮТНО не имеет отношения к рассматриваемому вопросу. Так что не фиг на ровном месте умничать. А вот способ, благодаря которому printf НЕ УЗНАЁТ количество аргументов (по первому параметру) очень даже в этом разговоре БЫЛ к месту (пока я не определил, что и без первого параметра int оно работает)- ShadowFirst, клянётся, что именно через этот параметр printf (посредством передачи параметра макросу va_start) узнаёт это количество. Так что скажи это ShadowFirstу. Научи его, как printf определяет количество аргументов.

Цитата Сообщение от Jupiter Посмотреть сообщение
а это сделано потому что символьный литерал(то что в одинарных кавычках) в языке Си имеет тип int.
, выше смотри код, там вообще не передаются аргументы, ни в кавычках, никак, а компилятор всё равно не переваривает ни bool, ни char.

++++++++++++++++++++++++++++++++++++++++++++

Собственно если бы это было оговорено где-то и сказано- с bool и char не работает из-за размеров, то всё было бы понятно. Всё ж таки, передаваемый массив массив разбивается на ячейки размером по sizeof(int) аргументов, и если в нём встретятся char или bool, то они бы всё испортили. Но я нигде не нашёл такого ограничения.
 
Текущее время: 16:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru