Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > question about code style specifically variable declaration using _ prefix

Reply
Thread Tools

question about code style specifically variable declaration using _ prefix

 
 
gara.matt@gmail.com
Guest
Posts: n/a
 
      07-20-2007
Hi,

I was wondering, I've been reading some C++ code written by others,
usually libraries and stuff, and I've come across what strikes me as a
distinctive style that pervades most of the code I've been reading.
What I'm talking about is that some variables are declared with a "_"
prefix while others lack it. For example you may find a variable and
even functions like

int _temp

and one like

int temp

>From a Java perspective, this style is quite new to me, seeing as the

Java compiler does not accept variables of the aforementioned type. I
have, however, seen this used also in C, but not to the same degree,
and I have ignored it. But it has come to a point where I see it so
much that I think it carries some kind of significance such that if I
understood then I could grasp code quicker.

Explain away, or BS away, I'm willing to listen.

Thanks,

Matt

 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      07-20-2007
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> Hi,
>
> I was wondering, I've been reading some C++ code written by others,
> usually libraries and stuff, and I've come across what strikes me as a
> distinctive style that pervades most of the code I've been reading.
> What I'm talking about is that some variables are declared with a "_"
> prefix while others lack it. For example you may find a variable and
> even functions like
>
> int _temp
>
> and one like
>
> int temp
>

Names with either a leading underscore followed by a capital letter or
two leading underscores are reserved for the implementation. That's why
you are seeing them in libraries.

It's common practice to avoid all names with a single leading underscore
in application code.

--
Ian Collins.
 
Reply With Quote
 
 
 
 
=?ISO-8859-1?Q?Erik_Wikstr=F6m?=
Guest
Posts: n/a
 
      07-20-2007
On 2007-07-20 09:59, (E-Mail Removed) wrote:
> Hi,
>
> I was wondering, I've been reading some C++ code written by others,
> usually libraries and stuff, and I've come across what strikes me as a
> distinctive style that pervades most of the code I've been reading.
> What I'm talking about is that some variables are declared with a "_"
> prefix while others lack it. For example you may find a variable and
> even functions like
>
> int _temp
>
> and one like
>
> int temp
>
>>From a Java perspective, this style is quite new to me, seeing as the

> Java compiler does not accept variables of the aforementioned type. I
> have, however, seen this used also in C, but not to the same degree,
> and I have ignored it. But it has come to a point where I see it so
> much that I think it carries some kind of significance such that if I
> understood then I could grasp code quicker.
>
> Explain away, or BS away, I'm willing to listen.


If you have read code mostly from libraries, and especially system
libraries, this is understandable and could be considered good (or not)
but if they are not system libraries it's probably not a good idea. The
C++ standard specifies that all names beginning with __ (two
underscores) are reserved for the implementation, this means that if you
write an applications you should *never ever* use names that starts with
two underscores. Names starting with _ (a single underscore) however are
reserved for the implementation only in certain circumstances (such as
in the global namespace, or followed by an upper case letter).

So the question is whether your code can be considered part of the
implementation, in most cases this is not so but system libraries can
sometimes be considered as such. However since C++ supports namespaces
there's really never a need to use identifiers starting with underscore
and since it can sometimes lead to trouble the general advice seems to
be to avoid using them at all.


--
Erik Wikstr÷m
 
Reply With Quote
 
Robert Bauck Hamar
Guest
Posts: n/a
 
      07-20-2007
Erik Wikstr├Âm wrote:

> On 2007-07-20 09:59, (E-Mail Removed) wrote:
>> Hi,
>>
>> I was wondering, I've been reading some C++ code written by others,
>> usually libraries and stuff, and I've come across what strikes me as a
>> distinctive style that pervades most of the code I've been reading.
>> What I'm talking about is that some variables are declared with a "_"
>> prefix while others lack it. For example you may find a variable and
>> even functions like
>>
>> int _temp
>>
>> and one like
>>
>> int temp
>>
>>>From a Java perspective, this style is quite new to me, seeing as the

>> Java compiler does not accept variables of the aforementioned type. I
>> have, however, seen this used also in C, but not to the same degree,
>> and I have ignored it. But it has come to a point where I see it so
>> much that I think it carries some kind of significance such that if I
>> understood then I could grasp code quicker.
>>
>> Explain away, or BS away, I'm willing to listen.

>
> If you have read code mostly from libraries, and especially system
> libraries, this is understandable and could be considered good (or not)
> but if they are not system libraries it's probably not a good idea. The
> C++ standard specifies that all names beginning with __ (two
> underscores) are reserved for the implementation, this means that if you
> write an applications you should *never ever* use names that starts with
> two underscores.


Any name _containing_ two sequential underscores are reserved to the
implementation. It may be at the beginning, but also in the middle or at
the end. It doesn't really matter if it is in a nested namespace either.

> Names starting with _ (a single underscore) however are
> reserved for the implementation only in certain circumstances (such as
> in the global namespace, or followed by an upper case letter).


If followed by an uppercase letter, the name is reserved everywhere. Names
beginning with an underscore followed by a lowercase letter are reserved in
the global namespace, just as any name from the C standard library is.

--
rbh
 
Reply With Quote
 
=?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=
Guest
Posts: n/a
 
      07-20-2007
On 2007-07-20 10:41, Robert Bauck Hamar wrote:
> Erik Wikstr├Âm wrote:
>
>> On 2007-07-20 09:59, (E-Mail Removed) wrote:
>>> Hi,
>>>
>>> I was wondering, I've been reading some C++ code written by others,
>>> usually libraries and stuff, and I've come across what strikes me as a
>>> distinctive style that pervades most of the code I've been reading.
>>> What I'm talking about is that some variables are declared with a "_"
>>> prefix while others lack it. For example you may find a variable and
>>> even functions like
>>>
>>> int _temp
>>>
>>> and one like
>>>
>>> int temp
>>>
>>>>From a Java perspective, this style is quite new to me, seeing as the
>>> Java compiler does not accept variables of the aforementioned type. I
>>> have, however, seen this used also in C, but not to the same degree,
>>> and I have ignored it. But it has come to a point where I see it so
>>> much that I think it carries some kind of significance such that if I
>>> understood then I could grasp code quicker.
>>>
>>> Explain away, or BS away, I'm willing to listen.

>>
>> If you have read code mostly from libraries, and especially system
>> libraries, this is understandable and could be considered good (or not)
>> but if they are not system libraries it's probably not a good idea. The
>> C++ standard specifies that all names beginning with __ (two
>> underscores) are reserved for the implementation, this means that if you
>> write an applications you should *never ever* use names that starts with
>> two underscores.

>
> Any name _containing_ two sequential underscores are reserved to the
> implementation. It may be at the beginning, but also in the middle or at
> the end. It doesn't really matter if it is in a nested namespace either.


Oh, you're right. Lucky that I've never used it (not that I can thing of
any situation where putting two underscore in a name might seem like a
good idea).

--
Erik Wikstr├Âm
 
Reply With Quote
 
John Harrison
Guest
Posts: n/a
 
      07-21-2007
(E-Mail Removed) wrote:
> Hi,
>
> I was wondering, I've been reading some C++ code written by others,
> usually libraries and stuff, and I've come across what strikes me as a
> distinctive style that pervades most of the code I've been reading.
> What I'm talking about is that some variables are declared with a "_"
> prefix while others lack it. For example you may find a variable and
> even functions like
>
> int _temp
>
> and one like
>
> int temp
>
>>From a Java perspective, this style is quite new to me, seeing as the

> Java compiler does not accept variables of the aforementioned type. I
> have, however, seen this used also in C, but not to the same degree,
> and I have ignored it. But it has come to a point where I see it so
> much that I think it carries some kind of significance such that if I
> understood then I could grasp code quicker.
>
> Explain away, or BS away, I'm willing to listen.
>
> Thanks,
>
> Matt
>


I use that style to indicate member variables. I think it's commonly
accepted that it's good to distinguish member variables from others
(even in Java) but I'm often criticised here for my particular way of
doing it. I don't care, it's correct and I like it.

John
 
Reply With Quote
 
Bo Persson
Guest
Posts: n/a
 
      07-21-2007
John Harrison wrote:
:: (E-Mail Removed) wrote:
::: Hi,
:::
::: I was wondering, I've been reading some C++ code written by
::: others, usually libraries and stuff, and I've come across what
::: strikes me as a distinctive style that pervades most of the code
::: I've been reading. What I'm talking about is that some variables
::: are declared with a "_" prefix while others lack it. For example
::: you may find a variable and even functions like
:::
::: int _temp
:::
::: and one like
:::
::: int temp
:::
:::: From a Java perspective, this style is quite new to me, seeing
:::: as the
::: Java compiler does not accept variables of the aforementioned
::: type. I have, however, seen this used also in C, but not to the
::: same degree, and I have ignored it. But it has come to a point
::: where I see it so much that I think it carries some kind of
::: significance such that if I understood then I could grasp code
::: quicker.
:::
::: Explain away, or BS away, I'm willing to listen.
:::
::: Thanks,
:::
::: Matt
:::
::
:: I use that style to indicate member variables. I think it's
:: commonly accepted that it's good to distinguish member variables
:: from others (even in Java) but I'm often criticised here for my
:: particular way of doing it. I don't care, it's correct and I like
:: it.

I guess the criticism is that, although correct, a leading underscore
indicates that a name is now *either* a member variable, or a global
implementation-specific name, or possibly both.

I understand that some of your colleagues can be a bit confused by
this.


Bo Persson


 
Reply With Quote
 
=?ISO-8859-1?Q?Erik_Wikstr=F6m?=
Guest
Posts: n/a
 
      07-21-2007
On 2007-07-21 13:01, Bo Persson wrote:
> John Harrison wrote:
> :: (E-Mail Removed) wrote:
> ::: Hi,
> :::
> ::: I was wondering, I've been reading some C++ code written by
> ::: others, usually libraries and stuff, and I've come across what
> ::: strikes me as a distinctive style that pervades most of the code
> ::: I've been reading. What I'm talking about is that some variables
> ::: are declared with a "_" prefix while others lack it. For example
> ::: you may find a variable and even functions like
> :::
> ::: int _temp
> :::
> ::: and one like
> :::
> ::: int temp
> :::
> :::: From a Java perspective, this style is quite new to me, seeing
> :::: as the
> ::: Java compiler does not accept variables of the aforementioned
> ::: type. I have, however, seen this used also in C, but not to the
> ::: same degree, and I have ignored it. But it has come to a point
> ::: where I see it so much that I think it carries some kind of
> ::: significance such that if I understood then I could grasp code
> ::: quicker.
> :::
> ::: Explain away, or BS away, I'm willing to listen.
> :::
> ::: Thanks,
> :::
> ::: Matt
> :::
> ::
> :: I use that style to indicate member variables. I think it's
> :: commonly accepted that it's good to distinguish member variables
> :: from others (even in Java) but I'm often criticised here for my
> :: particular way of doing it. I don't care, it's correct and I like
> :: it.
>
> I guess the criticism is that, although correct, a leading underscore
> indicates that a name is now *either* a member variable, or a global
> implementation-specific name, or possibly both.


And the risk that someday a less knowledgeable programmer will come and
make a change to your code and follow your style but uses a capital
letter as first letter. One of the main reasons it'd discouraged is
probably to prevent people who don't know better from screwing up in
hard-to-debug ways.

--
Erik Wikstr÷m
 
Reply With Quote
 
James Kanze
Guest
Posts: n/a
 
      07-22-2007
On Jul 21, 1>01 pm, "Bo Persson" <(E-Mail Removed)> wrote>
> John Harrison wrote>
> >> (E-Mail Removed) wrote>


> >>> I was wondering, I've been reading some C++ code written by
> >>> others, usually libraries and stuff, and I've come across what
> >>> strikes me as a distinctive style that pervades most of the code
> >>> I've been reading. What I'm talking about is that some variables
> >>> are declared with a "_" prefix while others lack it. For example
> >>> you may find a variable and even functions like


> >>> int _temp


> >>> and one like


> >>> int temp


> >>> From a Java perspective, this style is quite new to me,
> >>> seeing as the Java compiler does not accept variables of
> >>> the aforementioned type.


This is, of course, false. Java is even more liberal than C++,
as it not only allows names to begin with either a _ or $ (the
latter is illegal in C++), but doesn't reserve any of them for
the implementation.

> >>> I have, however, seen this used also in C, but not to the
> >>> same degree, and I have ignored it. But it has come to a point
> >>> where I see it so much that I think it carries some kind of
> >>> significance such that if I understood then I could grasp code
> >>> quicker.


> >>> Explain away, or BS away, I'm willing to listen.


> >> I use that style to indicate member variables. I think it's
> >> commonly accepted that it's good to distinguish member variables
> >> from others (even in Java) but I'm often criticised here for my
> >> particular way of doing it. I don't care, it's correct and I like
> >> it.


> I guess the criticism is that, although correct, a leading underscore
> indicates that a name is now *either* a member variable, or a global
> implementation-specific name, or possibly both.


Not really. The criticism is that, regardless of what the
standard says, system headers commonly DO define macros which
start with a _, and assume that this will not cause problems.
Using a _ prefix is just asking for trouble.

In general, as others have pointed out, library code intended to
be considered part of the implementation will make extensive use
of such symbols, precisely because the user is not allowed to
define them.

Outside of such library code, it seems pretty universal to
distinguish member variables from other names. In principle, if
you name well, it shouldn't be necessary, but such conventions
certainly don't do any harm. In cases where the variable
represents an externally visible attribute, they also allow the
setter/getter functions to have the name of the attribute. I've
seen at least four different conventions for this:
_member
member_
m_member
myMember
The first is, as I've just said, looking for trouble. The
second is, IMHO, just too ugly. The latter two also have the
advantage of extending easily to distinguish between static
members (s_member, ourMember) and non-static members. I use the
last in my own code; I like the fact that the results are
pronouceable. But I'll willingly either, according to the
requirements of the local standards.

--
James Kanze (Gabi Software) email: (E-Mail Removed)
Conseils en informatique orientÚe objet/
Beratung in objektorientierter Datenverarbeitung
9 place SÚmard, 78210 St.-Cyr-l'╔cole, France, +33 (0)1 30 23 00 34

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
removing a namespace prefix and removing all attributes not in that same prefix Chris Chiasson XML 6 11-14-2006 05:08 PM
Variable declaration taken as a function pointer declaration Bolin C++ 4 12-02-2005 05:28 PM
"static" prefix - to parallel "this" prefix Tim Tyler Java 36 12-10-2004 01:02 AM
Design question (specifically, script interpreter) Ian Giblin C++ 4 11-15-2004 11:31 PM
Style of Local Variable Declaration Michael B Allen C Programming 12 11-06-2003 08:02 AM



Advertisments