Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2313628
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2009-05-26 21:44:20

C# 中有
#region
#endregion 
两个预处理符号, 这是在大量回避C/C++ 预处理能力及误用带来的麻烦中, 反而新添加的一个预处理符号. 在C#中很有用. MS 的IDE也会用它来标识自动生成的代码, 如Form 代码中的 InitializeComponent, Dispose方法等.

所幸, VC中也有了类似的东西:
#pragma region
#pragma endregion
使用起来与C#一样, region 后面跟任意的字符串. 而且region和endregion 后面的字符串不要求一致.

VC通过#pragma来提供这一功能是有意避免与其它编译器的不兼容, 反正#pragma是语言标准默许的恣意发挥的一个地方.

不幸地是, 这个通过#pragma提供的 region, 竟然不能用CTRL+] 在region和endregion 之间切换. 用的是VS2008, 标准版, 装了R#和VA, TestDriven几个插件. C#中的#region和 #endregion之间是可以通过以上快捷键切换的.

不过, 用最原始的C/C++预处理实现的变相region功能, 也可以被VC的编辑器支持的良好, 而且, 可以在块的头尾之间跳转.

#pragma region 还有细节上的其它不爽之处: 折叠起来之后, 上图中两个红色框中显示着相同的提示串, 有啥用?

蓝色线之下的是用最朴素的#if / #endif实现的, 折叠之后显示的提示也有理性的表现.

注意#if 只接受简单的整数运算和布尔运算, 不能象在运行期指望指针类型会自动转换为bool那样直接写一个字符串, 如
#if "region: test"
...
#endif

这是通不过编译的, 上面的实现利用了一点小技巧: 把描述性的region字符串写在注释中, 并且位于常量1之前, 这样才能保证折叠起来之后你仍然能看见注释里的字串.
阅读(5222) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~