Почему Microsoft использует соглашение об именовании "g_" со своими переменными конвейера DirectX10? - PullRequest
6 голосов
/ 31 марта 2011

Большая часть примера кода из Microsoft DirectX SDK включает переменные, которые используют префикс g_ для переменных Windows API, а также переменные конвейера DirectX, такие как swapchain.

Вот несколько примеров:

D3D10_DRIVER_TYPE           g_driverType;
ID3D10Device*               g_pd3dDevice;
IDXGISwapChain*             g_pSwapChain;
ID3D10RenderTargetView*     g_pRenderTargetView;
ID3D10Effect*               g_pEffect;
ID3D10EffectTechnique*      g_pTechnique;
ID3D10InputLayout*          g_pVertexLayout;
ID3D10Buffer*               g_pVertexBuffer;
ID3D10Buffer*               g_pIndexBuffer;
ID3D10EffectMatrixVariable* g_pWorldVariable;
ID3D10EffectMatrixVariable* g_pViewVariable;
ID3D10EffectMatrixVariable* g_pProjectionVariable;
D3DXMATRIX                  g_World;
D3DXMATRIX                  g_View;
D3DXMATRIX                  g_Projection;

В чем причина этого? Я не понимаю, что означает g_, и почему вы не будете использовать более удобные имена, такие как «SwapChain». Кто-нибудь может объяснить?

1 Ответ

15 голосов
/ 31 марта 2011

g_ обычно обозначает глобальную переменную. Код (не .NET), представленный в документации и примерах Microsoft, может использовать какой-либо вариант венгерской нотации по историческим причинам.

Системы Венгерские обозначения не очень широко используются, если вообще используются в C ++, поскольку компилятор уже знает типы ваших переменных. Существует такая вещь, как Applications Венгерская нотация, для которой Джоэл Спольски написал статью о .

Теперь глобальные переменные не являются хорошей идеей в производственном коде. Глобальные переменные доступны везде, что означает, что они могут быть изменены в любом месте и в любом месте вашего кода. Это легко становится кошмаром обслуживания и отладки.

Причина, по которой вы видите их в примере кода, заключается в том, что образцы представляют собой минимальные, но скомпилированные фрагменты кода, демонстрирующие использование API. Обратите внимание, что пример кода также не включает такие вещи, как проверка ошибок по той же причине. Пример кода не обязательно демонстрирует хорошие методы или практики кодирования, хотя, безусловно, это возможно.

В двух словах, «образец» кода очень быстро запутывается в любом нетривиальном приложении. В рабочем коде вы должны настроить фреймворк и сделать правильный дизайн кода. Это включает в себя не использование глобальных переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...