SimonX
2007-01-08, 15:59:52
Hi
Hier der Code:
#include <stdlib.h>
#include <stdio.h>
static inline unsigned int _IdbmLocalGenSignature32(const void *s, int size)
{
unsigned int sig = 0x5A469df4 + size;
const unsigned int *d = s;
size >>= 2;
do {
sig += *d;
d++;
size--;
} while (size > 0);
return sig;
}
#define GenStructCrc_m(s) (_IdbmLocalGenSignature32(&(s)->p, sizeof((s)->p)))
#define SetStructCrc_m(s) ((s)->crc = GenStructCrc_m(s))
typedef struct
{
short pno;
short p_id;
} ProcId_t;
typedef struct
{
struct
{
ProcId_t id;
ProcId_t parent_id;
int parent_table;
int no_field;
int field_offset;
} p;
unsigned int crc;
} DefMan_t;
void DefCreate(DefMan_t *t, ProcId_t id, ProcId_t parent_id, int no_field)
{ int parent_table=parent_id.pno;
t->p.id=id;
t->p.parent_id=parent_id;
t->p.parent_table=parent_table;
t->p.no_field= no_field;
t->p.field_offset= 10;
SetStructCrc_m(t);
printf("%p %d %d\n", t, t->crc, GenStructCrc_m(t));
}
ProcId_t id={1,5};
ProcId_t parent_id={0,0};
void main()
{
DefMan_t *t=calloc(1, sizeof(DefMan_t));
DefCreate(t, id, parent_id, 13);
printf("%p %d %d\n", t, t->crc, GenStructCrc_m(t));
}
Und hier wie es übersetzt wurde:
>/usr/local/gcc-4.1.1/bin/gcc -v -fPIC -g3 -O3 -o x x.c
Using built-in specs.
Target: sparc-sun-solaris2.9
Configured with: ../gcc-4.1.1/configure --prefix=/usr/local/gcc-4.1.1 --disable-shared --disable-libgcj --disable-java-net
Thread model: posix
gcc version 4.1.1
/usr/local/gcc-4.1.1/libexec/gcc/sparc-sun-solaris2.9/4.1.1/cc1 -quiet -v -dD x.c -quiet -dumpbase x.c -mcpu=v7 -auxbase x -g3 -O3 -version -fPIC -o /var/tmp//cck6Y0dz.s
ignoring nonexistent directory "/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/../../../../sparc-sun-solaris2.9/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/local/gcc-4.1.1/include
/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/include
/usr/include
End of search list.
GNU C version 4.1.1 (sparc-sun-solaris2.9)
compiled by GNU C version 4.1.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c25b3b01b3bd09a78990ec415a61556e
x.c: In function 'main':
x.c:61: warning: return type of 'main' is not 'int'
/usr/ccs/bin/as -V -Qy -s -K PIC -xarch=v8 -o /var/tmp//ccobkXha.o /var/tmp//cck6Y0dz.s
/usr/ccs/bin/as: Sun WorkShop 6 update 2 Compiler Common 6.2 Solaris_9_CBE 2001/04/02
/usr/local/gcc-4.1.1/libexec/gcc/sparc-sun-solaris2.9/4.1.1/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o x /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crt1.o /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crti.o /usr/ccs/lib/values-Xa.o /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crtbegin.o -L/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1 -L/usr/ccs/lib -L/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/../../.. /var/tmp//ccobkXha.o -lgcc -lc -lgcc -lc /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crtend.o /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crtn.o
ld: Software Generation Utilities - Solaris Link Editors: 5.9-1.393
>x
20aa8 1514642975 1514642975
20aa8 1514642975 1514642980
>
Und auf einer Tru64 Alpha:
>gcc -v -g3 -O3 -o x x.c
>x
140004100 1514577439 1514577439
140004100 1514577439 1514905120
>
Das gleiche auf einer Linux Maschine:
> gcc -g3 -O3 -o x x.c
>x
0x501010 1514905119 1514905119
0x501010 1514905119 1514905120
>gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../gcc-4.1.1/configure --prefix=/local/Linux/local --disable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.1
Ist da was generell falsch?
Hier der Code:
#include <stdlib.h>
#include <stdio.h>
static inline unsigned int _IdbmLocalGenSignature32(const void *s, int size)
{
unsigned int sig = 0x5A469df4 + size;
const unsigned int *d = s;
size >>= 2;
do {
sig += *d;
d++;
size--;
} while (size > 0);
return sig;
}
#define GenStructCrc_m(s) (_IdbmLocalGenSignature32(&(s)->p, sizeof((s)->p)))
#define SetStructCrc_m(s) ((s)->crc = GenStructCrc_m(s))
typedef struct
{
short pno;
short p_id;
} ProcId_t;
typedef struct
{
struct
{
ProcId_t id;
ProcId_t parent_id;
int parent_table;
int no_field;
int field_offset;
} p;
unsigned int crc;
} DefMan_t;
void DefCreate(DefMan_t *t, ProcId_t id, ProcId_t parent_id, int no_field)
{ int parent_table=parent_id.pno;
t->p.id=id;
t->p.parent_id=parent_id;
t->p.parent_table=parent_table;
t->p.no_field= no_field;
t->p.field_offset= 10;
SetStructCrc_m(t);
printf("%p %d %d\n", t, t->crc, GenStructCrc_m(t));
}
ProcId_t id={1,5};
ProcId_t parent_id={0,0};
void main()
{
DefMan_t *t=calloc(1, sizeof(DefMan_t));
DefCreate(t, id, parent_id, 13);
printf("%p %d %d\n", t, t->crc, GenStructCrc_m(t));
}
Und hier wie es übersetzt wurde:
>/usr/local/gcc-4.1.1/bin/gcc -v -fPIC -g3 -O3 -o x x.c
Using built-in specs.
Target: sparc-sun-solaris2.9
Configured with: ../gcc-4.1.1/configure --prefix=/usr/local/gcc-4.1.1 --disable-shared --disable-libgcj --disable-java-net
Thread model: posix
gcc version 4.1.1
/usr/local/gcc-4.1.1/libexec/gcc/sparc-sun-solaris2.9/4.1.1/cc1 -quiet -v -dD x.c -quiet -dumpbase x.c -mcpu=v7 -auxbase x -g3 -O3 -version -fPIC -o /var/tmp//cck6Y0dz.s
ignoring nonexistent directory "/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/../../../../sparc-sun-solaris2.9/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/local/gcc-4.1.1/include
/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/include
/usr/include
End of search list.
GNU C version 4.1.1 (sparc-sun-solaris2.9)
compiled by GNU C version 4.1.1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: c25b3b01b3bd09a78990ec415a61556e
x.c: In function 'main':
x.c:61: warning: return type of 'main' is not 'int'
/usr/ccs/bin/as -V -Qy -s -K PIC -xarch=v8 -o /var/tmp//ccobkXha.o /var/tmp//cck6Y0dz.s
/usr/ccs/bin/as: Sun WorkShop 6 update 2 Compiler Common 6.2 Solaris_9_CBE 2001/04/02
/usr/local/gcc-4.1.1/libexec/gcc/sparc-sun-solaris2.9/4.1.1/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o x /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crt1.o /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crti.o /usr/ccs/lib/values-Xa.o /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crtbegin.o -L/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1 -L/usr/ccs/lib -L/usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/../../.. /var/tmp//ccobkXha.o -lgcc -lc -lgcc -lc /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crtend.o /usr/local/gcc-4.1.1/lib/gcc/sparc-sun-solaris2.9/4.1.1/crtn.o
ld: Software Generation Utilities - Solaris Link Editors: 5.9-1.393
>x
20aa8 1514642975 1514642975
20aa8 1514642975 1514642980
>
Und auf einer Tru64 Alpha:
>gcc -v -g3 -O3 -o x x.c
>x
140004100 1514577439 1514577439
140004100 1514577439 1514905120
>
Das gleiche auf einer Linux Maschine:
> gcc -g3 -O3 -o x x.c
>x
0x501010 1514905119 1514905119
0x501010 1514905119 1514905120
>gcc -v
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../gcc-4.1.1/configure --prefix=/local/Linux/local --disable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.1
Ist da was generell falsch?