long string literal 的类型是 long int* 吗?

Is long string literal's type 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。它是一个实现定义的整数类型的同义词1.


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