Buggish behaviour of nested unnamed struct in extern "C" clause?
David Lucena
yakumoklesk@yahoo.es
Wed Nov 28 12:00:00 GMT 2007
Hi to all, my name's David Lucena, and I am new to the list. I have this file: test.c
----------------------------
#include <stdio.h>
struct tA
{
int val1;
};
typedef struct tA A;
struct tB
{
struct tA;
int val2;
};
typedef struct tB B;
void Assign()
{
A a;
B b;
a.val1 = 10;
b.val1 = 20;
b.val2 = 30;
printf( "sizeof(A) %d\n", sizeof(A) );
printf( "sizeof(B) %d\n", sizeof(B) );
}
int main( int argc, char* argv[] )
{
A a;
B b;
a.val1 = 10;
b.val1 = 20;
b.val2 = 30;
printf( "sizeof(A) %d\n", sizeof(A) );
printf( "sizeof(B) %d\n", sizeof(B) );
Assign();
return 0;
}
----------------------------
I compile it with gcc and -fms-extensions, and works like a charm. sizeof(A) is 4, sizeof(B) is 8,
and b.val1 assignment is ok.
I have another program: main.cpp
----------------------------
#include <stdio.h>
extern "C"
{
struct tA
{
int val1;
};
typedef struct tA A;
struct tB
{
struct tA;
int val2;
};
typedef struct tB B;
void Assign()
{
A a;
B b;
a.val1 = 10;
b.val1 = 20;
b.val2 = 30;
printf( "sizeof(A) %d\n", sizeof(A) );
printf( "sizeof(B) %d\n", sizeof(B) );
}
}
int main( int argc, char* argv[] )
{
A a;
B b;
a.val1 = 10;
b.val1 = 20;
b.val2 = 30;
printf( "sizeof(A) %d\n", sizeof(A) );
printf( "sizeof(B) %d\n", sizeof(B) );
Assign();
return 0;
}
----------------------------
I compile it with g++. It fails on assigning b.val1, both in Assign() and in main. If I comment
the assignments, it compiles, but sizeof(A) is 4, and sizeof(B) is also 4.
What I am missing? I need to use structures like thesse in C++ code, instead of using C++ classes
because I have some already defined from another project for an embedded system that is C pure,
from which I want to make some tools in PC for faster processing.
Thank you very much in advance.
______________________________________________
¿Chef por primera vez?
Sé un mejor Cocinillas.
http://es.answers.yahoo.com/info/welcome
More information about the Gcc-help
mailing list