2012-02-29 82 views
1

かなり大きなプロジェクトをコンパイルしようとしています。いくつかのファイルにはmath.hが含まれています。math.hコンパイルエラー:予想される宣言子または '...'の前に '(' '

"In file included from math.h:71:0, 

mathcalls.h:310:1: error: expected declaration specifiers or '...' before '(' token" 

私は私の数学ヘッダーが変更されていないと、彼らは私がちょうど書いた「ハロー数学の世界」プログラムと罰金などが、私は問題が何であるかはよく分からない。mathcalls内の特定の行を知っています。エラーを与えている時間ファイルが

/* Round X to nearest integral value, rounding halfway cases away from 
    zero. */ 
__MATHCALLX (round,, (_Mdouble_ __x), (__const__)); 

問題がここにあるものどれ手がかりですか?

+2

あなたはすべてのヘッダが適切なifdefsで一度だけ含まれていることを確認していますか? – Bort

+0

ファイルスコープにが含まれていますか? – wildplasser

+0

特定のファイルから#include を削除しましたが、コンパイル中です。他のファイルにはが含まれています。私はまだ問題が何かを理解していない。 Math.hには、それが複数回含まれないようにするための独自の#ifndefがあります。少なくとも現在はコンパイル中です。 –

答えて

3

<math.h>を含める前にroundと定義しました。このような何か:

#define round(x) trunc((x+0.5)) 
#include <math.h> 

はGCC-4.6.2で上記のコードをコンパイルするには、次のエラーが出力されます。

In file included from /usr/include/math.h:71:0, 
       from a.c:2: 
/usr/include/bits/mathcalls.h:310:1: error: expected declaration specifiers or '...' before '(' token 
+0

'log2'を定義すると、同じタイプのエラーが発生します。あるいは、mathcalls.hで最初に使用された他のものがたくさんあります。これはgccでのみ発生し、他のコンパイラ(Visual Studioなど)では発生しません。 –

関連する問題