代码之家  ›  专栏  ›  技术社区  ›  Dervin Thunk

在GCC C中,前缀L“…”表示什么,不包括wchar?

  •  1
  • Dervin Thunk  · 技术社区  · 16 年前

    也就是说,为什么 unsigned short var= L'ÿ' unsigned short var[]= L"ÿ"; 不是吗?

    5 回复  |  直到 16 年前
        1
  •  11
  •   C. K. Young    16 年前

    L'ÿ' 属于类型 wchar_t ,可以隐式转换为 unsigned short . L"ÿ" 属于类型 wchar_t[2] unsigned short[2] .

        2
  •  4
  •   Steve M    16 年前

    L

    wchar_t some_wchar = L'ÿ';
    wchar_t *some_wstring = L"ÿ"; // or wchar_t some_wstring[] = L"ÿ";
    

    你能做到的 unsigned short something = L'ÿ';

        3
  •  2
  •   Jens Gustedt    16 年前

    wchar_t typedef 到一个标准整数类型。编译器实现者选择一个足够大的类型来容纳所有宽字符。如果不包括头,这仍然是真的,而且L“”定义得很好,只是作为程序员您不知道它是什么类型。

    整数类型的初始化是有效的,因为有规则可以将一个类型转换为另一个类型。只有在猜测要指定的整数类型时,才能将宽字符串(即宽字符数组的第一个地址的地址)指定给整数指针 世界卫生组织 正确对应。不同类型的指针没有自动转换,除非其中一个是 void*

        4
  •  1
  •   R.. GitHub STOP HELPING ICE    16 年前

    克里斯已经给出了正确的答案,但我想先谈谈你为什么会犯这个错误。在窗户上, wchar_t 早在Unicode的早期,它就被定义为16位字符集。不幸的是,这最终证明是一个错误的决定(这使得C编译器不可能以符合C标准的方式支持非BMP Unicode字符),但他们还是坚持这样做了。

    Unix系统从一开始就使用32位 ,这当然意味着 short * wchar_t * 是不兼容的指针类型。

        5
  •  0
  •   Eineki    16 年前

    • “Y”或者其他字符,你可以把它转换成int,然后把它转换成L,