c – long string literal的类型是long int *?

根据
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数组.这有什么不对?

最佳答案 类型wchar_t不是基本类型,如char.它是实现定义的整数type1的同义词.

1(引用自:ISO / IEC 9899:201x 7.19通用定义2.)
wchar_t是一个整数类型,其值范围可以表示所有的不同代码
受支持的语言环境中指定的最大扩展字符集的成员;

点赞