2012-03-23 10 views
5

Jakie jest znaczenie tych słów kluczowych używanych przed zmiennymi w parametrach funkcji ?Znaczenie __in, __out, __in_opt

  • __in
  • __out
  • __in_opt
+1

to nie są słowa kluczowe, to jest adnotacja SAL Microsoftu – Necrolis

+0

dzięki, to znaczy, że nie ma żadnego istotnego efektu? – Zcube

+0

dla kompilatora nie, dla programisty powinien pomóc mu/jej poprawnie korzystać z API. – Necrolis

Odpowiedz

9

Są to niektóre starsze dekoracji makra z SAL adnotacje Microsoftu (the newer ones teraz podążać inną obudowę, zaczynając od kapitału). Nie mają one rzeczywistego wpływu na kompilację (w VS 2010 nie są one nawet rozszerzane), są one dostępne do wbudowanej dokumentacji interfejsu API.

  1. __in: ten parametr jest wprowadzeniem do funkcji (tylko do odczytu, inicjowany program wywołujący).
  2. __out: ten parametr zawiera dane wyjściowe funkcji po jej zwróceniu (tylko do zapisu, inicjowany wywołujący).
  3. __in_opt: adnotacji związek utworzony z _in i _opt, _opt wskazania, że ​​parametr jest opcjonalna i może być ustawione na wartość domyślną (zazwyczaj NULL).

Tutaj można uzyskać pełne wyjaśnienie starszych dekoracji here.

+0

jest bardzo szczegółowy dzięki bardzo bardzo. Szukałem przez długi czas, w końcu znalazłem odpowiedź tutaj. – Zcube

3

Jak odpowiedział Nercolis, są to adnotacje atrybutów SAL. Jednak nie są to tylko wewnętrzne lub tylko dla dokumentacji API . Rzeczywistym celem jest analiza kodu . Podczas budowania projektu za pomocą opcji kompilatora /analyze (Właściwości projektu, Analiza kodu -> Ogólne) odgrywają one ważną rolę w znajdowaniu problemów związanych z kodowaniem.

Na przykład, jeśli określony argument wskaźnika mówi: __in, to nie można go przekazać zerowym wskaźnikiem. Funkcja nie sprawdzi wartości NULL i może spowodować SEH. Argument __in_opt może być pusty. Gdy kompilator znajdzie jakiś problem, zgłasza to jako ostrzeżenie. Zobacz this article.