[Gambas-user] static const?
Les Hardy
les at ...2337...
Wed Apr 14 20:51:52 CEST 2010
If you feel hurt I am sorry for that, it was not my intention to hurt
you, and I have no wish to prove you wrong.
I do still stand by my statement.
Regards
Les Hardy
Doriano Blengino wrote:
> Les Hardy ha scritto:
>
>>
>>
>>> The C language, in facts, does not even have CONSTs - it goes with
>>> #define. So, it would be correct to forbid STATIC when declaring CONSTs.
>>>
>>>
>> Surely this is not correct. ANSI C uses const, and C++ also uses the
>> const keyword.
>> #define (a preprocessor directive) is a relic from old C, and const is
>> now recommended use instead.
>>
>>
> Surely, according to http://www.ericgiguere.com/articles/ansi-c-summary.html
>
>> The declaration:
>> enum colours { RED, BLUE, GREEN };
>>
>>
>> would declare colours as an enumeration tag representing the integer
>> constants RED, BLUE and GREEN. These enumeration constants are given
>> integer values starting at 0 and increasing by 1 with each identifier.
>>
>> An enumeration constant may be used wherever an integer is expected.
>> The following is equivalent to the above enumerated type:
>>
>> #define RED 0
>> #define BLUE 1
>> #define GREEN 2
>>
>>
>
> Moreover, from http://tigcc.ticalc.org/doc/keywords.html
>
>> _const_
>>
>> *Makes variable value or pointer parameter unmodifiable.*
>>
>> When |const| is used with a variable, it uses the following syntax:
>>
>> const/variable-name/ [ =/value/];
>>
>>
>> In this case, the |const| modifier allows you to assign an initial
>> value to a variable that cannot later be changed by the program. For
>> example,
>>
>> const my_age = 32;
>>
>>
>> Any assignments to |'my_age'| will result in a compiler error.
>> However, such declaration is quite different than using
>>
>> #define my_age 32
>>
>> In the first case, the compiler allocates a memory for |'my_age'| and
>> stores the initial value 32 there, but it will not allow any later
>> assignment to this variable. But, in the second case, all occurences
>> of |'my_age'| are simply replaced with 32 by the preprocessor
>> <http://tigcc.ticalc.org/doc/cpp.html>, and no memory will be
>> allocated for it.
>>
>
> You perhaps refer to "const" modifier, which is different from declaring
> a constant, like in
>
>> public:
>> WinEDA_VertexCtrl( wxWindow* parent, const wxString& title,
>> wxBoxSizer* BoxSizer, int units, int
>> internal_unit );
>>
>
>
>> Also, it would be correct to use static with const, the line below would
>> be correct use.
>>
>> static const int daysPerMonth[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
>>
>>
> In this case - talking about C and not C++:
>
>> |static| tells that a function or data element is only known within
>> the scope of the current compile. In addition, if you use the |static|
>> keyword with a variable that is local to a function, it allows the
>> last value of the variable to be preserved between successive calls to
>> that function.
>>
> "const" says that data is not modifiable, so "static" would say the same
> thing. Note also the ambiguity of the keyword when applied to data
> global to a module, and data local to a function - the same keyword does
> two very different things.
>
>
>> Having said that, The original question was not about C, I think Fabian
>> was simply asking about the scope of constants in classes (in Gambas)
>>
>>
> Uhm... is it forbidden to cite other languages to better explain a
> concept? So why you cited C++?
>
> Anyway, you are right, the original question was about scope. In gambas
> scope is governed by PRIVATE and PUBLIC. Full stop.
>
> If you feel that my reply is a little hurting, excuse me; it is because
> your reply seemed hurting to me. Prove to me that I am wrong and I will
> publicly apologize.
>
> Regards,
> Doriano
>
>
More information about the User
mailing list