根据this question中的答案,L"test"
这样的字面值类型为wchar_t[5]
。但是GCC的以下代码似乎有些不同之处:
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
数组。这有什么不对?
答案 0 :(得分:2)
类型wchar_t不是基本类型,如char。它是实现定义的整数类型 1 的同义词。
1 (引自:ISO / IEC 9899:201x 7.19通用定义2.)
wchar_t是一个整数类型,其值范围可以表示所有的不同代码
在受支持的语言环境中指定的最大扩展字符集的成员;