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

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

Войти
Регистрация
Восстановить пароль
 
Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
#1

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

16.02.2012, 19:06. Просмотров 535. Ответов 9
Метки нет (Все метки)

Есть такой код

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
Как вы думаете, это баг студии?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 19:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос баг студии? (C++):

std::regex : баг на сайте или баг компилятора? - C++
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через 35 секунд компилятор gcc 4.8

настройки студии ?? - C++
какие самые оптимальные настройки студии чтобы всё паботало хорошо?

две студии - C++
можно ли установить две студии: 2008 и 2012

дебагер в студии 2010 - C++
'indexer.exe': Loaded 'C:\Users\shirokov_m\svn\trunk\bin\Debug\indexer.exe', Cannot find or open the PDB file 'indexer.exe': Loaded...

Происходит ли установка студии? - C++
Я скачал вроде визуал студию и стал ее как будто бы устанавливать. Прошло так наверно минут семнадцать, может даже чуть больше. Таки...

Ошибка с гетлайн в студии 2010 - C++
Ошибка указывает на строку с заполнением ФИО, пишет идентификатор getlaine не определен. Как можно решить данную проблему? #include...

9
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 19:14 #2
такие подробности передачи параметров стандартом не трактуются
0
Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
16.02.2012, 19:20  [ТС] #3
Цитата Сообщение от OstapBender Посмотреть сообщение
такие подробности передачи параметров стандартом не трактуются
Ну и что?
Почему-то остальные компиляторы справляются нормально с задачей
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
16.02.2012, 19:35 #4
нет тут никакого бага. напиши в стандартном виде
C++
1
void test_fun(int count, ...)
и увидишь, что все ок.
почему убрали инт и все заработало?
напиши
C++
1
void test_fun(int count...)
и подумай над результатами
2
Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
16.02.2012, 19:53  [ТС] #5
спасибо. Так работает.

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

не могу создать проект в 12 студии - C++
пытаюсь создать консольное приложение в Visual Studio 2012, но при попытке создания выскакивает следующее окно и проект не создаётся. Кто...

Есть ли в студии аналог FloatToStr? - C++
Есть ли в студии аналог FloatToStr?

Подсветка подключаемых библиотек в студии - C++
Начну издалека - например я хочу подключить библиотеку &lt;iostream&gt; - стоит мне только написать (#include &lt;io), и студия мне уже предлагает...

Не могу отрыть проект в студии - C++
Всем привет! Скачал ГитХабовский проект. Хотел его поковырять, но вот незадача студия его не кушает. Ругается. По ошибке вижу,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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