#if/#endif与if相比有何不同?
我下面这个教程:#if/#endif与if相比有何不同?
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
int i = 1;
while (true)
{
#if TEST
if (i % 2 == 0)
continue;
#endif
i++;
Console.WriteLine("The value of i is {0}", i);
if (i > 9)
break;
}
Console.WriteLine("The value of i is {0}", i);
Application.Run(new Form1());
}
什么用#if TEST
而不是只if(TEST)
的目的?
当你需要差别不大代码的两个(或更多)版本上是有用的。然后,而不是保持使用编译器指令就像两个项目#if TEST
你写在同一项目两个版本。然后从项目属性中,您可以为TEST设置值,如TEST = true,然后编译该项目。
#if TEST
Console.WriteLine("Hello World!");
#else
Console.WriteLine("Goodbye World!");
#endif
如果TEST =真这就像你只是写:Console.WriteLine("Hello World!");
,反之亦然。
因为使用#IF
将决定代码是否被编译。使用if
将决定代码是否被执行。
似乎有一个在编译时定义的“环境”测试。因此,如果存在这种环境,将会测试并执行:仅打印奇数。
需要注意的重要一点是,编译代码根据TEST
的存在而变化。在“非测试环境”中,当执行应用程序时,甚至不存在即使不存在也不会存在的“0122”。
使用#IF TEST而不仅仅是(TEST)的目的是什么?
TEST
不是一个变量,也不是一个常数。它甚至在运行时不存在。这是一个传递给编译器的标志,因此它可以决定编译某些代码(即将其放入可执行文件中)
如果#if
指令还有其他内容,它可能会更清晰。让我们修改段将:
#if TEST
if (i == 5)
System.exit(1)//Not a c# programmer;
#endif
在这种情况下,存在TEST
,该程序将只循环5次下。在每次迭代中,i
将针对5
进行测试。等一下!!! 它甚至不会编译!
如果TEST
没有定义,那么应用程序将继续,直到达到另一个退出条件。将不会进行i
与5
的比较。 了解更多关于指令here:
#如果,用的#else,#elif指令,#ENDIF和#define #undef指令一起,使您可以包含或排除 基于对 一个存在代码或更多的符号。在编译调试 版本的代码或编译特定 配置时,这可以是 。
这些是编译器常量,例如:
#if DEBUG
Debug.WriteLine("This is written in debug mode");
#endif
如果DEBUG
常量的定义,该代码被编译,如果它不那么它剥离出来,由编译器忽略..这是一种确定某种构建类型中的内容的方法,并将其从另一个构造中剥离出来。
这是通常用于额外的调试类型语句,但它的可扩展性足以有很多应用程序,测试代码在你的情况。
这意味着,如果定义了预处理器变量测试,它有一个非零值的代码会被编译成所得到的程序。您可以通过将
#define TEST 1
到你的程序在#if语句之前定义测试已代码编译。
如果(TEST)将业务拓展到如(1)如果你如上定义的测试。
不完全 - 这是C#,它没有预处理器,不允许你以#定义这样的值。你可以,但是,定义符号的编辑中设置的一部分,在这种情况下'#如果TEST'就像在C/C'的#ifdef TEST' ++。 – 2010-10-05 22:51:06
嗯...这还挺#看起来像在这样一个小的字体大小++ :) – 2010-10-05 23:02:30
你看到的是为编译器编写的宏语言。如果编译器在TEST
模式下工作,这将包括线
if (i % 2 == 0)
continue;
要不然也不会。
这些值通常在项目的属性定义。只需右键单击您的项目,选择“属性”,然后在“编辑”(从内存的工作,在这里;))
下面是一个相关的问题:http://*.com/questions/15744/how-do-you-use-define – 2010-10-05 22:47:47