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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,410
#1

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

11.02.2014, 09:13. Просмотров 993. Ответов 21
Метки нет (Все метки)

Действительно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdarg.h>
 
int foo (char* k,...) {
  va_list ap;
  va_start (ap, k);
  char x= va_arg (ap, char);
  va_end (ap);
}
 
int main(){
    return 0;
}

In function 'int foo(char*, ...)':
[Warning] 'char' is promoted to 'int' when passed through '...' [enabled by default]
(so you should pass 'int' not 'char' to 'va_arg')
if this code is reached, the program will abort

Короче, всё плохо. У K&R такого ограничения нет, в стандарте тоже:
8.3.5
...
the declaration
int printf(const char*, ...);
declares a function that can be called with varying numbers and types of arguments.
В чём же дело? Может, надо использовать какие-нибудь опции компилятора? g++ 4.6.2
Спасибо, кто откликнется.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 09:13     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"?
Посмотрите здесь:

Аргумент типа "int **" несовместим с параметром типа "int (*)[26]" - C++
Здравствуйте. Я не могу передать динамический двумерный массив в функцию. Как это можно сделать? И как можно нормально объявить массив ?...

Ошибка: "C4430 отсутствует спецификатор типа - предполагается int..." - C++
Гайз, помогите, только начинаю писать на С++, такая ошибка: &quot;C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не...

Вывести все значения массива типа int в поле "static" - C++
Здравствуйте! Есть массив int mass, заполненный случайными числами, так же есть форма, на форме есть поле &quot;static&quot; ...

Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int" - C++
// training.cpp: определяет точку входа для консольного приложения. // #include &lt;stdio.h&gt; #include &quot;stdafx.h&quot; /* печать таблицы...

Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int" - C++
Добрый день. Я получил задание написать программку на c++. КНИГА: • фамилия и инициалы автора ; • название книги; • год издания...

Дана строка с цифрами типа "Весы:4,5,6". Надо изъять цифры и работать с ними, как с типом int - C++
как будет помогите

Списки типа "ОЧЕРЕДЬ" - C++
Задание: Создать однонаправленную очередь с числами в диапазоне от –50 до +50. После создания очереди выполнить индивидуальное...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15634 / 9976 / 1499
Регистрация: 24.12.2010
Сообщений: 18,714
11.02.2014, 17:28     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"? #21
kravam, тогда остается только предположить полную невменяемость транслятора. Я взял твой код, прогнал через старинный BC 2.0 - вякнул только, что х не используется....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 17:33     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"?
Еще ссылки по теме:

Ошибка: несовместимые типы операндов ("int *" и "int") - C++
Дан список не менее 8 рабочих, ввести фамилию, кол. лет, стаж работы, сколько до пенсии. Вывести кому осталось меньше 15 лет до пенсии. ...

IntelliSense: operand types are incompatible ("int" and "int *") - C++
void Map::showmap() //вывод карты на экран { for ( int i = 0; i &lt; s; i++) { for ( int j = 0; j &lt; c; j++) { ...

невозможно преобразовать параметр 1 из "int" в "int *&" - C++
#include &lt;iostream&gt; using namespace std; void Func1(int *n) { cout &lt;&lt; *n &lt;&lt; &quot; = &quot; &lt;&lt; *n &lt;&lt; endl; } void Func2(int &amp;n) ...

Создание переменной типа "чар" из последовательности бит - C++
1. Получаю 8 чисел типа int '0' или '1'.То есть, например, 00101010 2. Как получить переменную типа char, двоичное значение которой...

Где должны быть аргументы (слева или справа) по отношению к перегружаемому знаку при перегрузке операций? - C++
Добрый день! Задача была такая-перезагрузить операцию деления /. Класс ster (от слова стерлинг) представляет собой сумму фунт шиллинг...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,410
11.02.2014, 17:33  [ТС]     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"? #22
Цитата Сообщение от Байт Посмотреть сообщение
kravam, тогда остается только предположить полную невменяемость транслятора. Я взял твой код, прогнал через старинный BC 2.0 - вякнул только, что х не используется....
Ну зачем же так грубо... Дай вывод этого кода:

C++
1
2
3
4
5
6
7
8
#include  <stdio.h>
 
////////////////////////////////////
 
int main () {
 printf ("%d %d\n", sizeof (char), sizeof (bool));
 getchar ();
}
Yandex
Объявления
11.02.2014, 17:33     Списки аргументов переменной длины, эти аргументы должны быть исключительно типа "int"?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru