简介
#pragma region 是VS(Visio Studio)所特有的预处理语法(其他IDE或者Cmake会报错),其可以用来收缩或者展开一段代码。
#pragma region MyRegion
// ...Code content
#pragma endregion
其中,MyRegion 即给这代码块所定义的名字,后面也可以尾随注释。
VS IDE效果展示
其作为用来收缩或者展开一段代码的代码块,主要就是用于提高代码的模块度和易读性。下面来个简单的效果展示。
这里,笔者将一个简单的交互式程序进行了逻辑模块化,当然不完全(例如没写数据存储模块,因为我只是写个示例)。这里呢,实际上每个region代码模块名是可以写成中文的,但是出于我的代码习惯,还是喜欢用英文命名,中文注释。
然后,我们来看看对这些代码块进行折叠后会是什么样子,通过点击左边的减号就可以实现代码折叠:
可以看到代码块下的代码都被折叠到了一起。只剩下代码模块名和后面的注释。这里可能就有同学会说第70行后面的注释不工整了,这是由于文本缩进问题造成的,要避免这个问题的话,可能只有不要这个注释,或者将这个注释写到代码块内或者前面了。
鼠标悬停在收缩的代码块上,也可以看到代码块中的内容:
进行全部收缩后就只剩这样了:
业务关系一目了然,在VS阅读下很方便。
用其他IDE编译 #pragma region报错,如何避免?
作为程序员,我们除了看到自己的问题,还要考虑别人(同事等)的问题。例如,我用的VS,测试部门用的Clion啥的,或者其他组的同事需要移植你的库,就很容易“你这代码怎么回事,怎么报这么多错捏?”。一看都是无法识别#pragma region。
这其实是我自己在做项目的时候发现的问题:JetsonNano下我一直用的CMake编译的,其无法识别这个语法,所以特写此篇。也是希望同学们不要遗忘了这个代码块这个功能。
为了告诉编译器,我们这个要用VS才能编译,我们可以在写这个功能库的时候,多做一下编译器的判断,那当然是用宏定义咯:
折叠后效果:
但是这也有个问题,就是有 #ifdef 啥的,也算是不太美观。
总结
#pragma region 的用法和效果算是挺不错的,就是有个协同开发上不太友好之类的问题(主要看你是那种程度的协同吧)。这种实现代码块的办法还是有不少的,例如直接用大括号{},或者#if语句。都是可以的,还是看个人风格吧。