# (C99) Does "const int x=5;" make x a "constant expression"?

Discussion in 'C Programming' started by jaime, Jun 16, 2007.

1. ### jaimeGuest

Hi again all.

Given the line:
const int x=5;
Can I then use "x" as a constant expression? (By "constant expression", I
mean "constant expression" as defined in the C99 standard)

I've been searching google for 2 days now trying to answer this myself,
and I'm just getting more and more confused (some things I read make me
think "yes", while some things I read make me think "no").

I have many questions I'd like to ask on this topic, but rather than bore
you all rigid with the results of all of my research (points for and
against), I thought I'd just try this short question first.

Also, could anyone answering please give me an idea of how I can infer the
9899:TC2).

So, baffled once again, I humbly seek wise words from the council of
elders...

Ta, Jaime

jaime, Jun 16, 2007

2. ### CBFalconerGuest

jaime wrote:
>
> Given the line:
> const int x=5;
> Can I then use "x" as a constant expression? (By "constant
> expression", I mean "constant expression" as defined in the C99
> standard)

No. It is a constant object, not expression. I.E. it cannot be
altered.

--
<http://www.cs.auckland.ac.nz/~pgut001/pubs/vista_cost.txt>
<http://www.securityfocus.com/columnists/423>
<http://www.aaxnet.com/editor/edit043.html>
cbfalconer at maineline dot net

--
Posted via a free Usenet account from http://www.teranews.com

CBFalconer, Jun 16, 2007

3. ### Joe WrightGuest

jaime wrote:
> Hi again all.
>
> Given the line:
> const int x=5;
> Can I then use "x" as a constant expression? (By "constant expression", I
> mean "constant expression" as defined in the C99 standard)
>
> I've been searching google for 2 days now trying to answer this myself,
> and I'm just getting more and more confused (some things I read make me
> think "yes", while some things I read make me think "no").
>
> I have many questions I'd like to ask on this topic, but rather than bore
> you all rigid with the results of all of my research (points for and
> against), I thought I'd just try this short question first.
>
> Also, could anyone answering please give me an idea of how I can infer the
> answer by reading the "Standard" (which I _think_ is currently ISO/IEC
> 9899:TC2).
>
> So, baffled once again, I humbly seek wise words from the council of
> elders...
>
> Ta, Jaime

No. const != constant in C. In your example..
const int x = 5;
...x is const and 5 is constant. You can't use x where you need a constant.

--
Joe Wright
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---

Joe Wright, Jun 16, 2007
4. ### Ben BacarisseGuest

jaime <> writes:

> Hi again all.
>
> Given the line:
> const int x=5;
> Can I then use "x" as a constant expression? (By "constant expression", I
> mean "constant expression" as defined in the C99 standard)

Short: no.

Medium: not if you want portable code.

Long: read all of section 6.6 of the standard. The trouble is it says
what you *can* have. The value of a variable, const, or otherwise is
not one of these.

Section 6.6 does permit implementations to allow other forms, so you
might be able to do it, but your code will not be portable. Such am
implementation would be violating the spirit in which const was
introduced (to signify a read-only, run-time object).

--
Ben.

Ben Bacarisse, Jun 16, 2007
5. ### Keith ThompsonGuest

jaime <> writes:
> Hi again all.
>
> Given the line:
> const int x=5;
> Can I then use "x" as a constant expression? (By "constant expression", I
> mean "constant expression" as defined in the C99 standard)
>
> I've been searching google for 2 days now trying to answer this myself,
> and I'm just getting more and more confused (some things I read make me
> think "yes", while some things I read make me think "no").

[...]

No, "const" in C really means "read-only", not "constant".

expression in C++</OT>.

--
Keith Thompson (The_Other_Keith) <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."
-- Antony Jay and Jonathan Lynn, "Yes Minister"

Keith Thompson, Jun 16, 2007