Что означают утверждения "#pragma managed (push, off)" и "#pragma managed (pop)"?

Я рассматриваю код С++/CLI и видел много таких утверждений, в основном вокруг #include s. Что они имеют в виду? Я знаю, что они, согласно MSDN, Enable function-level control for compiling functions as managed or unmanaged. Но меня интересует их внутренняя механика, особенно семантика push и pop. Если кто-то может объяснить, как работает одно из двух утверждений, я сам выясню его.

Ответ 1

#pragma managed(push, off)

Устанавливает параметр управляемой компиляции в код после этой строки, чтобы отключиться, и подталкивает к ранее активированному параметру стека.

#pragma managed(pop)

Восстанавливает последнее управляемое состояние из стека. Код между этими двумя строками компилируется как неуправляемый. Код после поп-строки скомпилирован с той же опцией, что и перед точной строкой, независимо от того, было ли это управляемо или неуправляемо.