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

GCC и функции с переменным числом аргументов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Запись файла на дискету http://www.cyberforum.ru/cpp-beginners/thread964599.html
Здравствуйте! Каким образом можно записать.СОМ файл на нулевую дорожку и нулевой цилиндр дискеты? Заранее спасибо Можно ли это реализовать средствами С/C++?
C++ Нужный путь Доброй ночи, форумчане! Я программист ранга начинающего. Подскажите пожалуйста, что можно закодить, чтобы зависнуть в проецировании кода на хороший промежуток времени? Благодарю. http://www.cyberforum.ru/cpp-beginners/thread964586.html
C++ Формирование двух новых списков из исходного
Доброго времени суток. Задание такое: Структура: список однонаправленный. Реализовать функции: - сформировать список; - добавить элемент в произвольное место списка перед элементом с заданным...
mpi C++
Пытаюсь разобраться с mpi. нужно найти сумму элементов матрицы.Рассылка по процессам организована через mpi_Bcast. при выполнении на нескольких процессах программа зависает. не пойму, что не так....
C++ написать программу для прверки простого числа. язык программировние С http://www.cyberforum.ru/cpp-beginners/thread964559.html
Дано целое число, не превосходящее 2^32=4294967296. Написать программу для проверки того, является ли данное число простым. Определение простоты заданного числа оформить в виде отдельной...
C++ как выйти из программы при выполнении программы - выполняется выбранная операция, после чего при нажатии любой кнопки цикл повторяется... вопрос: Что нужно добавить и где, чтобы при выполнении программы в конце при нажатии... подробнее

Показать сообщение отдельно
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517

GCC и функции с переменным числом аргументов - C++

29.09.2013, 01:43. Просмотров 563. Ответов 7
Метки (Все метки)

Писал мини приложение в студии для работы с векторами, один из методов просто получает сколько угодно аргументов и заполняет координаты вектора по разным измерениям этими данными (и так либо пока данные не закончаться либо пока кол-во измерений указанное при создании вектора не закончиться). Привожу код:
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
#define newGVector ((GVector*) malloc(sizeof(GVector)))
 
struct GVector{
    int dimSize;
    double* data;
};
 
GVector* createVector(int dimSize){
    GVector* vec = newGVector;
    vec->data = (double*) malloc((vec->dimSize = dimSize) * sizeof(double) );
    return vec;
}
 
GVector* initVector(GVector* vec, double item, ...){
    int i, dimSize = vec->dimSize;
    double* items = &item;
    for (i = 0; i < dimSize && items; i++)
        vec->data[i] = *items, items++;
    return vec;
}
 
void printVec(GVector* vec){
    int i;
    printf("[");
    for(i=0; i<vec->dimSize-1; i++)
        printf("%-6.1f",vec->data[i]);
    printf("%.1f]\n",vec->data[i]);
}
При компиляции компилятором microsoft вот этого кода всё хорошо:
C
1
2
3
4
    printf("First vector:\n");
    GVector* vec1 = createVector(3);
    initVector(vec1, 1.0, 2.0, 3.0);
    printVec(vec1);//выведет [1.0 2.0 3.0]
Но если компилирую через gcc то мой метод вместо значений подтягивает мусор:
C
1
2
3
4
    printf("First vector:\n");
    GVector* vec1 = createVector(3);
    initVector(vec1, 1.0, 2.0, 3.0);
    printVec(vec1);//выведет [1.0 1.$ 0.0]
Тоесть первое значение оно подхватывает, вместо следующего всегда 1.$, а дальше идут нули. Я так понимаю что gcc решили выпендриться и по своему сделали передачу аргументов функциям, я так догадываюсь что второе это указатель на область памяти где именно те аргументы или ещё что-то хитрое, подскажите пожалуйста можно ли заставить gcc поступать с аргументами функций так же как и остальные компиляторы? Просто вариант с va_list мне не нравиться - там ведь получаеться нельзя двигаться по списку аргументов не зная заранее сколько их, а я хотел бы чтобы не надо было передавать никаких int count, а просто только значения и всё, ну как у меня в текущем варианте, с va_list выходит это не получиться ... или получиться ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru