2012-11-12 62 views
1

我想用g ++ 4.7使用dmalloc。使用最近g ++的dmalloc

錯誤消息我得到有:

/usr/include/dmalloc.h:457:32: error: declaration of 'char* strdup(const char*)' has a different exception specifier 
/usr/include/string.h:130:14: error: from previous declaration 'char* strdup(const char*) throw()' 
  1. 爲什麼C函數拋出異常?
  2. 我能以某種方式告訴編譯器在編譯時忽略throw()說明符嗎?

...或者我必須以某種方式修補dmalloc?

+3

您正在將您的程序編譯爲C++而不是C程序。 –

+0

我不理解評論。是的,它是一個C++程序,但是strdup是libc的一個功能。 – arved

+0

當你使用g ++編譯時,你是如何決定函數來自libc的? –

回答

1

C函數不會拋出異常,但異常可以跨C函數幀傳播。 throw()規範告訴編譯器這個函數不會產生異常,無論是由函數生成還是由鏈中的其他函數生成。

在這種情況下,您正在編譯一個C++源代碼,該代碼恰好包含使用C鏈接的函數的外部聲明。僅憑這一點,編譯器就不能得出關於包含函數的庫的結論,也不能得出用於實現該函數的語言的結論,因此編譯器不能假定任何有關異常的內容,並且必須保守地編譯代碼, )規範沒有放在那裏。

您必須更新和/或修補dmalloc。

0

dmalloc.h中刪除strdup的聲明。它似乎玩C庫的技巧,不再工作。