来自Microsoft的大多数示例代码都包含使用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”这样更方便的名称。有谁能解释一下吗?
发布于 2011-03-31 11:28:59
g_通常代表全局变量。由于历史原因,微软文档和示例中提供的(非.NET)代码可能会使用Hungarian notation的某些变体。
系统匈牙利表示法在C++中使用得不多,因为编译器已经知道变量的类型。有一种叫做应用匈牙利符号的东西,Joel Spolsky has written an article about。
现在,在生产代码中,全局变量不是一个好主意。全局变量可以在任何地方访问,这意味着它们可以在代码中随时随地进行修改。这很容易成为维护和调试的噩梦。
您之所以在示例代码中看到它们,是因为示例旨在成为演示如何使用API的最小但可编译的代码片段。请注意,出于同样的原因,示例代码也省略了错误检查等内容。示例代码不一定演示良好的编码技术或实践,尽管这肯定是可能的。
简而言之,在任何重要的应用程序中,“样例风格”的代码很快就会变得杂乱无章。在产品代码中,您应该设置一个框架并进行适当的代码设计。这包括不使用全局变量。
https://stackoverflow.com/questions/5495019
复制相似问题