我有一些代碼在C++中有一個動態類系統,它有一個名爲GetClassName()的成員,這是一個相當無害的名字。但是,當被包含在一個Windows頭文件的大型項目中時,所有的問題都會發生。顯然,Windows使用了一個#define GetClassName(GetClassNameA或GetClassNameW),它把所有東西都搞砸了,而且我的虛擬調用樹全部搞砸了,這讓我在昏暗的愚蠢編譯器調試中失去了一天,試圖弄清楚什麼是錯誤的。Windows API和GetClassName()?別的名字?
因此,除了我詛咒微軟使用如此可怕的衝突名稱來定義#define(我的意思是有人應該誠實地爲此拍攝!),我要求3個目的。
- 什麼是 GetClassName()的另一個好名字?
- 反正是有 解決這個問題,所以在未來,其他 開發我的代碼庫不會 遭受同樣的命運
- 而對於 後人當別人 遇到這種類似的 莫名其妙的錯誤
更糟糕的是,在函數名稱周圍放置括號以避免宏替換的舊C語言(例如, 「const char *(GetClassName)()」)在這裏不起作用。我想這是因爲WinUser.h包含「#define GetClassName GetClassNameW」而不是「#define GetClassName(a,b,c)GetClassNameW(a,b,c)」。 – bk1e 2009-02-24 06:55:06
是的,這是純粹的邪惡C :) – 2009-02-24 09:13:38