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


Гость






Цитата
(сильно упращенная версия)
Вот эта "сильно упрощенная версия" у тебя компилируется? Насколько я вижу, #define M_PI в заголовочном файле закомментирован...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


Цитата(volvo @ 22.11.2007 17:15) *
Вот эта "сильно упрощенная версия" у тебя компилируется? Насколько я вижу, #define M_PI в заголовочном файле закомментирован...
упс, закомментированно должно было быть тронточие.. сейчас исправлю.

зы если бы компилировалась я б в math.h не заглядывалsmile.gif

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


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


Гость






Вот так выглядит фрагмент 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
(подчеркиваю, в крайнем случае - лучше такого не делать)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


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

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

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


>> Вот так выглядит фрагмент math.h? ...
да
>>Тогда надо смотреть на командную строку компилятора. Если там присутствует параметр -ansi
присутствует..
>>Я не знаю, что там творится в DevC++, но Сode::Blocks этот параметр не добавляет, поэтому все прекрасно компилируется...
изменил Compiler Options(убрал поддержку ANSI), все работает... спасибо!

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


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


Гость






Надо еще одну строчку дописать:


#define _USE_MATH_DEFINES
#include <math.h>
int main(void){
double d= M_PI;
return 0;
}

 К началу страницы 
+ Ответить 

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

 





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