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”这样更方便的名字。谁能解释一下?
答案 0 :(得分:15)
g_
通常代表全局变量。出于历史原因,Microsoft文档和示例中提供的(非.NET)代码可能使用Hungarian notation的某些变体。
系统由于编译器已经知道变量的类型,因此在C ++中使用匈牙利表示法(如果有的话)并不常用。有 Applications 匈牙利表示法这样的东西,Joel Spolsky has written an article about。
现在,全局变量在生产代码中不是一个好主意。全局变量随处可访问,这意味着可以随时随地修改它们。这很容易成为维护和调试的噩梦。
您在示例代码中看到它们的原因是因为示例是最小的,但是可编译的代码片段演示了如何使用API。请注意,示例代码也会因为相同的原因而忽略错误检查等内容。示例代码不一定表现出良好的编码技术或实践,尽管它当然是可能的。
简而言之,“样本式”代码在任何非平凡的应用程序中都会变得非常混乱。在生产代码中,您应该设置框架并进行适当的代码设计。这包括不使用全局变量。