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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Обьёктно-ориентрированная программа! http://www.cyberforum.ru/cpp-beginners/thread235856.html
Создать программу в которой базовый класс disd используется для хранения растояния между двумя точками. В классе создать виртуальную функцию TravelTime которая выводит на экран время необходимое для прохождения расстояния с учётом того, что расстояние заданное в милях, где скоросто 60 миль/час. В произвожном классе metric переопределить функцю TravelTime для определения времени которое необходимо...
C++ Найти все чётные числа и сумму в промежутке от a до b. Помогите пожалуйста сделать задание) С клавиатуры вводиится 2 исла a и b. Найти все чётные числа и сумму в промежутке от a до b. http://www.cyberforum.ru/cpp-beginners/thread235836.html
C++ Вопрос по #include
#include включает функции? если сам пишеш какую ни буть функцию надо и свою библиотеку писать или прям в в коде можно описать фукцию?
C++ Обойти шахматную доску ходом коня
Обязательные условия: 1. Рекурсивный алгоритм. 2. Размер доски вводит пользователь. 3. Использовать динамический массив. #include "stdafx.h" #include "clocale" #include "iostream" using namespace std;
C++ Помочь с прогой http://www.cyberforum.ru/cpp-beginners/thread235737.html
#include <iostream.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #include <graphics.h> void menu(); void game(); void help();
C++ Работа С RS232 Здравствуйте, скажите где можно прочитать как отправлять данные на RS232 и принимать их (как в программе Terminal в консольном приложение на С++? подробнее

Показать сообщение отдельно
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
30.01.2011, 13:09     Настройка компилятора VS 2008 на исключение переполнений
Например, программа для вычисления факториала последовательности натуральных чисел 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 (без обработки ошибок исходном коде), чтобы после компиляции вместо "чуши" и нулей при переполнении выдавал оповещение об ошибке.

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

Заранее благодарен, всем, кто не поленился дочитать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru