Dimitrie O. Paun wrote:
On November 19, 2002 09:46 am, Dimitrie O. Paun wrote:This actually happens whether you do -fshort-wchar or not.
[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.cHm, 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?
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