long string literal的类型是long int *?

时间:2016-08-28 07:34:00

标签: c string-literals wchar-t

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

1 个答案:

答案 0 :(得分:2)

类型wchar_t不是基本类型,如char。它是实现定义的整数类型 1 的同义词。

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