#undef用于关闭先前定义的#define预处理器指令。例如,假设你有一个源文件,其中包含以下代码:
这是一种技术(称为脚手架,记得吗?),你以前使用过它将调试代码切换到程序中。如果源包含:
#define DEBUG 1
在源文件的顶部,两个Serial.print()调用被编译到程序中。
现在,假设包含调试代码的函数名为ReadSensorCounter(),并且你终于有了完美的函数。你可以通过简单的操作“关闭”调试代码删除或注释掉程序中的#define DEBUG 1行。如果不再查看#define for DEBUG,预处理器不会编译Serial.print()到程序中。(www.xing528.com)
但是,这并不是一个最佳的解决方案,因为在其他系统中可能还有部分源文件要做更多的调试。如果是这种情况,则剪切并粘贴ReadSensorCounter()函数源将代码添加到源代码文件的末尾,并在源文件的正上方添加一个#undef,如下所示:
当预处理器看到#undef指令时,它将从其#定义列表中删除DEBUG。但是,由于#undef位于源文件的底部,所有其他#define DEBUG scaffolding代码都会编译到程序中,调试仍然在#undef指令点上方的任何地方定义。因此,#undef指令提供了一种取消定义先前定义的预处理器指令的方法。通过将已调试函数的源代码移到#undef指令之后,你可以在脚手架代码中留下你仍然需要的未调试代码,而不会将调试语句与已运行代码中的输出语句混在一起。
如果接下来发生了什么事情,ReadSensorCounter()函数再次启动,那么只需删除#undef,并且在下次点击compile按钮时,Serial()语句会自动重新编译回程序中。通过使用#undef指令,你不必重新在Serial()语句中再次插入代码。尽管#undef可以用于其他目的,但在程序中切换脚手架代码是一种相当常见的用法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。