Tôi có ứng dụng UNICODE trong đó chúng tôi sử dụng _T (x) được định nghĩa như sau._T() thay đổi vĩ mô cho dữ liệu ký tự UNICODE
#if defined(_UNICODE)
#define _T(x) L ##x
#else
#define _T(x) x
#endif
Tôi hiểu rằng L được xác định là wchar_t, sẽ là 4 byte trên nền tảng bất kỳ. Hãy sửa tôi nếu tôi sai. Yêu cầu của tôi là tôi cần L là 2 byte. Vì vậy, như trình biên dịch hack tôi bắt đầu sử dụng cờ-gshort-wchar gcc. Nhưng bây giờ tôi cần ứng dụng của tôi để được chuyển đến zSeries, nơi tôi không nhận thấy hiệu ứng của cờ -fshort-wchar trong nền tảng đó.
Để tôi có thể chuyển ứng dụng của mình trên zSeries, tôi cần sửa đổi macro _T() theo cách mà ngay cả sau khi sử dụng L ## x và không sử dụng cờ -fshort-wchar, tôi cần nhận được 2byte dữ liệu ký tự rộng.Có thể một số cho tôi biết làm thế nào tôi có thể thay đổi định nghĩa của L để tôi có thể định nghĩa L là 2 byte luôn trong ứng dụng của tôi.
AFAIK, wchar_t là 2bytes rộng trên Windows, vì vậy kích thước của wchar_t là thực hiện phụ thuộc. – nothrow
'wchar_t' thường được sử dụng làm kiểu cơ sở cho' WCHAR', chắc chắn là 2 byte rộng. Các hàm như 'MessageBoxW' có các đối số' WCHAR * ', vì vậy việc có' WCHAR' và 'wchar_t' giống hệt nhau làm cho việc lập trình Windows trở nên dễ dàng hơn nhiều. – MSalters
L chỉ là ký tự 'L'. Nó không được định nghĩa là bất cứ điều gì. Trong C++, L "hello world" chỉ định nghĩa một chuỗi * rộng *. Nhưng L không bị thay thế bởi bất cứ thứ gì. – jalf