前两天刚看书看到的,来这里跟大家分享一下有关C#处理指令的问题

前两天刚看书看到的,来这里跟大家分享一下,

这些东东就是C# 预处理器的指令了,在我们编译的时候会很有用处.
在处理之前要先定义的一个符号,可以在后面根据条件进行编译,
#define
这便是定义指令.必须在文件的开始处定义才行,不然是产生编译错误
如下定义

None.gif   #define  first
None.gif 
#define  Debug
None.gif 
None.gif
using  System;

在定义以后我们就要来进行条件设置了,不然就达不到效果,呵呵,
注意: #define 定义的符号在后面的条件计算是为 true
如:

None.gif   #define  first
None.gif 
#define  Debug
None.gif 
None.gif
using  System;
None.gif
None.gif
namespace  Control1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif   
#if first
InBlock.gif   Console.WriteLine(
"Hello World first!");
InBlock.gif   
#else
InBlock.gif   Console.WriteLine(
"Helleo World other!");
InBlock.gif   
#endif
ExpandedSubBlockEnd.gif  }

ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif}

None.gif


这样的结果是:Hello World first!在这里我们用到了#else这个跟条件语句里的else上一样的.
因为在开始的时候我们定义了first这个符号.从上面可以看出first是作为布尔变量来计算的.
现在我们将这段代码变换一下

None.gif   #define  first
None.gif 
#define  Debug

None.gif using  System;
None.gif
None.gif
namespace  Control1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
#if (first && Debug)
InBlock.gif            Console.WriteLine(
"Hello World Yes all!");
InBlock.gif            
#elif (!first && Debug)
InBlock.gif            Console.WriteLine(
"Helleo World no first!");
InBlock.gif            
#elif (first && !Debug)
InBlock.gif            Console.WriteLine(
"Helleo World no Debug!");
InBlock.gif            
#else
InBlock.gif            Console.WriteLine(
"Helleo World no all!");
InBlock.gif            
#endif
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}


这里看到的效果是:Hello World Yes all!
上面用到了#elif这相当于条件语句里的 else if
接下来我们看看#undef

None.gif   #define  first
None.gif 
#define  Debug
None.gif 
#undef  Debug
None.gif
using  System;
None.gif
None.gif
namespace  Control1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
#if (first && Debug)
InBlock.gif            Console.WriteLine(
"Hello World Yes all!");
InBlock.gif            
#else
InBlock.gif            Console.WriteLine(
"Hello World No all!");
InBlock.gif            
#endif
ExpandedSubBlockEnd.gif        }

InBlock.gif        
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}


现在看到的结果是:Hello World No all!
为什么,呵呵.是因为我们写了#undef取消了对Debug的定义,也就是说Debug已经不起作用了,
接下来该#warning上场了,故名思义,就是在编译的时候产生警告信息.

None.gif   #define  first
None.gif 
#define  Debug
None.gif 
#undef  Debug
None.gif
using  System;
None.gif
None.gif
namespace  Control1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
#if first
InBlock.gif            Console.WriteLine(
"Hello Word!");
InBlock.gif            
#warning Hello first
InBlock.gif            
#endif
ExpandedSubBlockEnd.gif        }

InBlock.gif        
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

if.GIF 

可以看到有Hello Word!
在下面的信息框里可以看到警告信息,编译是已经通过了,
下面继续看其它的指令:#error这是一个产生错误信息的指令如下
None.gif   #define  first
None.gif 
#define  Debug
None.gif 
#undef  Debug
None.gif
using  System;
None.gif
None.gif
namespace  Control1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
#if first
InBlock.gif            Console.WriteLine(
"Hello Word!");
InBlock.gif            
#error Hello first
InBlock.gif            
#endif
ExpandedSubBlockEnd.gif        }

InBlock.gif        
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}


这里就看不到输入的字符了,不过可以在消息框里看到下面的信息
elif.GIF

现在来看看#line指令

None.gif using  System;
None.gif
None.gif
namespace  Control1
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif 
class MainClass
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  
public static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif  
dot.gif{
InBlock.gif    
#line 200
InBlock.gif        
int i;
InBlock.gif        
#line default
InBlock.gif       
char c;
InBlock.gif
ExpandedSubBlockEnd.gif  }

InBlock.gif  
ExpandedSubBlockEnd.gif }

ExpandedBlockEnd.gif}

None.gif


这样可以看到消息框有台下信息
line.GIF
#line的功能就显而易见了,他就是将默认的行号改成自己定义的行号.#line后面跟default则是将现在的行号恢复至原来的行号
但是它还有一个功能就是可以隐藏某行代码,这是SDK里对它的解释

下面的示例说明调试器如何忽略代码中的隐藏行。运行此示例时,它将显示三行文本。但是,当设置如示例所示的断点并按 F10 键逐句通过代码时,您将看到调试器忽略了隐藏行。另请注意,即使在隐藏行上设置断点,调试器仍会忽略它。]

None.gif       Console.WriteLine( " Normal line #1. " );    //  Set a break point here.
None.gif
       #line  hidden
None.gif      Console.WriteLine(
" Hidden line. " );
None.gif      
#line  default
None.gif      Console.WriteLine(
" Normal line #2. " );
None.gif


这段代码在运行后虽然可以看到有三行输入,但是在调试的时候可以发现第二行根本就没有被调试到.
还有最后两个指令了,
#region
#endregion
这两个我想大家都非常熟悉了吧

现在看到的结果是:Hello World No all! 为什么,呵呵.是因为我们写了#undef取消了对Debug的定义,也就是说Debug已经不起作用了, 接下来该#warning上场了,故名思义,就是在编译的时候产生警告信息.   可以看到有Hello Word! 在下面的信息框里可以看到警告信息,编译是已经通过了, 下面继续看其它的指令:#error这是一个产生错误信息的指令如下

现在看到的结果是:Hello World No all! 为什么,呵呵.是因为我们写了#undef取消了对Debug的定义,也就是说Debug已经不起作用了, 接下来该#warning上场了,故名思义,就是在编译的时候产生警告信息.   可以看到有Hello Word! 在下面的信息框里可以看到警告信息,编译是已经通过了, 下面继续看其它的指令:#error这是一个产生错误信息的指令如下

转载于:https://www.cnblogs.com/laihua/archive/2005/01/21/95511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值