面向对象(三十三)-预处理指令

2018-04-12  本文已影响38人  元宇宙协会
预处理指令
UNITY_EDITOR 编辑器调用。

UNITY_STANDALONE_OSX 专门为Mac OS(包括Universal,PPC和Intelarchitectures)平台的定义。

UNITY_DASHBOARD_WIDGET Mac OS Dashboard widget (Mac OS仪表板小部件)。

UNITY_STANDALONE_WIN Windows 操作系统。

UNITY_STANDALONE_LINUX Linux的独立的应用程序。

UNITY_STANDALONE 独立的平台(Mac,Windows或Linux)。

UNITY_WEBPLAYER 网页播放器(包括Windows和Mac Web播放器可执行文件)。

UNITY_WII Wii游戏机平台。

UNITY_IPHONE iPhone平台。

UNITY_ANDROID Android平台。

UNITY_PS3 PlayStation 3。

UNITY_XBOX360 Xbox 360。

UNITY_NACL 谷歌原生客户端(使用这个必须另外使用UNITY_WEBPLAYER)。

UNITY_FLASH Adobe Flash。
Unity游戏开发过程中的平台选择
   // 选择编译平台
    private string[] arrBuildTarget = { "Windows", "Android", "iOS" };
    // 编译平台   BuildTarget 是系统类
#if UNITY_STANDALONE_WIN   // Windows
    private BuildTarget target = BuildTarget.StandaloneWindows;
    // 这里表示你选中arrBuildTarget 哪一项
    private int buildTargetIndex = 0;
#elif UNITY_ANDROID   // 安卓
      private BuildTarget target =BuildTarget.Android;
    // 这里表示你选中arrBuildTarget 哪一项
    private int buildTargetIndex =1;
#elif UNITY_IPHONE  // iPhone
      private BuildTarget target =  BuildTarget.iOS;
    // 这里表示你选中arrBuildTarget 哪一项
    private int buildTargetIndex =2;
#endif
define指令,可以把它看做成声明一个变量
define指令必须在代码文件中的第一句。
没有分号作为结束标记。
单独使用是没有任何意义的,但是和#if #elif #else #endif一起使用就截然不同了。
#define MyCount
#define UNITY5_6
using System;

namespace 预处理指令
{
    class Program
    {
        static void Main(string[] args)
        {
#if (MyCount && UNITY5_6)
            Console.WriteLine("MyCount is defined");
#else
            Console.WriteLine("MyCount is not defined");
#endif
            Console.WriteLine("123");
            Console.ReadKey();
        }
    }
}
#if symbol [operator symbol]...
#define DEBUG
#define A
#define B
#define C
using System;

namespace 预处理指令
{
    class Program
    {
        static void Main(string[] args)
        {
#if (A)
            Console.WriteLine("A");
#elif (B)
            Console.WriteLine("B");
#endif
            Console.ReadKey();
        }
    }
}

关于全局预处理指令的设置


预处理指令 全局设置
            #region 操作
            // 代码块写到两者中间即可
            Console.WriteLine("操作");
            #endregion
效果
#error "此处预估会有错误"
            Console.WriteLine("这里会抛出错误");
#warning "此处预估会有警告"
            Console.WriteLine("这里会抛出警告");
可以在后面写一些错误提示
#error
            Console.WriteLine("这里编译前会抛出错误,可以将开发中一些不确定的代码块写一下注释");
#warning
            Console.WriteLine("这里编译前会抛出警告,可以将开发中一些不确定的代码块写一下注释");

#line 指令可能由生成过程中的自动中间步骤使用。例如,如果行从原始的源代码文件中移除,但是您仍希望编译器基于文件中的原始行号生成输出,则可以移除行,然后用 #line 模拟原始行号。
#line hidden 指令对调试器隐藏若干连续的行,这样当开发人员在逐句通过代码时,将会跳过 #line hidden 和下一个 #line 指令(假定它不是另一个 #line hidden 指令)之间的所有行。此选项也可用来使 ASP.NET 能够区分用户定义的代码和计算机生成的代码。尽管 ASP.NET 是此功能的主要使用者,但很可能将有更多的源生成器使用它。
#line hidden 指令不会影响错误报告中的文件名或行号。即,如果在隐藏块中遇到错误,编译器将报告当前文件名和错误的行号。
#line filename 指令指定您希望出现在编译器输出中的文件名。默认情况下,使用源代码文件的实际名称。文件名必须括在双引号 ("") 中。
源代码文件可以具有 #line 指令的任何编号。

using System;
class MainClass 
{
    static void Main() 
    {
        Console.WriteLine("Normal line #1."); // Set break point here.
#line hidden
        Console.WriteLine("Hidden line.");
#line default
        Console.WriteLine("Normal line #2.");
    }
}
#pragma warning disable warning-list  
#pragma warning restore warning-list  
pragma-name
可识别杂注的名称。

pragma-arguments
杂注特定的参数。
上一篇下一篇

猜你喜欢

热点阅读