From: groepaz (groepaz_at_gmx.net)
Date: 2002-07-30 04:28:10
Hello Ullrich, Monday, July 29, 2002, 8:20:01 AM, you wrote: UvB> Hi! UvB> On Fri, Jul 26, 2002 at 11:56:51PM +0200, groepaz wrote: >> coolio :o) btw, i guess i can safely assume that the snapshots you >> generate each nite (i guess? looks like it atleast ;=P) always have >> all those patches applied? UvB> Unfortunately not .There are situations where the development sources are in a UvB> state that does not allow to apply the patch, or sometimes I choose a UvB> different solution for the development sources. uhoh..... ok, i understand ;=P UvB> Works here. The only thing that does not work is something like this: UvB> int bar; UvB> void foo (void) UvB> { UvB> extern int bar; UvB> } UvB> So as long as you don't have both, a declaration and an extern definition in UvB> your sources, they should be ok. well yes, its (ofcoz) like you say :o) there are global variables defined all over the source and then they are declared as extern in every function that uses them. (just as a sidenote, what benefit is expected from this way of declaring things? (instead of simply referring to the globals?) seen that in a couple of sources already, the testsuite for example uses this extensivly) >> and then "bla" is somewhere reused in an expression where the size of >> "bla" must be known..... resulting in an "size of "bla" unknown" >> error. i am not sure here, but afaik "bla[]" equals "*bla" in an >> expression and thus its size (the size of the pointer) _is_ known and >> such an error shouldnt occur. (ok i could come up with a testprog >> aswell here but maybe you know where to look already :o)) UvB> If the size of bla[] is the size of a pointer, what would you expect from UvB> sizeof(bla[3])? I don't know about the code you're testing, but gcc does not UvB> accept this construct either: UvB> t.c:6: sizeof applied to an incomplete type oh yes, you are right.... my attempt on explaining what was going wrong probably didnt turn out to well :o) i have knocked up a testprog that shows the problem more exactly (and another problem aswell).... attached at the bottom of this mail :) >> btw! i tried compiling with an oldish mingw32 install aswell (cygwin >> compiled binaries are kinda sloooooooow ;=P) and noticed that >> somewhere the code relies on fork() and friends and maybe some other >> things used to spawn a sub-process in *nix.... is there a way to >> compile the source for a target that has simple "spawn..." functions >> but no fork() already? UvB> The Windows version uses spawn() from it's own library. The unix version has UvB> an additional module that implements spawn(). oh! have to look closer again then.... -- Best regards, groepaz mailto:groepaz_at_gmx.net ------ testprog #include <stdio.h> /* check behaviour on incompletely declared arrays */ #ifndef __CC65__ // cc65: Error: Variable `i1' has unknown size char i1[]; #endif void test1(void) { int a; //int bla[]; //gcc: array size missing in "bla" // a=sizeof(bla); // printf("%04x\n",a); //gcc: array size missing in "bla" // a=sizeof(bla[0]); // printf("%04x\n",a); //gcc: sizeof applied to an incomplete type // a=sizeof(i1); // printf("%04x\n",a); #ifndef __CC65__ // cc65 dont compile this //gcc: warning: array `i1' assumed to have one element // // this is probably undefined behavior ? // a=sizeof(i1[0]); printf("%04x - ",a); if(sizeof(i1[0])==sizeof(char)) { // gcc gives size of element printf("sizeof(i1[0]) gives size of element\n"); } if(sizeof(i1[0])==sizeof(char*)) { printf("sizeof(i1[0]) gives size of pointer to element\n"); } #endif } /* check behaviour on string init */ char t1[]="abcde"; // cc65 Warning: Converting pointer to integer without a cast // (?! eh ?!) char t2[]={"abcde"}; #ifndef __CC65__ // cc65 Error: Expression expected char *t3="abcde"; // cc65 Error: Expression expected char *t4={"abcde"}; #else // just to make it compile, the test will fail anyway ;=P char t3[]="....."; char t4[]="....."; #endif void test2(void) { char c1,c2,c3,c4; int i,e=0; for(i=0;i<5;i++){ c1=t1[i];c2=t2[i];c3=t3[i];c4=t4[i]; printf("%02x %02x %02x %02x\n",c1,c2,c3,c4); if(!((c1==c2)&(c1==c3)&(c1==c4))) e=1; } if(e) printf("test2 failed.\n"); else printf("test2 ok.\n"); } /* check behaviour on extern-declarations inside functions */ typedef struct { char *name; void *func; } A3; #ifdef __CC65__ A3 a3[] = { { "test3", (void*) NULL }, { "test3", (void*) NULL }, }; #else //gcc warning: missing braces around initializer (near initialization for `a3[0]') // this type of struct-initialization seems to be kinda common so // causes lotta stuff to not compile with cc65 ;/ A3 a3[] = { "test3", (void*) NULL , "test3", (void*) NULL , }; #endif void test3a(A3 *list, int number){ printf("%s %d\n",list->name,number); } // original variation, works ok with gcc #if 0 static void test3(void) { // cc65: Error: Variable `a3' has unknown size extern A3 a3[]; test3a(a3, -1); } #endif #if 0 // this variation compiles with cc65 if test3() // is not called from main()...probably also if a3 would be REALLY extern static void test3(void) { // cc65: Error #41: Symbol `_a3' is already defined extern A3 *a3; test3a(a3, -1); } #endif #if 1 // this works with cc65 static void test3(void) { test3a(a3, -1); } #endif /* todo: add test on function pointers in the form of (*func)(arg) ... cc65 seems to have problems here aswell ;/ */ int main(void) { test1(); test2(); test3(); /* return OK */ return(0); } ---------------------------------------------------------------------- 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 : 2002-07-30 04:29:40 CEST