RE: const and volatile keywords in C

  • From: "Sina Bahram" <sbahram@xxxxxxxxx>
  • To: <programmingblind@xxxxxxxxxxxxx>
  • Date: Wed, 21 Jul 2010 08:34:59 -0400

Yes, that's it.

No, I don't believe, in this specific case, that the order makes a difference.

Take care,
Sina 

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx 
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Øyvind Lode
Sent: Wednesday, July 21, 2010 5:24 AM
To: programmingblind@xxxxxxxxxxxxx
Subject: RE: const and volatile keywords in C

Sina:

Let's assume the following:

Const volatile long realtimeclock;

Ok, this could be a counter updated by a clock interupt routine.
It is essential to make it volatile because of the asynchronous updates to it 
and it is marked const because it should not be
changed by anything other than the update routine.

Am I understanding it correctly now?

One more thing:
Does it matter which keyword comes first?
I mean:

Volatile const long realtimeclock;

Will this mean exactly the same as the first one where const is first?

PS: I know that C is case sensitive, so please ignore the capitilized C in 
const and V in volatile.
I've told Outlook to stop doing this, but of some reason it's default again 
when I restart Outlook.

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Sina Bahram
Sent: 21. juli 2010 02:19
To: programmingblind@xxxxxxxxxxxxx
Subject: RE: const and volatile keywords in C

Hey no problem. And I have free long idstance, or close enough to it. If you 
need any help via phone, just shoot me your number off
list, and I'll give you a call.

Ask again on here if you still have questions.

Take care,
Sina
-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Øyvind Lode
Sent: Tuesday, July 20, 2010 6:09 PM
To: programmingblind@xxxxxxxxxxxxx
Subject: RE: const and volatile keywords in C

Hi Sina:
I appreciate your kind offer to call you, but I'm way over here in Norway.
I don't use Skype either.
And my oral English is even worse than my written one :)

I'll go back and read what you wrote again, but now it's time to go to bed over 
here.
So I'll do it tomorrow.

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Sina Bahram
Sent: 20. juli 2010 23:13
To: programmingblind@xxxxxxxxxxxxx
Subject: RE: const and volatile keywords in C

No, I was saying that it might seem like a misnomer, but isnt' one. Go back and 
read what I wrote again, but if it's not clear, and
I can totally see how it wouldn't be, please feel free to call me, (919) 
345-3832, and I think voice could handle this better than
text, in like 2 minutes flat.

Does that work? I really want you to get this concept.

Take care,
Sina

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Øyvind Lode
Sent: Tuesday, July 20, 2010 4:11 PM
To: programmingblind@xxxxxxxxxxxxx
Subject: RE: const and volatile keywords in C

I think so.
I think I understand const and volatile.
But looking at the example provided in the book were both were used at the same 
time was very confusing.
I read the authors explanation of const and volatile several times, but the 
example were he is using both const and volatile at the
same time did not make any sense to me.
So maybe I'm still not getting it?

You are saying that using volatile and const at the same time might be a 
misnumer.
Does this mean it's a bug in the book?
Does this mean I should just forget about it and move on?

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Sina Bahram
Sent: 20. juli 2010 19:56
To: programmingblind@xxxxxxxxxxxxx
Subject: RE: const and volatile keywords in C

Volatile implies to the compiler that a simple SSA optimization can not be 
accurately carried out, like so.

If I have this code:

int x = 3, y=5, z;
z = x+y;
x = 10;
z = x+y;

The compiler can rewrite that as the following: *note: actual compiler writers 
give me a break, I know it's not proper SSA, get over
it*

x1=3
y1=5
z1 = x1+y1;
x2 = 10;
z2 = x2+y1;


As you can see, each time the value of x or z changes, the subscript 
incremented one. This allows the compiler to then be able to
rearrange lines of code, knowing it doesn't have any data dependencies that it 
would be violating. If you mark x as volatile, it
can't make those assumptions. Every single time you reference x, even if in the 
exact previous line, you assigned a value to x, the
compiler has to go check x again, and can't go off of a cached value in a 
register.

Now, it sounds like you do already understand volatile anyways, but I wanted to 
give that explanation as a way of putting us both on
the same page.

As far as const volatile, it might seem like this is a bit of a misnomer.
You might think the compiler will ignore the volatile, as const has much higher 
priority, semantically speaking; thus, the volatile
is simply ignored, since because the value is const, it can't be changed, but 
that's not true.

Here's what it means.


The const says the code can't change the value of x, and the volatile says not 
to cache x because it can be changed, but by what,
you might ask? Well, by something else. Let's say a driver is updating that 
value, a hardware interrupt is firing, whatever. So the
code can't change that const, but it's volatile which means it's storage area's 
value, actually can be changed by external
influences.

Hope this helps?


Take care,
Sina

-----Original Message-----
From: programmingblind-bounce@xxxxxxxxxxxxx
[mailto:programmingblind-bounce@xxxxxxxxxxxxx] On Behalf Of Øyvind Lode
Sent: Tuesday, July 20, 2010 12:38 PM
To: programmingblind@xxxxxxxxxxxxx
Subject: const and volatile keywords in C

Hi all:

I know that the "const" keyword declares a value that cannot be change by the 
program and this may lead to better performance.
If volatile is used the value may be changed by the program, but it may also be 
changed by some outside influence.

volatile const int index3 = 12;
volatile int index4;

The difference between the two as I see it is that the first one use both 
volatile and const and assigns 12 to an integer type to
the identifier named
index3 and the second only uses volatile and declares an integer type 
identified as index4 but does not assign a value.

So if I do:

volatile const index3 = 12;
volatile int index4 = 12;

Now I have two int types with two identifiers named index3 and index4 with the 
same value of 12.
What's not clear to me is why only volatile is used and what's the difference 
between using both volatile const to only use
volatile?


__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind


__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind


__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind


__________
View the list's information and change your settings at 
//www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: