2014-02-07 65 views
1

我正在一個項目中,我有一個標題,其中定義了listlist_elem結構非常像實際的c庫(實現列表沒有錯誤)。我正在寫使用列表實現一個源文件,我收到以下警告:C隱式聲明的內置malloc

warning: implicit declaration of function ‘malloc’ [-Wimplicit-function-declaration] 

這是list_elem結構的聲明

/* List element. */ 
struct list_elem 
    { 
    struct list_elem *prev;  /* Previous list element. */ 
    struct list_elem *next;  /* Next list element. */ 
    }; 

,我用在這裏:

//creates a list element 
struct list_elem le_current; 
&le_current = (struct list_elem *)malloc(sizeof(struct list_elem)); 

我知道同一個問題還有另外一個問題,但不像那個人,我確實包括了

#include <stdlib.h> 

,並且還定義了列表

#include "lib/kernel/list.h" 
+2

感興趣的可能是「不投射malloc線程」 - http://stackoverflow.com/questions/605845/do-i -cast-of-malloc的結果 – Jimbo

+0

最不可能鑄造malloc – KRUKUSA

+3

隱式聲明意味着編譯器沒有看到'malloc'的聲明......在這個語句之前是否包含了'stdlib.h' defo? (我知道你說過你做過但可能值得重複檢查)。 – Jimbo

回答

6

它幾乎確定<stdlib.h>不說,獲取malloc被隱式地聲明編譯器警告消息的代碼之前包括在報頭中。你應該看看以下幾種情況:

  • #include <stdlib.h>出現在條件代碼(由於預處理語句,如#if#elif,或者#else),而不是實際包含。
  • 獲取警告的行早於包含<stdlib.h>的行。
  • 您並未編譯您認爲自己的源文件。
  • 您尚未將編輯緩衝區的內容保存到磁盤,因此正在編譯的文件的版本是舊版本,而不是您在編輯器中查看的版本。
  • <stdlib.h>包括之前,還有一個#define與別的東西代替malloc(以及可能的#undef<stdlib.h>之後是包括在內。(這是罕見的,但可能的。)

如果這些不露錯誤,你應該減少問題到short, self-contained compilable example。這樣做的練習很可能會照亮問題。