Class names that start with C

2019-01-27 18:40发布

The MFC has all class names that start with C. For example, CFile and CGdiObject. Has anyone seen it used elsewhere? Is there an official naming convention guide from Microsoft that recommends this style? Did the idea originate with MFC or was it some other project?

12条回答
狗以群分
2楼-- · 2019-01-27 19:20

That was a old C++ coding style, and MFC was probably one of the last things to use it.

It was usually just a convention of C++ (and maybe a few other languages), and hence it started falling out of favor as the languages became more interoperable, through COM and then .NET.

You still see it's cousin, the "I" prefix for interfaces, pretty often. I've always found it interesting that "I" survived when "C" died, but that was probably because interfaces were used so heavily in COM interoperability.

查看更多
Ridiculous、
3楼-- · 2019-01-27 19:23

Something a bit similar is used in Symbian C++, where the convention is that:

T classes are "values", for example TChar, TInt32, TDes

R classes are handles to kernel (or other) resources, for example RFile, RSocket

M classes are mixins, which includes interfaces (construed as mixins with no function implementations). The guideline is that multiple inheritance should involve at most 1 non-M class.

C classes are pretty much everything else, and derive from CBase, which has some stuff in it to help with resource-handling.

HBufC exists primarily to generate confused posts on Symbian forums, and having its very own prefix is just the start. The H stands for "huh?", or possibly "Haw, haw! You have no STL!" ;-)

This is close in spirit to Apps Hungarian Notation rather than Systems Hungarian notation. The prefix tells you something about the class which you could look up in the documentation, but which you would not know otherwise. The whole point of naming anything in programming is to provide such hints and reminders, otherwise you'd just call your classes "Class001", "Class002", etc.

Systems Hungarian just tells you the type of a variable, which IMO is nothing to get very excited about, especially in a language like C++ where types tend to be either repeated constantly or else completely hidden by template parameters. Its analogue when naming types is the Java practice of naming all interfaces with I. Again, I don't get very excited about this (and neither do the standard Java libraries), but if you're going to define an interface for every class, in addition to the interfaces which are actually used for polymorphism in non-test situations, then you need some way to distinguish the two.

查看更多
孤傲高冷的网名
4楼-- · 2019-01-27 19:34

See here : http://www.jelovic.com/articles/stupid_naming.htm for a long article on this issue.

查看更多
\"骚年 ilove
5楼-- · 2019-01-27 19:36

I can't answer all your questions, but as far as I know, it's just to distinguish the MFC classes from other classes -- a form of Hungarian Notation.

Interestingly, it's apparently controversial not just outside MS, but inside as well.

查看更多
三岁会撩人
6楼-- · 2019-01-27 19:37

I remember Borland compilers were comming with libraries where class names started with 'T'. Probably for "type" :)

查看更多
狗以群分
7楼-- · 2019-01-27 19:37

Years ago naming convention is crucial to help identifying the class, type of even the grouping of the class. Dont forget back then there was no namespace and no/limited intellisense available. C is a form of Hungarian notation but certainly made popular by MFC. Borland and Delphi was using T - as prefix for Type

查看更多
登录 后发表回答