首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么微软在其DirectX10管道变量中使用"g_“命名约定?

为什么微软在其DirectX10管道变量中使用"g_“命名约定?
EN

Stack Overflow用户
提问于 2011-03-31 11:25:42
回答 1查看 3.1K关注 0票数 6

来自Microsoft的大多数示例代码都包含使用g_前缀作为Windows API变量的变量,以及DirectX管道变量,如swapchain。

以下是一些示例:

代码语言:javascript
复制
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”这样更方便的名称。有谁能解释一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-31 11:28:59

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

系统匈牙利表示法在C++中使用得不多,因为编译器已经知道变量的类型。有一种叫做应用匈牙利符号的东西,Joel Spolsky has written an article about

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

您之所以在示例代码中看到它们,是因为示例旨在成为演示如何使用API的最小但可编译的代码片段。请注意,出于同样的原因,示例代码也省略了错误检查等内容。示例代码不一定演示良好的编码技术或实践,尽管这肯定是可能的。

简而言之,在任何重要的应用程序中,“样例风格”的代码很快就会变得杂乱无章。在产品代码中,您应该设置一个框架并进行适当的代码设计。这包括不使用全局变量。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5495019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档