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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
#1

M_PI + cmath в Visual Studio - C++

06.05.2013, 15:02. Просмотров 3140. Ответов 6
Метки нет (Все метки)

Всем привет.
Почему в 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
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 1
06.05.2013, 15:33     M_PI + cmath в Visual Studio #2
А если попробовать define до include iostream? Может быть, iostream подключает cmath до define...
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.05.2013, 15:36  [ТС]     M_PI + cmath в Visual Studio #3
Somebody, точняк. Вот ведь прикол. Понапихали хедеров одних в другие
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
08.05.2013, 23:47     M_PI + cmath в Visual Studio #4
Цитата Сообщение от Tulosba Посмотреть сообщение
Понапихали хедеров одних в другие
В принципе все правильно. Зачастую хедеры друг друга цепляют. Это нормально.
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
08.05.2013, 23:56  [ТС]     M_PI + cmath в Visual Studio #5
Цитата Сообщение от go Посмотреть сообщение
В принципе все правильно. Зачастую хедеры друг друга цепляют. Это нормально.
Где-то недавно уже читал про это. Вроде как стандарт не регламентирует какие хедеры имеют право каких включать. Остается только догадываться какой производитель компилятора какую матрешку соберет.
silent_1991
Эксперт C++
4949 / 3025 / 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
Еще ссылки по теме:

Ругается на if (a>M_PI) C++
C++ Массивы в Visual Studio
C++ Visual Studio
Ошибка: M_PI: необъявленный идентификатор C++
Перевод с RAD Studio в Visual studio C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 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
Ответ Создать тему
Опции темы

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