我来自.NET世界,我是编写C++的新手.我只是想知道在命名局部变量和struct成员时,首选的命名约定是什么.
例如,我继承的遗留代码有很多这样的代码:
struct MyStruct { TCHAR szMyChar[STRING_SIZE]; bool bMyBool; unsigned long ulMyLong; void* pMyPointer; MyObject** ppMyObjects; }
来自C#背景我很震惊地看到带有匈牙利符号的变量(我第一次看到它时不能停止对pp前缀嘲笑).
我宁愿用这种方式命名我的变量(虽然我不确定是否将首字母大写是一个很好的约定.我已经看到了其他方法(见下面的链接)):
struct MyStruct { TCHAR MyChar[STRING_SIZE]; bool MyBool; unsigned long MyLong; void* MyPointer; MyObject** MyObjects; }
我的问题:这(前一种方式)仍然是在C++中命名变量的首选方法吗?
参考文献:
http://geosoft.no/development/cppstyle.html
http://www.syntext.com/books/syntext-cpp-conventions.htm
http://ootips.org/hungarian-notation.html
谢谢!
那种匈牙利符号是相当无用的,如果你必须改变某种类型,可能比无用更糟糕.(在适当的那种匈牙利命名法的是一个不同的故事.)
我建议你使用你的小组做的任何事情.如果您是唯一参与该计划的人,请以最适合您的方式命名.
最重要的是保持一致.如果你有一个旧的代码基础工作,命名变量和函数始终与遗留代码的命名约定.如果您正在编写仅与旧代码接口的新代码,请在新代码中使用您的命名约定,但也要与您自己保持一致.
不."错误的匈牙利符号" - 特别是双重间接的pp - 对于你可以编写的早期C编译器有一定的意义
int * i = 17; int j = ***i;
甚至没有来自编译器的警告(甚至可能是正确硬件上的有效代码......).
"真正的匈牙利符号"(由Geek主持)是IMO仍然是一个有效的选择,但不一定是首选.现代C++应用程序通常有几十种或几百种类型,您将找不到合适的前缀.
我仍然在本地使用它,在一些情况下,我必须混合例如在问题域中具有非常相似甚至相同名称的整数和浮点变量,例如
float fXmin, fXmax, fXpeak; // x values of range and where y=max int iXmin, iXMax, iXpeak; // respective indices in x axis vector
但是,在维护一致遵循某些约定的遗留代码时(即使松散),您应该坚持使用那里使用的约定 - 至少在现有的模块/编译单元中要维护.
我的理由:编码标准的目的是遵循最少惊喜的原则.始终如一地使用一种风格比使用哪种风格更重要.
除了它有点难看之外,在这个例子中有什么不喜欢或嘲笑"ppMyObjects"?我没有强烈的意见,但它确实传达了有用的信息,"MyObjects"没有.