Re: C ethics question
- From: Flash Gordon <spam@xxxxxxxxxxxxxxxxxx>
- Date: Sat, 31 Mar 2007 13:21:43 +0100
Servé Laurijssen wrote, On 31/03/07 12:36:
"Harald van D?k" <truedfx@xxxxxxxxx> wrote in message news:1175340222.133195.49390@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxServé Laurijssen wrote:Recently, I found myself in the following situation:
There is library software written in C which declares some externals like:
struct METER m1;
struct METER m2;
in different sourcefiles and I have no control over these sources.
Then there's functions that operate on these meters and will generate an
event which passes a METER * to identify which meter has been changed.
static void OnChangemeter(struct METER *m)
{
if (m == &m1) ...
if (m == &m2) ...
}
Now the comparison of these pointers is UB in C [...]
No, it isn't.
Please get MSOE to quote properly (it can). All quoted material should be prefixed with a ">" for each level of quoting. As you are doing it how are we meant to see what is quoted and what you wrote? I had to check up for this, and I've fixed it this time.
oh, I thought that you can only compare pointers if they are declared in the same object.
struct METER meters[10];
if (m == &m[1]) ..
etc would have worked but comparing "random" pointers is UB.
You can compare for equality as long as both fall in to the following categories (they do not have to be in the same category):
1) null pointer
2) pointer to an object
3) pointer to 1 past the end of an object
Relational operators are more limited.
--
Flash Gordon
.
- References:
- C ethics question
- From: Servé Laurijssen
- Re: C ethics question
- From: Harald van Dijk
- Re: C ethics question
- From: Servé Laurijssen
- C ethics question
- Prev by Date: Re: Visual C++ support of C99 by using "C++ mode" (/TP)
- Next by Date: Re: C ethics question
- Previous by thread: Re: C ethics question
- Next by thread: Re: C ethics question
- Index(es):
Relevant Pages
|