为什么Microsoft将"g_"命名约定与其DirectX10管道变量一起使用?

Dar*_*nor 6 c++ directx naming-conventions

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;
Run Code Online (Sandbox Code Playgroud)

这背后的原因是什么?我没有得到什么g_意思,为什么你不会使用更方便的名称,如"SwapChain".谁能解释一下?

In *_*ico 15

g_典型的代表全局变量.由于历史原因,Microsoft文档和示例中提供的(非.NET)代码可能使用匈牙利表示法的某些变体.

系统匈牙利表示法在C++中使用得很少,因为编译器已经知道变量的类型.应用匈牙利语符号这样的东西,乔尔斯波尔斯基写了一篇文章.

现在,全局变量在生产代码中不是一个好主意.全局变量随处可访问,这意味着可以随时随地修改它们.这很容易成为维护和调试的噩梦.

您在示例代码中看到它们的原因是因为示例是最小的,但是可编译的代码片段演示了如何使用API​​.请注意,示例代码也会因为相同的原因而忽略错误检查等内容.示例代码不一定表现出良好的编码技术或实践,尽管它当然是可能的.

简而言之,"样本式"代码在任何非平凡的应用程序中都会变得非常混乱.在生产代码中,您应该设置框架并进行适当的代码设计.这包括不使用全局变量.