2010-12-21 33 views
0

爲string.h中包含路徑我生病看到警告的如何找到在Xcode

「的‘索引’影子宣言全局聲明」

指數string.h中定義。我不認爲這是我使用的任何東西所必需的,我真的不希望將索引中的所有本地增值變更爲其他東西。

任何人都知道一種方法來了解如何(通過什麼路徑)string.h被包括在內?是否有可能阻止它被包括在內?

回答

2

index函數實際上在/usr/include/strings.h中聲明,並且在POSIX問題7中被標記爲已移除。可以通過設置適當的POSIX版本以及編譯器標記-D_POSIX_C_SOURCE=200809來隱藏它的聲明。這也會隱藏問題7中棄用的其他功能,如bcopybzero

0

我覺得-Wshadow極其惱人,很少有用。即使你解決了這種情況,未來也一定會有其他人,特別是因爲系統頭文件可能會定義非標準函數和變量,這些函數和變量是你無意中隱藏的。

個人而言,我只是禁用警告,並手動確保沒有變量,函數等被命名爲相同的東西被使用。

+0

C和C++具有爲實現明確保留的名稱空間(例如以下劃線後跟大寫字母開頭的名稱),並且系統庫應該堅持這些名稱空間。如果您隱藏了未保留的內容,並導致出現任何問題,請將其報告爲錯誤。 – 2010-12-21 22:28:31

+0

@David:在這種情況下,我們正在討論UNIX兼容性所需的POSIX函數。系統庫實現者沒有選擇使用其中一個保留名稱的選項。如果你不需要POSIX擴展,你可以指定編譯器。 – 2010-12-22 03:13:19