zoukankan      html  css  js  c++  java
  • Windows风格与C/C++风格:UNICODE VS _UNICODE 与 TEXT() VS _T()

    转自:http://www.mouseos.com/win64/TEXT_T.html

    在 Windows 上编程,当使用字符串时常会使用:

    1. TEXT()
    2. _T()

    这两个宏作用是对字符串常量进行分类,下面的代码中:

    LPTSTR lpStrA = TEXT("Hello");

    LPTSTR lpStrB = _T("Hello");

    使用 TEXT() _T() 效果是一样的。

    然而,它们却代表了两种不同的编程风格:

    1. Windows 编程风格
    2. C/C++ 编程风格

    这两种风格的典型意义是:

    _TCHAR *buf = _T("hello");

    or

    LPTSTR lpBuf = TEXT("hello");

    TEXT() 宏定义在 Windows 的头文件 WinNT.h 里,_T() 宏定义 Visual VC/C++ 的头文件 tchar.h,因此:TEXT() 代表了windows 编程风格,_T() 代表了 C/C++ 风格。

     

    WinNT.h 头文件里,使用 UNICODE 定义:

       1: #ifdef UNICODE
       2: ... ...
       3: #define __TEXT(quote) L##quote 
       4: /* for UNICODE */
       5: ... ...
       6: #else
       7: ... ...
       8: #define __TEXT(quote) quote 
       9: /* for ANSI */
      10: ... ...
      11: #endif
      12: #define TEXT(quote) __TEXT(quote)

     

    TEXT() 在定义 UNICODE 情况下使用 UNICODE 字符,否则使用 ANSI 字符。

     

    tchar.h 头文件里,使用 _UNCODE 定义:

       1: #ifdef _UNICODE
       2: ... ...
       3: #define __T(x) L##x 
       4: /* for UNICODE */
       5: ... ...
       6: #else
       7: ... ...
       8: #define __T(x) x 
       9: /* for ANSI */
      10: ... ...
      11: #endif
      12: #define _T(x) __T(x)

    在编程中你应该始终保持你的编程风格,建议不要混用 TEXT() 与 _T() 宏,虽然它们结果是一样的。

    然而,在 Windows 上编程,我建议你始终保持 windows 编程风格,与系统保持一致性。

    因此,我建议:使用 TEXT() 宏。

  • 相关阅读:
    cef 依赖的文件 libcef
    ubuntu 添加新分区,并挂载/home
    x509 证书链验证
    chromium调试
    Chromium智能指针使用指南
    具有扩展主密钥时SSL/TLS的主密钥计算
    OpenSSL解惑2:如何强制选择协议的版本
    基于Gmssl的SM2加解密算法Demo
    漫谈TLS nonce
    VS2015动态库静态加载时指定动态库位置的方法
  • 原文地址:https://www.cnblogs.com/qinfengxiaoyue/p/2519693.html
Copyright © 2011-2022 走看看