欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VS软件设置中的宏定义

程序员文章站 2022-06-08 17:34:10
...

VS软件中路径名称的宏定义:

说明
$(ConfigurationName) 当前项目配置的名称(例如,“Debug
$(OutDir) 输出文件目录的路径,相对于项目目录。这解析为“输出目录”属性的值。它包括尾部的反斜杠“\”
$(DevEnvDir) Visual Studio 2005的安装目录(定义为驱动器 +路径);包括尾部的反斜杠“\”
$(PlatformName) 当前目标平台的名称。例如“AnyCPU”
$(ProjectDir) 项目的目录(定义为驱动器 +路径);包括尾部的反斜杠“\”
$(ProjectPath) 项目的绝对路径名(定义为驱动器 +路径 + 基本名称 + 文件扩展名)
$(ProjectName) 项目的基本名称
$(ProjectFileName) 项目的文件名(定义为基本名称 +文件扩展名)
$(ProjectExt) 项目的文件扩展名。它在文件扩展名的前面包括“.”
$(SolutionDir) 解决方案的目录(定义为驱动器 +路径);包括尾部的反斜杠“\”
$(SolutionPath) 解决方案的绝对路径名(定义为驱动器 +路径 + 基本名称 + 文件扩展名)
$(SolutionName) 解决方案的基本名称
$(SolutionFileName) 解决方案的文件名(定义为基本名称 +文件扩展名)
$(SolutionExt) 解决方案的文件扩展名。它在文件扩展名的前面包括“.”
$(TargetDir) 生成的主输出文件的目录(定义为驱动器 +路径)。它包括尾部的反斜杠“\”
$(TargetPath) 生成的主输出文件的绝对路径名(定义为驱动器 +路径 + 基本名称 + 文件扩展名)
$(TargetName) 生成的主输出文件的基本名称
$(TargetFileName) 生成的主输出文件的文件名(定义为基本名称 +文件扩展名)
$(TargetExt) 生成的主输出文件的文件扩展名。它在文件扩展名的前面包括“.”



VS软件中编译运行的宏定义

  • 1._DEBUG 用来指示 当前编译是rlease 还是debug ,可用这个宏定义 来区分d ,r库文件的链接

  • 2.判断是32位编译还是64位编译。

    在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。在 x64 配置下,两者都有定义。即在 VC 下,_WIN32 一定有定义。
    因此,WIN32/_WIN32 可以用来判断是否 Windows 系统(对于跨平台程序),而 _WIN64 用来判断编译环境是 x86 还是 x64。

  • 3.判断是 unicode(同一为宽字节) 还是 多字节(包含1个字节和2个字节的情况)
    _UNICODE 来进行区分
    常用的unicode方面的宏定义 :

     #ifdef  _UNICODE                   
     typedef wchar_t TCHAR ;
     #else 
     typedef char TCHAR ;
     #endif
    

    _TEXT (“Hello!”) , _T (“Hello!”) , TEXT (“Hello!”) , L (“Hello!”)

    UNICODE在很多头文件中和_UNICODE一样用来解析TCHAR等类型是宽字符还是单字节字符,例如WINNT.H中:

    #ifdef  UNICODE                   
    typedef WCHAR TCHAR, * PTCHAR ;
    typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;
    typedef LPCWSTR LPCTSTR ;
    #else 
    typedef char TCHAR, * PTCHAR ;
    typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;
    typedef LPCSTR LPCTSTR ;
    #endif
    

    同时用来选择字符处理函数,例如WINUSER.H中:

    #ifdef UNICODE
    #define MessageBox  MessageBoxW
    #else
    #define MessageBox  MessageBoxA
    #endif 
    

    这 样,我们只用一种类型(比如TCHAR)和一组函数(比如MessageBox)就方便地可以处理两种编码的程序,而不用去条件判断应该用char还是 wchar_t,应该用MessageBoxA还是MessageBoxW。这些细节Windows.h等头文件中已经为我们考虑了,我们要做的只是在需 要用Unicode时定义两个符号。

    而另一方面,Windows.h经过辗转#include,又将WINNT.H、WINUSER.H 等很多头文件包含了进去,很多地方还有重复交叉的(当然用条件编译过滤过了),所以两个符号(UNICODE、_UNICODE)都要定义,否则像上面少 定义了一个的话,结果将很难预料。总结:有了这些以就可以通过宏(也就是像:_T,LPTSTR,LPCTRSTR之类的带有T这个标志的)来再ASCII和UNICODE之间转换了。程序可移植性很强了。

相关标签: VS