[си] TCHAR = _T() при #define _UNICODE
Ммм, проверил твой код, у меня не ругается (vc++ 2005)
P.S. tchar.h вроде не надо подключать - он windows.h и так есть. И TCHAR = wchar_t при включенном UNICODE.
In file included from test.c:2:
../../../lib/gcc/mingw32/3.4.2/../../../../include/tchar.h:41: error: syntax error before "TCHAR"
../../../lib/gcc/mingw32/3.4.2/../../../../include/tchar.h:42: error: syntax error before "_TCHAR"
In file included from ../../../lib/gcc/mingw32/3.4.2/../../../../include/windef.h:246,
from ../../../lib/gcc/mingw32/3.4.2/../../../../include/windows.h:48,
from test.c:3:
../../../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h:96: error: syntax error before "TBYTE"
../../../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h:97: error: syntax error before '*' token
../../../lib/gcc/mingw32/3.4.2/../../../../include/winnt.h:98: error: syntax error before '*' token
In file included from ../../../lib/gcc/mingw32/3.4.2/../../../../include/windows.h:50,
from test.c:3:
../../../lib/gcc/mingw32/3.4.2/../../../../include/winbase.h:1026: error: syntax error before "LPCTSTR"
../../../lib/gcc/mingw32/3.4.2/../../../../include/winbase.h:1027: error: syntax error before "LPCTSTR"
../../../lib/gcc/mingw32/3.4.2/../../../../include/winbase.h:1028: error: syntax error before "LPTSTR"
In file included from ../../../lib/gcc/mingw32/3.4.2/../../../../include/windows.h:76,
from test.c:3:
../../../lib/gcc/mingw32/3.4.2/../../../../include/ddeml.h:194: error: syntax error before "TCHAR"
test.c: In function `_tmain':
test.c:7: error: `ts' undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
Сижу под виндой на компиляторе(gcc) от последнего dev-c++
без tchar.h ругается на _T:
test.c: In function `_tmain':
test.c:7: warning: initialization makes pointer from integer without a cast
C:\DOCUME~1\\LOCALS~1\Temp/ccGGaaaa.o(.text+0xe):test.c: undefined reference to `_T'
../../../lib/gcc/mingw32/3.4.2/../../../libmingw32.a(main.o.text+0x106):main.c: undefined reference to `16'
collect2: ld returned 1 exit status
А что нельзя что ли через cout или printf какой нить посмотреть вывод? Че то мне кажется что если ты через _T преобразуешь, то там коряблики будут.
P.S. Имел дело только с С++ и то немного.
p.s. Почему кракозяблики-то?
из tchar.h:
#ifdef _UNICODE
#define __TEXT(q) L##q
#else
#define __TEXT(q) q
#endif
#define _T(x) __TEXT(x)
_tmain - > main, т.к. MinGW'шный компилятор не содержит wmain
меняем местами tchar.h и windows.h, т.к. tchar.h не описывает wchar_t, а только использует.
Это только исправляет, чтобы не ругалось error'ами, но делает актуальным (код я подправил)
Warning тот же: initialization from incompatible pointer type
Что ему не нравится и почему прекрасно компилится wchar_t * ts = L"0123456789"; ? Это не то же самое разве?
посмотреть код после макропроцессинга твой компилятор позволяет?
p.s. MinGW'шный core c
через rtti можно попробовать вывести тип TCHAR-а
через rtti можно попробовать вывести тип TCHAR-аЯ не умею. А в чистом c оно есть? у препроцессора флаг -frtti только для c++
в MinGW в winnt.h (где определяется TCHAR и __TEXT) используется #ifdef UNICODE
А в tchar.h (где тоже определяется TCHAR __TEXT и еще куча оберток) используется #ifdef _UNICODE
Таким образом сначала в одном файле определяется TCHAR и определяется _TCHAR_DEFINED, а так же определяется __TEXT(q)
А во втором файле, TCHAR остается, а т.к. для него UNICODE'ная переменная другая, __TEXT(q) переопределяется.
Т.е. похоже надо одновременно определять и UNICODE и _UNICODE
Оно ж не повредит?
p.s. Как сказать компилятору "Забей на '#pragma GCC system_header' ы выдай мне все варнинги"?
Оставить комментарий
feliks28
При компиляции ругается warning'ом: initialization from incompatible pointer type
на строку TCHAR * ts = _T("0123456789");
Это почему так ругается?
p.s. закомментированная строка, на которую, как я понимаю, все и подменяется, компилируется нормально.