Search code examples
visual-c++microsoft-sal

Meaning of __in , __out, __in_opt


What is the meaning of these keywords used before variables in a function parameters?

  • __in
  • __out
  • __in_opt

Solution

  • Those are some of the older decoration macro's from Microsoft's SAL Annotations (the newer ones now follow different casing, starting with a capital, like _In_, _Out_, _In_opt_). These have no real affect on compilation (under VS 2010 they aren't even expanded), they are there for inline API documentation.

    1. __in: this parameter is an input to the function (read-only, caller initialized).
    2. __out: this parameter contains output from the function when it returns (write-only, caller initialized).
    3. __in_opt: a compound annotation formed from _in and _opt, _opt indications that the parameter is optional and can be set to a default value (generally NULL).

    You can get the full explanation here of the older decorations here.