2012-03-07 8 views
1

を使用していないコードのすべてがここにhttps://github.com/cole-christensen/airCシンプルなCプログラムは、OS X上でコンパイルしますが、Fedoraの16、含まMATH.Hないが、

を見つけることができるそれは痛いほど明白なようだが、それは動作しません。 #include <math.h>があり、まだM_PIは、私はそれが唯一のautotoolsとは何かを持っている可能性が前提と

airC.c: In function ‘x_curved’: 
airC.c:94:33: error: ‘M_PI’ undeclared (first use in this function) 

システム情報

gcc version 4.6.2 20111027 (Red Hat 4.6.2-1) (GCC) 
Linux fedora-oe 3.2.6-3.fc16.x86_64 

を認識されていません。それ以外の場合は私の混乱を批判する自由を感じる:)

EDIT:

Downvotesと役に立たない答えへのリンクが高く評価されていません。

マンページには、M_PIが定義されていて、M_PIがわからない#ifdefの後ろにある/usr/include/math.hに実際に定義されていることが明示的に記載されています。

+0

これは不十分な答えです。 /usr/include/math.hにはM_PIがあり、math.hのマンページには「ヘッダーは次の定数を提供する」と記載されています。すぐ後にM_PIが続きます。 – colechristensen

+0

ifdefを投稿できますか?なぜそれが見つからないのかを知る助けになるかもしれません。 – martiert

+0

/*いくつかの有用な定数。 */ #if defined __USE_BSD ||定義済みの__USE_XOPEN – colechristensen

答えて

2

M_PIはあなたがLinux上でそれを有効にする_GNU_SOURCEを定義する必要がC.

標準ではありません。 OS XはBSDから派生しているので、そこではおそらくルールが異なります。

+0

シンプルなマルチプラットフォームでこれを行うには元気な方法がありますか? (好ましくはオートツールを使用します) – colechristensen

+1

はい、 'configure.ac'にM_PIのテストを入れてください。それが見つからない場合は、 '_GNU_SOURCE'を定義して再試行し、' -D_GNU_SOURCE'を 'CFLAGS'(またはあなたの選択した別の変数)に追加してください。 – ams

+1

'__GNU_SOURCE'はおそらく間違ったマクロです。' M_PI'はPOSIXに付属していますので、そこから機能を使うべきです。そして、実際には、これに対処する必要はありません。 '__XOPEN_SOURCE'はあなたのシステムが実装している実際のPOSIXバージョンを含んでいます。 POSIXのために予期されるコンパイラインタフェースは 'c99'と呼ばれ、おそらく' gcc'の代わりにそれを使用すると正しい定義がトリガされます。 –

関連する問題