簡體   English   中英

非本地變量在C ++中使用匿名類型警告

[英]non-local variable uses anonymous type warning in C++

我正在編譯一個使用GCC 4.7的C庫的C ++應用程序。

編譯時,收到以下警告:

warning: non-local variable ‘const ptg_t param’ uses anonymous type
warning: ‘typedef const struct<anonymous> ptg_t’ does not refer to the unqualified type, so it is not used for linkage

為什么c ++將其視為警告,而c則不? 有沒有一種方法可以解決此問題,而無需更改定義了ptg_t param的庫頭文件?

C ++的設計期望實現將使用類型名稱作為錯誤符號名稱的一部分。 C並非以這種期望設計的。

這是因為C沒有函數重載,而C ++有。 在C ++中,您可以具有相同名稱的不同實體,因此需要名稱修飾。

因此,在C ++中,涉及匿名類型的外部異常。

首選的解決方法是將C代碼編譯為C,而不是C ++。 然后將其與您的C ++程序的其余部分鏈接。 當您包含C ++的標頭時,請執行以下操作:

extern "C" {
    #include "headername.h"
}

這需要重復:不要將C代碼編譯為C ++。 C不是C ++的子集,此外,還有一些有效的C程序,這些程序也都是有效的C ++,但在C ++中所需的行為與在C中所具有的行為有所不同。C++很容易從C移植到C中,但並不完全與C向后兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM