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

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

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

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

11.02.2014, 09:13. Просмотров 929. Ответов 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"?
Посмотрите здесь:

возвращаемый тип "main" должен быть "int", а не C++
МАССИВЫ: динамические мас.значение типа "int *" нельзя присвоить сущности типа "int" C++
C++ VS2010 разница между "int _tmain()" и "int main()"
C++ Что делать с ошибкой: C2440: инициализация: невозможно преобразовать "int **" в "int *"
C++ Ошибка: "Значение типа float нельзя присвоить сущности типа int"
Аргумент типа "int **" несовместим с параметром типа "int (*)[26]" C++
Ошибка: "C4430 отсутствует спецификатор типа - предполагается int..." C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
 Аватар для Байт
15037 / 9439 / 1381
Регистрация: 24.12.2010
Сообщений: 17,459
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 в поле "static" C++
Исправить ошибку компиляции "error C4430: отсутствует спецификатор типа - предполагается int" C++
C++ Аргументы функции: что значит "большие" и "небольшие" аргументы?
Значение типа "void" нельзя использовать для инициализации сущности типа "int" C++
Исправить ошибку C2664: fcvt: невозможно преобразовать параметр из "int" в "int *" C++

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
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"?
Ответ Создать тему
Опции темы

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