From: Ullrich von Bassewitz (uz_at_musoftware.de)
Date: 2003-02-01 21:55:06
On Sat, Feb 01, 2003 at 04:05:45PM +0100, Christian Krüger wrote:
> In your case (with dynamic memory) 'sizeof' delivers also an 'untrue'
> value, taking your array allways with one byte into account...
There's a difference between the two: I'm explicitly cheating around the type
system of the compiler, while in your case, you expect the compiler to support
what you're doing.
> >Another problem is, that one can initialize single struct instances, but
> >not
> >arrays of structs:
>
> Won't work with dynamic allocation either...
Works easily:
/* Allocate space for two structures */
struct foo* f = malloc (sizeof (foo) * 2 +
strlen (name1) +
strlen (name2));
> It's not only convenience. As I wrote above, I won't use dynamic
> memory, so I helped myself with ugly casts and initialize the data
> in ca65 and let cc65 point on it, telling that this is the structure.
>
> The way of defining an unsized array seems much more 'portable' than
> relying upon the allocation principle of static data by a
> specific compilier:
>
> --8<----
>
> struct foo = {10,20,'T'};
> char addtionalData[] = "his is the name";
>
> --8<----
>
> ...hoping that the compiler will put the data exactly in this
> sequence into memory.
There's no need for assembler modules or questionable C code:
struct foo {
char x, y;
char name[1];
};
static struct {
char x, y;
char name[4];
} bar = {
0, 0, "bar"
};
void func (struct foo* f)
{
...
}
func ((struct foo*) &bar);
> Maybe you know a solution of defining static data of various length
> which is accessible by a structure, but I don't know how to handle
> this... (any solution would be better than none..)
See above. You can also use void variables. See the manual for more
information.
Regards
Uz
--
Ullrich von Bassewitz uz_at_musoftware.de
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2003-02-01 21:58:07 CET