提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
MDK对预编译部分的代码有效性没有直观的检测显示。本文提出了一个解决办法。
一、问题的提出
在一些功能强大的编辑器中,对于预编译部分的代码是否有效,是有智能检测显示的,比如在VScode中,无效部分是显示为灰色,见下图所示:
但是在MDK中,没有这种功能。因为类似#define TEST 0这种预编译往往在其他位置,甚至是在其他文件中,所以很容易导致是因为预编译的问题,程序未能按照设计者设想得那样工作,而且没有直观显示,不方便查错。见下图所示:
下面介绍个方法,来确定是否运行了预编译中的代码。
二、问题的解决
利用#error
以上述代码为例,假如实际是需要运行TEST==1部分,示例代码如下:
//error test task
#define TEST 0
void test_task(void *pvParameters)
{
#if TEST==1
//code
int a = 0;
a += 1;
#else
//code
int b = 1;
b += 2;
#error TEST!=1
#endif
}
这里故意设置TEST 为0,结果如下:
将TEST的值改为1
//error test task
#define TEST 1
void test_task(void *pvParameters)
{
#if TEST==1
//code
int a = 0;
a += 1;
#else
//code
int b = 1;
b += 2;
#error TEST!=1
#endif
}
其他情况也类似,适当修改下即可。
总结
可见利用#error能提示程序员预编译有效性情况。