Dimitrie O. Paun wrote:
On November 19, 2002 09:46 am, Dimitrie O. Paun wrote:
[dimi@dimi wine]$ gcc -nostdinc -fshort-wchar -I /home/dimi/dev/wine/wine.src/include/msvcrt -I /home/dimi/dev/wine/wine.src/include test.c
Hm, maybe we need the standard headers after all. Even though this might create confusion.
Nevertheless, they solve only part of the problem:
[dimi@dimi wine]$ gcc -fshort-wchar -I /home/dimi/dev/wine/wine.src/include/msvcrt -I /home/dimi/dev/wine/wine.src/include test.c test.c: In function `main': test.c:8: `wchar_t' undeclared (first use in this function) test.c:8: (Each undeclared identifier is reported only once test.c:8: for each function it appears in.)
This shouldn't have, should it?
This actually happens whether you do -fshort-wchar or not. The question is, where is wchar_t defined? The answer seems to be, in stddef.h However, the Wine stddef.h has this: /* Best to leave this one alone: wchar_t */ and doesn't define it. So if you include the normal stddef.h, we have a definition. This can be done with a -I- to indicate that only "" style headers should be included from the given directories:
gcc -fshort-wchar -I /home/dimi/dev/wine/wine.src/include/msvcrt -I /home/dimi/dev/wine/wine.src/include -I- test.c
The problem is, there is a conflict between linux stddef.h and wine stdlib.h. There is also a redifinition of size_t in stdio.h, but that's not a problem.
So the following C program compiles fine with the above command, -fshort-wchar or not, and making stdio.h angle-bracketed will take away the size_t warning:
#include <stddef.h> #include "windows.h" #include "stdio.h" #include <stdlib.h> #include "assert.h"
int main() { printf("sizeof(wchar_t)=%d\n", sizeof(wchar_t));
return 0; }
Obviously something could be done about the conflicts and or lack of wchar_t in wine stdlib.h, but I'll leave that up to someone else...
David