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

M_PI + cmath в Visual Studio - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2013, 15:02     M_PI + cmath в Visual Studio #1
Всем привет.
Почему в VS (проверено на 2010 и 2012) при использовании cmath нельзя достучаться до константы M_PI, а при использовании math.h - можно?
C++
1
2
3
4
5
6
7
8
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h> // находит M_PI
// #include <cmath> // не находит M_PI
int main()
{
   std::cout << M_PI << std::endl;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
06.05.2013, 15:33     M_PI + cmath в Visual Studio #2
А если попробовать define до include iostream? Может быть, iostream подключает cmath до define...
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2013, 15:36  [ТС]     M_PI + cmath в Visual Studio #3
Somebody, точняк. Вот ведь прикол. Понапихали хедеров одних в другие
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.05.2013, 23:47     M_PI + cmath в Visual Studio #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Понапихали хедеров одних в другие
В принципе все правильно. Зачастую хедеры друг друга цепляют. Это нормально.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.05.2013, 23:56  [ТС]     M_PI + cmath в Visual Studio #5
Цитата Сообщение от go Посмотреть сообщение
В принципе все правильно. Зачастую хедеры друг друга цепляют. Это нормально.
Где-то недавно уже читал про это. Вроде как стандарт не регламентирует какие хедеры имеют право каких включать. Остается только догадываться какой производитель компилятора какую матрешку соберет.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
13.05.2013, 18:57     M_PI + cmath в Visual Studio #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Остается только догадываться какой производитель компилятора какую матрешку соберет.
На самом деле об этом задумываться не приходится. Достаточно знать, в каком заголовочном файле реально объявлен используемый символ, и явно подключать этот файл, не уповая на то, что разработчики используемой реализации стандартной библиотеки уже подключили его куда-то ещё. Я стараюсь делать так всегда, поэтому у меня даже в небольших модулях зачастую 10-20 строк уходит под инклуды.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2013, 21:22     M_PI + cmath в Visual Studio
Еще ссылки по теме:

Какую среду программирования лучше выбрать для обучения языку C++ ? Visual Studio,Visual Basic или Visual C++? C++
Visual Studio Team Foundation Serverl или Visual Studio Professional C++
Ругается на if (a>M_PI) C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
13.05.2013, 21:22  [ТС]     M_PI + cmath в Visual Studio #7
silent_1991, с одной стороны, не каждый проект будет портироваться на другие системы и даже собираться другим компилятором, и беспокоиться о неподключенных вручную хедерах, если все и так работает - это лишние телодвижения. С другой стороны, даже подключая все хедеры как надо, проблему, описанную в топике, не решить, если не указать нужные дефайны перед всеми хедерами. Ибо не ясно кто кого может включать.
Yandex
Объявления
13.05.2013, 21:22     M_PI + cmath в Visual Studio
Ответ Создать тему
Опции темы

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