This is the mail archive of the
cygwin@sources.redhat.com
mailing list for the Cygwin project.
Re: misdefined macro _T in winnt.h
- To: Eric Paire <paire at ri dot silicomp dot fr>
- Subject: Re: misdefined macro _T in winnt.h
- From: Earnie Boyd <earnie_boyd at yahoo dot com>
- Date: Thu, 01 Feb 2001 11:22:58 -0500
- CC: Earnie Boyd <cygwin at cygwin dot com>, Eric PAIRE <eric dot paire at ri dot silicomp dot com>
- References: <200102011244.NAA06873@mailhost.ri.silicomp.fr>
- Reply-To: Earnie Boyd <cygwin at cygwin dot com>
Eric Paire wrote:
>
> Earnie Boyd wrote:
> >
> > Eric PAIRE wrote:
> > >
> > > Hi cygwin people,
> > >
> > > I have found a problem with the _T macro definition as it is defined in
> > > w32api/include/winnt.h: "#define _T TEXT" does not compile correctly the
> > > following small program:
> > >
> > > ------ Cut Here ------ Cut Here ------ Cut Here ------ Cut Here ------
> > > #include <windows.h>
> > > #define __DIR "dir"
> > >
> > > main() {
> > > size_t len = wcslen(_T(__DIR)) + wcslen(_T("dir"));
> > > exit(len);
> > > }
> > > ------ Cut Here ------ Cut Here ------ Cut Here ------ Cut Here ------
> > >
> >
> > What problems do you see compiling this with the current headers? I'm
> > not having problems compiling this example.
> >
> Sorry folks, I have forgotten to tell you to compile it with the _UNICODE
> and UNICODE defined. Here is a corrected version that has some problems
> when compiled:
>
> ------ Cut Here ------ Cut Here ------ Cut Here ------ Cut Here ------
> #define __DIR "dir"
>
> #include <stddef.h>
> #include <tchar.h>
> main() {
> size_t len = wcslen(_T(__DIR)) + wcslen(_T("dir"));
> size_t len = wcslen(_TEXT(__DIR)) + wcslen(_TEXT("dir"));
> exit(len);
> }
> ------ Cut Here ------ Cut Here ------ Cut Here ------ Cut Here ------
>
> You will see that the problem is around the evaluation of the __DIR macro
> (there is no problem with "dir"), both for _TEXT and _T. In addition, this
> should be fixed also for the _T and _TEXT definitions in <winnt.h>, which
> should be coherent with those in <tchar.h> (They are not for now, as _T is
> defined either as an object-like macro (in <winnt.h>) or as a function-like
> macro (in <tchar.h>)).
>
> If you want me to provide you with a patch (and a ChangeLog), let me know...
>
No, I don't need a patch. I do need to know if
L"dir" == L("dir")
? The problem with this macro is the use of the macro concatenation ##
and the order in which the macros are resolved. Currently we have
#define _T(x) L ## x
and if you pass a macro FOO as an argument to this macro you get LFOO
returned and not the value of FOO appended to L. If I change this to
#define _T(x) L(x)
then I get returned L("bar") where "bar" is the value of FOO. This
allows the program to compile but does L"bar" == L("bar")?
Earnie.
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com
--
Want to unsubscribe from this list?
Check out: http://cygwin.com/ml/#unsubscribe-simple