2012-03-23 53 views
5

這些關鍵字在 函數參數中的變量之前使用的含義是什麼?__in,__out,__in_opt的含義

  • __in
  • __out
  • __in_opt
+1

那些不是關鍵字,那是微軟的SAL註釋 – Necrolis 2012-03-23 05:40:14

+0

謝謝,這意味着它沒有實質性的影響?編譯器的編號爲 – Zcube 2012-03-23 05:49:00

+0

,編碼器應該幫助他/她正確使用API​​。 – Necrolis 2012-03-23 05:54:13

回答

9

這些都是一些上了年紀的裝飾宏的從微軟的SAL註釋(the newer ones現在遵循不同的外殼,從資本)。這些對編譯沒有實際的影響(在VS 2010下它們甚至沒有擴展),它們用於內聯API文檔。

  1. __in:該參數是該函數的輸入(只讀,調用者初始化)。
  2. __out:該參數包含函數返回時的輸出(只寫,調用者初始化)。
  3. __in_opt:由_in_opt_opt組成的複合註釋表明該參數是可選的並且可以設置爲默認值(通常爲NULL)。

你可以在這裏得到老裝飾的完整解釋here

+0

非常詳細非常感謝。我搜尋了很長時間,現在我終於在這裏找到了答案。 – Zcube 2012-03-23 06:10:38

3

正如Nercolis回答的那樣,這些是SAL註釋屬性。但是,這些不僅僅是內部或僅適用於API文檔。真正的目的是爲代碼分析。當您使用/analyze編譯器選項(項目屬性,代碼分析 - >常規)編譯項目時,這些在編碼問題中發揮重要作用。

例如,如果一個特定的指針參數說__in那麼它不能傳遞一個空指針。該函數不會檢查null,並可能導致SEH。 __in_opt參數可能爲空。當編譯器發現一些問題時,它會將其報告爲警告。見this article