Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				Столкнулся с забавным фактом. Не знаю, баг ли это или фича - но штука странная. 
 
В общем, если в опциях компилятора gcc включена поддержка c++11, то перестаёт работать инклуд математических констант из <cmath> - например, хорошо всем знакомых M_PI и M_E. 
Если отключить поддержку нового стандарта - то всё инклудится хорошо, как и раньше... 
 
Пришлось использовать <qmath.h> (в Qt) - с ним такой проблемы не наблюдается. Вроде бы, это полный аналог <cmath>, или всё же нет?
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 22.04.2012 23:33 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				Так это же то же самое, что и <cmath>.
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 00:05 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 23.04.2012 01:13 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				gamecreator Wrote:точно? ты проверял? 
Да точно, это известный факт. Это же C++, в ней вся стандартная сишная библиотека не имеет расширений. Недаром же ты пишешь просто  include <iostream>... Вот,  Википедия подтверждает.
 gamecreator Wrote:из math.h тоже не подтягивает пи и е? 
Тоже, естественно.
 gamecreator Wrote:попробуй открыть cmath и посмотреть, может там надо какой-нибудь идентификатор объявить типа USE_MATH_DEFINES? 
Легко сказать - открой и посмотри    Там же повсюду условная компиляция с огромным числом констант... Да и прекрасно всё работает без каких-либо идентификаторов, если не под c++11 пытаться.
 gamecreator Wrote:кажись, еще в 9-й студии нужно было объявлять (не говоря уже о всех последующих) 
А причём здесь студия? Я же не под ней работаю...
			  
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 08:56 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
			
			 
			
				 (23.04.2012 08:56)Efrit Wrote:  Недаром же ты пишешь просто include <iostream> 
вот как раз iostream не равно iostream.h. поэтому и пишу
  (23.04.2012 08:56)Efrit Wrote:  Легко сказать - открой и посмотри   Там же повсюду условная компиляция с огромным числом констант... 
поиск люди придумали для таких ситуаций. я же находил в свое время. если совсем невмоготу - скинь файл, найти - дело пары минут.
  (23.04.2012 08:56)Efrit Wrote:  А причём здесь студия? Я же не под ней работаю... 
так файлы то могут быть и похожи. или по-твоему они их с нуля переписывают для каждого компилятора?
			  
			
			
  
When all gods have burnt to ashes in eternity of sorrow, 
Demons gonna tear your soul because there is no tomorrow.
			
		 |  
	 
 | 
	| 23.04.2012 09:12 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				Википедия Wrote:Каждый заголовочный файл из стандартной библиотеки языка Си включен в стандартную библиотеку языка C++ под различными именами, созданных путем отсечения расширения .h и добавлением 'c' в начале, например, 'time.h' стал 'ctime'. 
Это же, кстати, относится и к  <cstring>. А вот  <iostream> - да, всё-таки другой.
 gamecreator Wrote:если совсем невмоготу - скинь файл, найти - дело пары минут. 
Ну вот, погляди   
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 09:25 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 23.04.2012 09:46 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				И что с этого? Даже если компиляция действительно идёт по указанной тобой ветке, то константы оттуда всё равно не инклудятся... 
Ты лучше скажи мне, по какой ветке идёт компиляция при включении  c++11  
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 09:56 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
			
			 
			
				math.h включается всегда в cmath. так что: 
Code: 
 #if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED) 
#define _MATH_DEFINES_DEFINED 
 
/* Define _USE_MATH_DEFINES before including math.h to expose these macro 
 * definitions for common math constants.  These are placed under an #ifdef 
 * since these commonly-defined names are not part of the C/C++ standards. 
 */ 
 
/* Definitions of useful mathematical constants 
 * M_E        - e 
 * M_LOG2E    - log2(e) 
 * M_LOG10E   - log10(e) 
 * M_LN2      - ln(2) 
 * M_LN10     - ln(10) 
 * M_PI       - pi 
 * M_PI_2     - pi/2 
 * M_PI_4     - pi/4 
 * M_1_PI     - 1/pi 
 * M_2_PI     - 2/pi 
 * M_2_SQRTPI - 2/sqrt(pi) 
 * M_SQRT2    - sqrt(2) 
 * M_SQRT1_2  - 1/sqrt(2) 
 */ 
 
#define M_E        2.71828182845904523536 
#define M_LOG2E    1.44269504088896340736 
#define M_LOG10E   0.434294481903251827651 
#define M_LN2      0.693147180559945309417 
#define M_LN10     2.30258509299404568402 
#define M_PI       3.14159265358979323846 
#define M_PI_2     1.57079632679489661923 
#define M_PI_4     0.785398163397448309616 
#define M_1_PI     0.318309886183790671538 
#define M_2_PI     0.636619772367581343076 
#define M_2_SQRTPI 1.12837916709551257390 
#define M_SQRT2    1.41421356237309504880 
#define M_SQRT1_2  0.707106781186547524401 
 
#endif  /* _USE_MATH_DEFINES */
  
более того,
 math.h Wrote:These are placed under an #ifdef since these commonly-defined names are not part of the C/C++ standards. 
что означает, что в gcc их быть не может, основная фишка gcc - стандарты же
			  
			
			
  
When all gods have burnt to ashes in eternity of sorrow, 
Demons gonna tear your soul because there is no tomorrow.
			
				
(This post was last modified: 23.04.2012 10:04 by gamecreator.)
 
			 
		 |  
	 
 | 
	| 23.04.2012 10:01 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				Да причём здесь вообще всё это? Ну да, объявлены они в math.h, и что? 
Про проблему с использованием c++11 здесь ни слова не сказано... 
 
Есичо, я пробовал дефайнить _USE_MATH_DEFINES перед инклудом <cmath> - не помогало.
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 10:08 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 23.04.2012 10:16 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				Вот и я про что. Либо что-то дополнительно надо дефайнить, либо действительно баг. 
По крайней мере, в Qt помогает инклуд <qmath.h> - а вот как быть в "чистом" gcc, я даже не знаю...
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 10:18 | 
	
		
	 | 
	
		
		Efrit 
 
 
		
		
		
			
			
 
 
			 
			
Posts: 6186 
	
		
	 | 
	
		
			
			 
			
				gamecreator Wrote:самому писать нужные функции   
Ага, как же   
Code: 
 #ifdef WAR_TIME 
   #undef M_PI 
   #define M_PI  4  // в военное время число PI может достигать четырёх 
#endif  // WAR_TIME
  
			 
			
			
  
Welcome!
			
		 |  
	 
 | 
	| 23.04.2012 10:49 | 
	
		
	 |