Согласно ответам this question, буквально L"test"
имеет тип wchar_t[5]
. Но следующий код с GCC, кажется, сказать что-то другое:Является длинным строковым литералом типа long int *?
int main()
{
struct Test{char x;} s;
s="Test"; // ok, char* as expected
s=L"Test"; // ??? I'd expect wchar_t*
return 0;
}
Вот как я скомпилировать (GCC 5.2, но те же результаты с 4.5 и 4.8):
$ gcc test.c -o test -std=c99
test.c: In function ‘main’:
test.c:4:6: error: incompatible types when assigning to type ‘struct Test’ from type ‘char *’
s="Test"; // ok, char* as expected
^
test.c:5:6: error: incompatible types when assigning to type ‘struct Test’ from type ‘long int *’
s=L"Test"; // ??? I'd expect wchar_t*
^
По-видимому, вместо ожидаемый массив wchar_t
Я получаю массив long int
. Что здесь не так?
Но на Linux wchar_t 32 бит, в некоторых архитектурах это может быть просто typedef для long int. –
'struct Test {} s;' не имеет смысла. Структуры должны иметь хотя бы одного члена. Представьте код, который компилируется. – 2501
'wchar_t' не является встроенным. Это определенный тип реализации, который оказывается эквивалентным 'long int' в вашей системе. В моей системе это просто простой «int». – user3386109