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

时间:2011-03-31 03:25:42

标签: c++ naming-conventions directx

Microsoft的DirectX SDK中的大部分示例代码都包含使用Windows API变量的g_前缀以及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 个答案:

答案 0 :(得分:15)

g_通常代表全局变量。出于历史原因,Microsoft文档和示例中提供的(非.NET)代码可能使用Hungarian notation的某些变体。

系统由于编译器已经知道变量的类型,因此在C ++中使用匈牙利表示法(如果有的话)并不常用。有 Applications 匈牙利表示法这样的东西,Joel Spolsky has written an article about

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

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

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