Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > enum question

Reply
Thread Tools

enum question

 
 
James Brown
Guest
Posts: n/a
 
      10-22-2005
I have the following enum declared:

enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };

(it goes on and on like that)

This is what I would like to do:

TOKEN t1 = TOK_ID; // ok
TOKEN t2 = 5; // compile error (cannot convert from
const int to 'enum TOKEN')
TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???

could someone clarify if the 3rd example is ok or not, and what type
of problem I might expect if it isn't ok?

What I am trying to do is represent ASCII values 0-127 as TOKENs (this is
why I
started the TOKEN enum off at '1000' so I had plenty of space at the
start....and I don't
really want to type out 127 values into my enum declaration....can anybody
suggest
an alternate solution?

thanks,
James


 
Reply With Quote
 
 
 
 
Chad
Guest
Posts: n/a
 
      10-22-2005

James Brown wrote:
> I have the following enum declared:
>
> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>
> (it goes on and on like that)
>
> This is what I would like to do:
>
> TOKEN t1 = TOK_ID; // ok
> TOKEN t2 = 5; // compile error (cannot convert from
> const int to 'enum TOKEN')
> TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
>
> could someone clarify if the 3rd example is ok or not, and what type
> of problem I might expect if it isn't ok?
>
> What I am trying to do is represent ASCII values 0-127 as TOKENs (this is
> why I
> started the TOKEN enum off at '1000' so I had plenty of space at the
> start....and I don't
> really want to type out 127 values into my enum declaration....can anybody
> suggest
> an alternate solution?
>
> thanks,
> James


In the expression:

enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };

TOK_ID, TOK_NUMBER, and TOK_STRING are constant integer values. In this
case, TOK_ID is = 1000, then TOK_NUMBER is 1001. The reason why the
compiler is b-tching is because you are trying to modify the constant
integer TOK_NUMBER (which has a value of 1001).

 
Reply With Quote
 
 
 
 
Keith Thompson
Guest
Posts: n/a
 
      10-22-2005
"James Brown" <dont_bother> writes:
> I have the following enum declared:
>
> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>
> (it goes on and on like that)
>
> This is what I would like to do:
>
> TOKEN t1 = TOK_ID; // ok
> TOKEN t2 = 5; // compile error (cannot convert from
> const int to 'enum TOKEN')
> TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
>
> could someone clarify if the 3rd example is ok or not, and what type
> of problem I might expect if it isn't ok?


The declaration "enum TOKEN { ... };" creates a type called
"enum TOKEN". It does not create a type called TOKEN.

Given the type declaration, the declaration
enum TOKEN t2 = 5;
is perfectly legal.

I suspect you're using a C++ compiler. C++ is a different language
with different rules; comp.lang.c++ is down the hall on the left.

--
Keith Thompson (The_Other_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      10-22-2005
"Chad" <(E-Mail Removed)> writes:
> James Brown wrote:
>> I have the following enum declared:
>>
>> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>>
>> (it goes on and on like that)
>>
>> This is what I would like to do:
>>
>> TOKEN t1 = TOK_ID; // ok
>> TOKEN t2 = 5; // compile error (cannot convert from
>> const int to 'enum TOKEN')
>> TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
>>
>> could someone clarify if the 3rd example is ok or not, and what type
>> of problem I might expect if it isn't ok?
>>
>> What I am trying to do is represent ASCII values 0-127 as TOKENs
>> (this is why I started the TOKEN enum off at '1000' so I had plenty
>> of space at the start....and I don't really want to type out 127
>> values into my enum declaration....can anybody suggest an alternate
>> solution?

>
> In the expression:
>
> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };


That's a declaration, not an expression.

> TOK_ID, TOK_NUMBER, and TOK_STRING are constant integer values. In this
> case, TOK_ID is = 1000, then TOK_NUMBER is 1001.


Yes.

> The reason why the
> compiler is b-tching is because you are trying to modify the constant
> integer TOK_NUMBER (which has a value of 1001).


Look again. There's nothing in the original poster's code that
attempts to modify TOK_NUMBER.

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
Chad
Guest
Posts: n/a
 
      10-22-2005

Keith Thompson wrote:
> "James Brown" <dont_bother> writes:
> > I have the following enum declared:
> >
> > enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
> >
> > (it goes on and on like that)
> >
> > This is what I would like to do:
> >
> > TOKEN t1 = TOK_ID; // ok
> > TOKEN t2 = 5; // compile error (cannot convert from
> > const int to 'enum TOKEN')
> > TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
> >
> > could someone clarify if the 3rd example is ok or not, and what type
> > of problem I might expect if it isn't ok?

>
> The declaration "enum TOKEN { ... };" creates a type called
> "enum TOKEN". It does not create a type called TOKEN.
>
> Given the type declaration, the declaration
> enum TOKEN t2 = 5;
> is perfectly legal.
>
> I suspect you're using a C++ compiler. C++ is a different language
> with different rules; comp.lang.c++ is down the hall on the left.
>
> --
> Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
> San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
> We must do something. This is something. Therefore, we must do this.


I'm calling an offsides on this one. Maybe I mis-understood the
question. I always thought when you has a construction like

enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };

Then TOK_NUMBER = 1001 and TOK_STRING = 1002. Both of these being
constant integers (Page 39 of the "C Programming Language" by K & R).
Hence these values could not be modified because they are constant.

 
Reply With Quote
 
Michael Mair
Guest
Posts: n/a
 
      10-22-2005
Chad wrote:
> Keith Thompson wrote:
>
>>"James Brown" <dont_bother> writes:
>>
>>>I have the following enum declared:
>>>
>>>enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>>>
>>>(it goes on and on like that)
>>>
>>>This is what I would like to do:
>>>
>>>TOKEN t1 = TOK_ID; // ok
>>>TOKEN t2 = 5; // compile error (cannot convert from
>>>const int to 'enum TOKEN')
>>>TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
>>>
>>>could someone clarify if the 3rd example is ok or not, and what type
>>>of problem I might expect if it isn't ok?

>>
>>The declaration "enum TOKEN { ... };" creates a type called
>>"enum TOKEN". It does not create a type called TOKEN.
>>
>>Given the type declaration, the declaration
>> enum TOKEN t2 = 5;
>>is perfectly legal.
>>
>>I suspect you're using a C++ compiler. C++ is a different language
>>with different rules; comp.lang.c++ is down the hall on the left.

>
> I'm calling an offsides on this one. Maybe I mis-understood the
> question. I always thought when you has a construction like
>
> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>
> Then TOK_NUMBER = 1001 and TOK_STRING = 1002. Both of these being
> constant integers (Page 39 of the "C Programming Language" by K & R).
> Hence these values could not be modified because they are constant.


I am not sure what you mean.
The
enum TOKEN {
....
};
declaration gives us the type "enum TOKEN", quite like
struct foo {
....
};
gives us the type "struct foo".

So,
enum TOKEN t2;
t2 = 5;
or
enum TOKEN t2 = 5;
are structurally not different from
struct foo bar;
bar = baz;
or
struct foo bar = baz;
where baz is of type struct foo.

Declaring t2 certainly does not change any of the enumeration
constants, neither does initializing t2.


Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
 
Reply With Quote
 
James Brown
Guest
Posts: n/a
 
      10-22-2005



"Keith Thompson" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> "James Brown" <dont_bother> writes:
>> I have the following enum declared:
>>
>> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>>
>> (it goes on and on like that)
>>
>> This is what I would like to do:
>>
>> TOKEN t1 = TOK_ID; // ok
>> TOKEN t2 = 5; // compile error (cannot convert from
>> const int to 'enum TOKEN')
>> TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
>>
>> could someone clarify if the 3rd example is ok or not, and what type
>> of problem I might expect if it isn't ok?

>
> The declaration "enum TOKEN { ... };" creates a type called
> "enum TOKEN". It does not create a type called TOKEN.
>
> Given the type declaration, the declaration
> enum TOKEN t2 = 5;
> is perfectly legal.
>
> I suspect you're using a C++ compiler. C++ is a different language
> with different rules; comp.lang.c++ is down the hall on the left.
>
> --
> Keith Thompson (The_Other_Keith) (E-Mail Removed)
> <http://www.ghoti.net/~kst>
> San Diego Supercomputer Center <*>
> <http://users.sdsc.edu/~kst>
> We must do something. This is something. Therefore, we must do this.


Hi,
thanks for your answer - and you're right, I am using C++ but its useful for
me
to appreciate the differences....I'll repost on c.l.c++

thanks,
James


 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      10-23-2005
"Chad" <(E-Mail Removed)> writes:
> Keith Thompson wrote:
>> "James Brown" <dont_bother> writes:
>> > I have the following enum declared:
>> >
>> > enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>> >
>> > (it goes on and on like that)
>> >
>> > This is what I would like to do:
>> >
>> > TOKEN t1 = TOK_ID; // ok
>> > TOKEN t2 = 5; // compile error (cannot convert from
>> > const int to 'enum TOKEN')
>> > TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???
>> >
>> > could someone clarify if the 3rd example is ok or not, and what type
>> > of problem I might expect if it isn't ok?

>>
>> The declaration "enum TOKEN { ... };" creates a type called
>> "enum TOKEN". It does not create a type called TOKEN.
>>
>> Given the type declaration, the declaration
>> enum TOKEN t2 = 5;
>> is perfectly legal.
>>
>> I suspect you're using a C++ compiler. C++ is a different language
>> with different rules; comp.lang.c++ is down the hall on the left.

[...]
> I'm calling an offsides on this one. Maybe I mis-understood the
> question. I always thought when you has a construction like
>
> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>
> Then TOK_NUMBER = 1001 and TOK_STRING = 1002. Both of these being
> constant integers (Page 39 of the "C Programming Language" by K & R).
> Hence these values could not be modified because they are constant.


Of course you can't modify TOK_NUMBER or TOK_STRING.

The posted code (see above) doesn't attempt to do so, and I don't see
anything that would lead you to believe that it does.

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
Emmanuel Delahaye
Guest
Posts: n/a
 
      10-30-2005
James Brown a écrit :
> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>
> TOKEN t1 = TOK_ID; // ok
> TOKEN t2 = 5; // compile error (cannot convert from
> const int to 'enum TOKEN')


Be sure you are using a C compiler. The C-language is not that strongly
typed. This line is fine C.

> TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???


It's fine C too.

--
C is a sharp tool
 
Reply With Quote
 
Eric Sosman
Guest
Posts: n/a
 
      10-31-2005
Emmanuel Delahaye wrote:
> James Brown a écrit :
>
>> enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
>>
>> TOKEN t1 = TOK_ID; // ok
>> TOKEN t2 = 5; // compile error (cannot convert
>> from const int to 'enum TOKEN')

>
>
> Be sure you are using a C compiler. The C-language is not that strongly
> typed. This line is fine C.
>
>> TOKEN t3 = (TOKEN)5; // compiles but I think it's illegal???

>
>
> It's fine C too.


Ah. This is obviously some strange usage of the word
"fine" that I wasn't previously aware of.

enum TOKEN { TOK_ID = 1000, TOK_NUMBER, TOK_STRING };
TOKEN t1 = TOK_ID;
TOKEN t2 = 5;
TOKEN t3 = (TOKEN)5;

gcc -W -Wall -ansi -pedantic -c token.c
token.c:2: error: parse error before "t1"
token.c:2: warning: type defaults to `int' in declaration of `t1'
token.c:2: error: ISO C forbids data definition with no type or storage
class
token.c:3: error: parse error before "t2"
token.c:3: warning: type defaults to `int' in declaration of `t2'
token.c:3: error: ISO C forbids data definition with no type or storage
class
token.c:4: error: parse error before "t3"
token.c:4: warning: type defaults to `int' in declaration of `t3'
token.c:4: error: `TOKEN' undeclared here (not in a function)
token.c:4: error: parse error before numeric constant

--
Eric Sosman
(E-Mail Removed)lid
 
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
Re: an enum question - how to convert enum type to a string? Roedy Green Java 0 02-27-2010 04:52 AM
Re: an enum question - how to convert enum type to a string? Wojtek Java 1 02-27-2010 03:44 AM
Re: an enum question - how to convert enum type to a string? Lew Java 0 02-27-2010 03:40 AM
Re: an enum question - how to convert enum type to a string? Eric Sosman Java 3 02-26-2010 03:36 PM
enum within an enum - Java 6 06-13-2005 12:51 AM



Advertisments