其中一些預處理器定義位於WinMain函數和其他Windows庫函數中。他們的目的是什麼?他們如何工作?將它們寫入你的實現或函數調用是一個好習慣嗎?__in __out __in_opt __allowed()的用途是什麼,它們是如何工作的?我應該在自己的代碼中使用類似的結構嗎?
我的初步研究表明,他們只是簡單地設置equlivalent到:
#define __in
#define __out
#define __in_opt
這意味着他們得到與預處理器通什麼取代。他們只是一個文檔方法,沒有任何功能?
如果是這樣,我可以看到像這樣記錄代碼的好處。有了像doxygen這樣的東西,你需要寫出兩次參數名稱。所以這在理論上可以幫助減少重複,並保持一致性...
我對__allowed()
應該如何工作沒有理論。
當工具依賴於不可靠和不正確的信息時,這不是一個問題嗎? – 2010-11-21 20:16:11
當依賴不正確的信息時,這總是一個問題。 SAL註釋也不例外。這當然有點冒險,但這是C的聲明/定義架構固有的 - 你總是要確保它們匹配。 – MSalters 2010-11-22 10:29:21
@Cheers通過代碼分析爲調用者和被調用者檢查SAL註釋。註釋不僅表達作者的意圖,而且也被驗證(在可能的情況下)。因此,他們既不可靠也不正確。考慮'void foo(_In_opt_ int * p){* p = 42; }'。參數'p'被標記爲可選的,但是實現假定它總是有效的。代碼分析將識別問題並提供診斷信息。 – IInspectable 2013-07-13 12:14:38