Hello!
The sample program below is compiled fine by gcc (with -Wall), but rejected
by Sun's SUNWspro compiler (version 6 update 2).
The point of contention is, whether a value for one of the union's types can
be passed to a function directly -- without creating a separate variable of
the union type and assigning the appropriate field of it.
Is gcc being too liberal, or is this behavior simply part of a newer
C-standard, which Sun's old compiler is not supporting? Thanks!
-mi 50 6474
Mikhail Teterin said:
Hello!
The sample program below is compiled fine by gcc (with -Wall), but
rejected by Sun's SUNWspro compiler (version 6 update 2).
What sample program?
The point of contention is, whether a value for one of the union's types
can be passed to a function directly -- without creating a separate
variable of the union type and assigning the appropriate field of it.
The value of the most recently assigned union member object can be passed to
a function directly. There is no need to copy it out.
Is gcc being too liberal, or is this behavior simply part of a newer
C-standard, which Sun's old compiler is not supporting? Thanks!
Who knows? I don't see your code.
--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999 http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)
Richard Heathfield wrote:
What sample program?
Your news-reader must be doing something nasty with attachments.
The program was attached to the original posting. Here it is inline.
-mi
#include <stdio.h>
typedef union {
int i;
void *p;
struct {
inti;
intj;
} s;
} testunion;
static void
testfunc(testun ion u)
{
printf( "i: %d\np: %p\n", u.i, u.p);
}
int
main()
{
testfun c((testunion)3) ;
testfun c((testunion)NU LL);
return 0;
}
Mikhail Teterin said:
Richard Heathfield wrote:
>What sample program?
Your news-reader must be doing something nasty with attachments.
Attachments don't happen in comp.lang.c - it's a text-only newsgroup.
#include <stdio.h>
typedef union {
int i;
void *p;
struct {
int i;
int j;
} s;
} testunion;
static void
testfunc(testun ion u)
{
printf("i: %d\np: %p\n", u.i, u.p);
Either you put in an int, in which case it's okay to print the int but not
the void *, or you put in a void *, in which case it's okay to print the
void * but not the int.
}
int
main()
{
testfunc((testu nion)3);
That's not a valid conversion.
testfunc((testu nion)NULL);
Neither is that.
return 0;
}
--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999 http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)
Richard Heathfield wrote:
Attachments don't happen in comp.lang.c - it's a text-only newsgroup.
Mine was a text-only attachement. And I can see it on my news-server...
Mikhail Teterin said:
>testfunc((test union)3);
That's not a valid conversion.
But gcc has no problem with it, and my question was: "why?" Is gcc too lax,
or is it aware of a newer C-standard that neither then Sun's compiler nor
you are aware of?
If a function expects a union, one of whose fields is `int':
typedef union {
int i;
void *p;
struct {
int i;
int j;
} s;
} testunion;
then passing an integer argument (with or without casting) is quite
unambigious -- gcc's treatment seems perfectly reasonable to me...
-mi
Mikhail Teterin <us****@aldan.a lgebra.comwrite s:
The sample program below is compiled fine by gcc (with -Wall), but rejected
by Sun's SUNWspro compiler (version 6 update 2).
The point of contention is, whether a value for one of the union's types can
be passed to a function directly -- without creating a separate variable of
the union type and assigning the appropriate field of it.
Is gcc being too liberal, or is this behavior simply part of a newer
C-standard, which Sun's old compiler is not supporting? Thanks!
#include <stdio.h>
typedef union {
int i;
void *p;
struct {
int i;
int j;
} s;
} testunion;
static void
testfunc(testun ion u)
{
printf("i: %d\np: %p\n", u.i, u.p);
}
int
main()
{
testfunc((testu nion)3);
testfunc((testu nion)NULL);
return 0;
}
Your program appeared in my newsreader as an attachment. Please don't
post attachments here; just copy your source code into the text of
your article.
You can't cast to a union type in either C90 or C99. gcc apparently
provides this as an extension. This is mentioned in the "C
Extensions" section of the gcc documentation. That documentation will
also tell you about the "-ansi -pedantic" or, if you prefer, "-std=c99
-pedantic" options, which would have warned you about this.
--
Keith Thompson (The_Other_Keit h) ks***@mib.org <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.
Mikhail Teterin wrote:
Richard Heathfield wrote:
>>Attachments don't happen in comp.lang.c - it's a text-only newsgroup.
Mine was a text-only attachement. And I can see it on my news-server...
Doesn't matter, text-only newsgroups don't forward attachments.
>
>>Mikhail Teterin said:
>>>testfunc((te stunion)3);
That's not a valid conversion.
But gcc has no problem with it, and my question was: "why?" Is gcc too lax,
or is it aware of a newer C-standard that neither then Sun's compiler nor
you are aware of?
In default mode, gcc will compile just about anything remotely like C.
gcc -Wall -pedantic -ansi /tmp/x.c
/tmp/x.c: In function `main':
/tmp/x.c:21: warning: ISO C forbids casts to union type
/tmp/x.c:22: warning: ISO C forbids casts to union type
Compile with an appropriate warning level, you'll learn more that way.
--
Ian Collins.
Ian Collins wrote:
Mikhail Teterin wrote:
>>Richard Heathfield wrote:
>>>Attachment s don't happen in comp.lang.c - it's a text-only newsgroup.
Mine was a text-only attachement. And I can see it on my news-server...
Doesn't matter, text-only newsgroups don't forward attachments.
Oops, got that one wrong. It did....
--
Ian Collins.
Mikhail Teterin <us****@aldan.a lgebra.comwrite s:
Richard Heathfield wrote:
>What sample program?
Your news-reader must be doing something nasty with attachments.
The program was attached to the original posting. Here it is inline.
Ugh, that's worse. In my newsreader, it shows up with a bunch of
non-printable '\232' characters.
I don't know how they got there, but try to use only spaces for
indentation. Copy and paste plain text if you can.
--
Keith Thompson (The_Other_Keit h) ks***@mib.org <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.
Ian Collins wrote:
In default mode, gcc will compile just about anything remotely like C.
I'm compiled with -Wall, not default, although I don't use -pedantic.
gcc -Wall -pedantic -ansi /tmp/x.c
/tmp/x.c: In function `main':
/tmp/x.c:21: warning: ISO C forbids casts to union type
/tmp/x.c:22: warning: ISO C forbids casts to union type
Compile with an appropriate warning level, you'll learn more that way.
With -Wall, but without -pedantic, the code still compiles cleanly and works
as expected:
% gcc -Wall -o union union.c
% ./union
i: 3
p: 3
i: 0
p: 0
Adding "-pedantic" does, indeed, elicit warnings you quote. So, is there a
way to pass a value to a union-expecting function, without creating a union
and copying the values around, as in:
testunion t;
t.i = i;
testfunc(t);
Why can't I just do:
testfunc(i)
? Is there any kind of ambiguity here?
The reason, I'm so insistant is not only having to copy values around and
create (seemingly) useless local variables. It is also that Purify reports
such passing of unions as a UMR (Uninitialized Memory Read), because other
(longer) fields of the union remain unitilized (such as the s.j field in my
sample union) and putting them onto stack (for a function call)
means "reading" them...
Thanks,
-mi This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: kazack |
last post by:
I am a little confused with code I am looking at. My c++ book does not go
into passing a structure to a function so I pulled out a c book which does.
and I do not understand the prototype verses the actual function call. I
will post the code below of the structure, the prototype and and function
call and if someone can explain this I would be very appreciative:
struct data
{
float amount;
string fname;
|
by: Paradigm |
last post by:
I am using Access 2K as a front end to a MYSQL database.
I am trying to run a Union query on the MYSQL database. The query is (much
simplified)
SELECT as ID from faxdata UNION
SELECT as ID from letdata UNION
SELECT as ID FROM MEMODATA;
I get an ODBC error. The same query runs when the backend files are MDB
files and it runs with MYSQL if I only combine 2 tables.
|
by: shaun palmer |
last post by:
when or Where do you use a union query ?
how can I wright sql,
tblPopulation,* tblcustomer,* one to one with
all the appropriate attributes(field).
Your help would be greatly
appreciated. Thank you.
|
by: turtle |
last post by:
I need to get the results of two queries into one. I need all the data
from both queries (i guess this is a full join or outer join).
Can I do a union query.
Query1
Job Budget Function
1 10 Electrical Engineer
1 5 Mechanical Engineer
2 20 Elecrical Engineer
|
by: Peter Dunker |
last post by:
Hi,
I will write ANSI C89.
Is the following struct defenition correct ?
I wrote it with VC6(Windows IDE) and at first no Problem.
As I changed a compiler switch to 'no language extension',
the compiler said that the union has no name.
Is it right that in ANSI C the union must be named inside this kind of
structure ?
| |
by: Christopher Benson-Manica |
last post by:
Does the following program exhibit undefined behavior? Specifically,
does passing a struct by value cause undefined behavior if that struct
has as a member a pointer that has been passed to free()?
#include <stdlib.h>
struct stype
{
int *foo;
};
|
by: mikes |
last post by:
I have 2 separate queries, which effectively are the same except they
draw data from separate tables. Both tables are (design-wise)
identical, only the data is different. for each query, there are 2
tables with a standard LEFT JOIN. One field of the query is calculated,
looking for a NULL in one table, and then using a field from the second
table in that case. One query looks like this:
PARAMETERS Text ( 255 );
SELECT...
|
by: BerkshireGuy |
last post by:
I have the following union query:
SELECT Count(PolicyNumber) AS TotalSubmitted, "TOTAL SUBMITTED" as
Header, "Combined" as TelemedClass, "1" as GroupA,"1" as Postion
FROM tblAppActivity
WHERE AppStatusSort = "1" And RDLastTransaction Between #01/01/2006#
and #09/30/2006#
UNION ALL
SELECT Count(PolicyNumber) AS TotalTelemedSubmittedIC, "TOTAL TELEMED
|
by: Richard Harter |
last post by:
There is probably a simple way to do what I want but I don't see
it. Any suggestions are welcome.
Suppose I have a function foo with an argument that can be any of
several types and that I want to use a union for that argument.
In a header file there is the following:
#define VAL_ALT union urt_value_alt
.....
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, well explore What is ONU, What Is Router, ONU & Routers main usage, and What is the difference between ONU and Router. Lets take a closer look !
Part I. Meaning of...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Duprι who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |