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

баг студии? - C++

Восстановить пароль Регистрация
 
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
16.02.2012, 19:06     баг студии? #1
Есть такой код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdio.h"
 
void test_fun(int count, int ...)
{
    int * arr = &count + 1;
    for (int i = 0; i < count; i++)
        printf("%i ",arr[i]);
}
 
int main(int argc, char* argv[])
{
    test_fun(4,1,2,3,4);
    getchar();
    return 0;
}
gcc его компилирует нормально, билдер тоже. (вывод 1 2 3 4)
А в студии (2010) в режиме релиз результат другой: 2 3 4 80. Т.е почему-то не заносится в стек первый параметр. 80 - это мусор.
Просмотр дизассемлированного кода это подтверждает
Assembler
1
2
3
4
5
6
      test_fun(4,1,2,3,4);
00331051  push        4  
00331053  push        3  
00331055  push        2  
00331057  push        4  
00331059  call        test_fun
Если в свойствах проекта с\с++ \ оптимизация отключить "оптимизация всей программы", то все как надо:
Assembler
1
2
3
4
5
6
7
    test_fun(4,1,2,3,4);
00833F53  push        4  
00833F55  push        3  
00833F57  push        2  
00833F59  push        1  
00833F5B  push        4  
00833F5D  call        test_fun
Как вы думаете, это баг студии?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 19:06     баг студии?
Посмотрите здесь:

настройки студии ?? C++
C++ Есть ли в студии аналог FloatToStr?
C++ дебагер в студии 2010
C++ std::regex : баг на сайте или баг компилятора?
C++ Происходит ли установка студии?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 19:14     баг студии? #2
такие подробности передачи параметров стандартом не трактуются
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
16.02.2012, 19:20  [ТС]     баг студии? #3
Цитата Сообщение от OstapBender Посмотреть сообщение
такие подробности передачи параметров стандартом не трактуются
Ну и что?
Почему-то остальные компиляторы справляются нормально с задачей
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
16.02.2012, 19:35     баг студии? #4
нет тут никакого бага. напиши в стандартном виде
C++
1
void test_fun(int count, ...)
и увидишь, что все ок.
почему убрали инт и все заработало?
напиши
C++
1
void test_fun(int count...)
и подумай над результатами
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
16.02.2012, 19:53  [ТС]     баг студии? #5
спасибо. Так работает.

Получается, что в записи
C++
1
void test_fun(int count, int ...)
компилятор воспринимает инт перед точками как некую фиктивную переменную и поэтому в него ничего не пишет?
Но почему тогда на результат влияет опция "оптимизация всей программы"?
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 19:58     баг студии? #6
значит косячат другие компилляторы? раз пропускают
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
16.02.2012, 20:02     баг студии? #7
Запусти другие компиляторы с оптимизацией.
Напр g++ -O3 ...
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
16.02.2012, 20:04  [ТС]     баг студии? #8
Цитата Сообщение от renald Посмотреть сообщение
Напр g++ -O3 ...
g++ справляется нормально
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
16.02.2012, 20:07     баг студии? #9
Цитата Сообщение от AzaKendler Посмотреть сообщение
значит косячат другие компилляторы? раз пропускают
никто не косячит.
используете нестандартные расширения компиляторов - так знайте как они себя ведут.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 20:31     баг студии?
Еще ссылки по теме:

C++ не могу создать проект в 12 студии
две студии C++
C++ Ошибка с гетлайн в студии 2010

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

Или воспользуйтесь поиском по форуму:
renald
35 / 35 / 2
Регистрация: 11.02.2012
Сообщений: 105
16.02.2012, 20:31     баг студии? #10
У меня твой код с оптимизацией:
g++ выдает мусор
icc работает правильно
Yandex
Объявления
16.02.2012, 20:31     баг студии?
Ответ Создать тему
Опции темы

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