2014-11-02 72 views
6

未聲明的變量的抱怨我使用相同的源文件中定義爲宏:編譯器在宏

#define MY_MACRO (a, b,...) (...) 

宏被在文件中以後使用。

然而,編譯器會抱怨:

錯誤:一個未申報(在此函數第一次使用)。

這真的很奇怪..我錯過了一些明顯的東西?

+3

請顯示一個簡單的例子。 – 2501 2014-11-02 16:36:10

+3

如果您想要一個函數宏,參數列表的括號必須立即跟隨宏名稱,而沒有空格。因爲你已經定義了一個簡單的替換,其中'MY_MACRO'被擴展爲'(a,b,...)(...)',這可能不是你想要的。你可以用一個開關gcc中的'-E')顯示預處理輸出以幫助您跟蹤這些問題。 – 2014-11-02 16:36:34

+0

@Meehm:就是這樣!謝謝! – Iceman 2014-11-02 16:39:02

回答

12

我認爲問題是在MY_MACRO(a, b, ...)之間有一個空格。它應該是這樣的:

#define MY_MACRO(a, b,...) (...) 
5

刪除宏名稱和參數列表之間的空格。空格將宏頭與主體分開,因此它被視爲一個沒有參數的宏,它擴展到期望的參數列表,然後是所需的主體。