2012-02-29 164 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具體的線路。這是給錯誤.h文件是

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

任何線索的問題是什麼嗎?

+2

才能確保所有的標題被適當的ifdef只包含一次? – Bort 2012-02-29 17:10:29

+0

您確定包含在文件範圍內嗎? – wildplasser 2012-02-29 17:51:15

+0

我從特定文件中刪除了#include ,現在正在編譯。其他文件中包含。我仍然不明白問題是什麼。 Math.h有自己的#ifndef來防止它被多次包含。至少現在正在編譯。 – 2012-02-29 17:55:21

回答

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)。 – 2012-12-14 00:07:48

相關問題