IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> #define M_PI, Cи, константа из библ.
сообщение
Сообщение #1


Человек
*****

Группа: Пользователи
Сообщений: 1 050
Пол: Мужской
Реальное имя: Станислав

Репутация: -  3  +


Добрый день!
Надо было вчера быстро написать программу (что б решить дом. задание)), а на компе только Си пришлось писать и вот столкнулся с такой проблемой...
пишу программку(сильно упращенная версия)
#include <math.h>
int main(void){
double d= M_PI;
return 0;
}

и получаю ошибку `M_PI' undeclared (first use this function), хотя в math.h, четко написанно
Цитата
/* Traditional/XOPEN math constants (double precison) */
/*...*/
#define M_PI 3.14159265358979323846


если же define M_PI, прописывать непосредственно в сурсе программы, то все работает.
функции типа cos(), sin() и тд вызываются...

компилятор gcc
IDE Dev-C++

заранее благодарен

Сообщение отредактировано: volvo -


--------------------
Спасибо!
Удачи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Вот так выглядит фрагмент math.h?
#ifndef __STRICT_ANSI__
#define M_E 2.7182818284590452354
#define M_LOG2E 1.4426950408889634074
#define M_LOG10E 0.43429448190325182765
#define M_LN2 0.69314718055994530942
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.78539816339744830962
#define M_1_PI 0.31830988618379067154
#define M_2_PI 0.63661977236758134308
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.70710678118654752440
#endif
Тогда надо смотреть на командную строку компилятора. Если там присутствует параметр -ansi, то __STRICT_ANSI__ является определенной, и все те #define определения просто не существуют...

Я не знаю, что там творится в DevC++, но Сode::Blocks этот параметр не добавляет, поэтому все прекрасно компилируется... В крайнем случае можно сделать так:

#ifdef __STRICT_ANSI__
#undef __STRICT_ANSI__
#include <math.h>
#define __STRICT_ANSI__
#else
#include <math.h>
#endif
(подчеркиваю, в крайнем случае - лучше такого не делать)
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 6:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name