在我的代碼庫中,我發現兩個模塊具有相同名稱的結構。這是給名稱衝突錯誤。有沒有辦法解決它,而無需更改代碼?如何解析兩個同名的結構?
回答
這是一個可怕的黑客,但它是可以使用宏來重新定義該結構的名稱,像這樣
// a.h
struct collide {
int a;
};
// b.h
struct collide {
float b;
};
// test.c
#define collide a_collide
#include "a.h"
#undef collide
#include "b.h"
int main(){
struct a_collide a;
struct collide b;
return 0;
}
你可能會要重命名的結構兩個頭給當有人不可避免地使用了錯誤的結構,也許在包裝頭部像
// wrap_a.h
#define collide a_collide
#include "a.h"
#undef collide
錯誤記住未定義宏這樣你就不會在你的代碼獲得隨機更換。
我不會說這麼可怕的黑客。一旦我不得不在我的程序中包含兩個由lex生成的scaner,並且他們發生大量符號衝突,所以我使用了類似的技巧,它的工作就像一個魅力。 – qrdl 2010-04-21 06:16:31
我認爲你更擔心的是有人被結構的重命名困惑,因爲這些衝突的名字可能來自外部。函數調用等的文檔將不再與實際的原型相匹配,因此任何用戶都必須清楚發生的事情。 – 2010-04-21 06:30:06
沒有想到真正的好主意。這裏有兩個不那麼好的:
如果你很幸運,你可以隔離您代碼,以便沒有模塊每一個需要在同一時間訪問這兩種類型的結構,然後只包括適當的標題,並離開你去。這是充滿危險的,將是一個可維護性的噩夢:任何追隨你的人將有理由詛咒你的名字和所有你的後代到第七代。
如果代碼是c89ish,您可以嘗試使用C++編譯器編譯並在命名空間中封裝一個或多個違規結構。這引入了兩種語言中所有挑剔的小差異(投射規則,
class
作爲保留字,等等)的問題,所以它幾乎肯定違反了您的要求而不更改代碼。
祝你好運。
- 1. 兩個同名的結構,你如何選擇一個?
- 2. 解析結構
- 3. 的Android/JAVA - 解析不同結構
- 4. (Swift)如何解析與結構的JSON?
- 5. jQuery XML解析,兩個不同的節點,同名
- 6. 如何使用Boost.Spirit.Qi解析不同的結構?
- 7. 解析前的兩個JSON對象的JSON結構?
- 8. 解析HTML結構
- 9. 解析nf_conntrack結構
- 10. 解析HTML結構
- 11. 如何同時解析兩個不同的.xml文件?
- 12. 如何解析結構化格式?
- 13. 如何解析樹型數據結構?
- 14. 如何同步兩個具有不同結構的MySQL表?
- 15. 解析登錄的結構
- 16. 如何解析具有兩個具有相同名稱的標記的XML
- 17. 如何使用jquery解析解析反斜槓json結構?
- 18. C++將不同的JSON解析爲一個結構或類
- 19. 使用xml結構解析json結構
- 20. 如何解析Scala中一個解析器中的兩種不同類型?
- 21. 將兩個匿名函數解析爲相同的定義點?
- 22. 兩個輸出文件名解析爲相同的輸出
- 23. 如何解析一個字段包含一個XML結構?
- 24. 如何分析具有相同的結構,但不同的名稱
- 25. 如何解析這個JSON結構的列表視圖angular2 nativescript
- 26. 如何解析一個嵌套結構的html文件?
- 27. 它是否允許有兩個同名的結構?
- 28. 兩個結構相同的網址
- 29. 指向兩個不同的結構
- 30. ES6解構兩個對象具有相同的屬性名稱
更改代碼有什麼問題? – 2010-04-21 15:53:09
如果我能,我會。 :)對不起尼爾,在我的情況下,這甚至不是一個選項。我正在整合兩個不同的模塊,這兩個模塊都不在我的控制之下,而且正在導致它。 – Jay 2010-04-22 10:40:45