Почему необходимо использовать синтаксис С?(Visual Studio)
Начал изучать программирование на C++ и захотел сделать консольное приложение для нахождения площади круга. Решил для этого подключить число Pi и Microsoft(https://docs.microsoft.com/ru-ru/cpp/c-runtime-library/math-constants?view=msvc-160) сказал мне сделать это так:
#define _USE_MATH_DEFINES // for C++
#include <cmath>
Сделал таким образом, но Visual ругается, мол идентификатор не M_PI не определен.
Сам код:
#include <iostream>
#define _USE_MATH_DEFINES
#include <cmath>
int main(){
std::cout << "FUCK THIS WORLD!!!" << "\n";
double R;
double S;
std::cout << "enter radius" << "\n";
std::cin >> R;
S = M_PI * pow(R, 2); //в этой строке выдает ошибку
std::cout << "Arrea = " << S << " sm^2";
return 0;
}
При этом, если делать через
#include <math.h>
, то все ОК, вообще проблем нет. Может кто объяснить, из-за чего такая проблема?
Ответы (2 шт):
А вот так случилось. Ну не подвезли в плюсы число пи в удобном плюсовом виде. Надо было функции Бесселя подвозить или auto_ptr подвозить-вывозить. А до числа пи добрались только в 20 стандарте...
std::numbers::pi - http://eel.is/c++draft/numbers
А то этого либо math.h, либо ручками, с нужной точностью. К тому же в некоторых студиях это не сразу и работает - https://stackoverflow.com/questions/26065359/m-pi-flagged-as-undeclared-identifier
Директивы, контролирующие библиотечные заголовочные файлы, следует задавать строго до подключения любых заголовочных файлов (обычно такие директивы выносятся в отдельный приоритетный заголовочный файл или задаются посредством опций компилятора):
#define _USE_MATH_DEFINES
#include <iostream>
#include <cmath>
Иначе в месте добавления директивы целевой заголовочный файл может оказаться уже включенным и директива не возымеет эффекта.
Также следует обращать внимание на то, чтобы прекомпилируемый заголовочный файл использовал строго тот же набор директив.