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

Настройка компилятора VS 2008 на исключение переполнений - C++

Восстановить пароль Регистрация
 
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
30.01.2011, 13:09     Настройка компилятора VS 2008 на исключение переполнений #1
Например, программа для вычисления факториала последовательности натуральных чисел n.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream> 
#include <iomanip>
using namespace std;
unsigned long long factorial(int); 
int main() 
{
 
    for (int i = 0; i <= 68; i++) 
cout << setw(3) << i << "! = " << factorial(i) << endl; 
    return 0; 
}
// Рекурсивное описание функции факториала 
unsigned long long factorial (int n) 
{ 
if (n <= 1) 
return 1; 
else 
return n * factorial(n - 1); 
}
При запуске VS 2008 на 21 шаге начинает выдавать неверный результат, а после 65 шага вообще выдаёт нули.

Понятно, что это происходит оттого, что результат вычисления не укладывается в пределах unsigned long long.
Но почему сначала пишет всякую чушь, а потом нули? Почему, например не сразу нули, или не всё время "чушь"?

И самое главное, подскажите, кто знает, как от этого избавиться. Нельзя ли как-то так настроить компилятор Visual Studio 2008 (без обработки ошибок исходном коде), чтобы после компиляции вместо "чуши" и нулей при переполнении выдавал оповещение об ошибке.

Если компилятор настроить нельзя, то как "поймать" эту ошибку самому, что где и как прописывать в коде.

Заранее благодарен, всем, кто не поленился дочитать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2011, 13:09     Настройка компилятора VS 2008 на исключение переполнений
Посмотрите здесь:

C++ Смена Компилятора
Настройка MS VS 2008 C++
C++ настройка компилятора
Как можно защитить программу от переполнений буфера? C++
C++ Проблемы компилятора с++
C++ ошибка компилятора
Баг компилятора? C++
C++ Ошибки компилятора
C++ Настройка параметров компилятора
C++ Ошибки компилятора
Написание компилятора на C++ C++
C++ Если проект создала в Visual C++ Express 2008, он должен запуститься просто в VS 2008?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
30.01.2011, 14:04     Настройка компилятора VS 2008 на исключение переполнений #2
Цитата Сообщение от LVV Посмотреть сообщение
Но почему сначала пишет всякую чушь, а потом нули? Почему, например не сразу нули, или не всё время "чушь"?
undefined behavior, или хрен его знает
Цитата Сообщение от LVV Посмотреть сообщение
И самое главное, подскажите, кто знает, как от этого избавиться.
кроме программного контроля недопущения переполнения нет способов, кроме машинного, определения переполнения
Yandex
Объявления
30.01.2011, 14:04     Настройка компилятора VS 2008 на исключение переполнений
Ответ Создать тему
Опции темы

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