邪惡的Windows
眾所周知,WIN32 API分為Unicode版和非Unicode版,由于Unicode是后來加進來的,為了向下兼容,微軟的兄弟們使用了宏來統(tǒng)一接口,如MessageBox的定義:




















posted on 2009-07-29 23:38 Heath 閱讀(2818) 評論(24) 編輯 收藏 引用 所屬分類: Programming Language
There is no end, it is just the beginning! - A Game Developer's Notes
posted on 2009-07-29 23:38 Heath 閱讀(2818) 評論(24) 編輯 收藏 引用 所屬分類: Programming Language
This is an overstatement. There are tons of defs in the system header files, why you don't complain about them? 回復 更多評論
說明微軟高啊
微軟能把這么破的玩意組織了這么都年 ,你能說不好嗎?
存在的就是合理的! 回復 更多評論
確實是很大的陷阱,這種宏很多,一不小心就掉井里。
如果自己編程序的話,名字改了也就改了,即使改成阿貓阿狗也無所謂。但是如果是團隊開發(fā),而且這些名字已經規(guī)定在了接口規(guī)范里,就不是那么容易改的了。
況且,作為好的編程習慣,保持方法名的可讀性是非常重要的! 回復 更多評論
這種編譯錯誤很好找,博主不會看不懂錯誤提示吧 回復 更多評論
這個還真么注意到,放在命名空間里也會替換么? 回復 更多評論
@岳陽
@fuckyou
自己實踐去吧,別沒事在這里亂吐口水... 回復 更多評論
存在就是合理。在 Windows 平臺上寫東西,這種錯誤不應該犯。就像你用 C 寫程序,你總不能要求用 do 當函數(shù)名是應該被接受的。 回復 更多評論
@cyberamoeba
呵呵,這句話真有意思,你能像記住C語言關鍵字那樣記住那么多Windows API嗎?當你發(fā)現(xiàn)自己連命名一個SetPort函數(shù)的權力都沒有的時候,你還會這樣想嗎?上面例子中的MessageBox,當然是個人都知道。 回復 更多評論
你有命名MessageBox的權利,條件是別去包含 <windows.h>
既然你包含了這個文件,那就乖乖換名字吧。 回復 更多評論
我也遇到過類似的問題,當時沒有細究,只是重新命名了,原來是宏的問題。。。 回復 更多評論
@hdqqq
undef掉MessageBox,直接調用MessageBoxA或者MessageBoxW不就行啦,真是OUT得不行了。。。 回復 更多評論
你認為windows該怎么做才能做到兼容ascii和Unicode呢?自己定義的函數(shù)加個項目名稱或者單位的前綴都是不錯的。看看jni生成的c接口 回復 更多評論
既然你知道了原因,那出現(xiàn)了這個錯誤信息你肯定立刻就反應過來的了。 回復 更多評論
只有注冊用戶登錄后才能發(fā)表評論。 | ||
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
![]() |
||
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|