#if 0 有什么作用

电器工程 图片 C 编译器 配置
2022-01-15 22:44:27

今天我开始使用 MPLAB X 对我的 PIC 进行编程,并找到了一个代码模板,有多个文件和点来填充代码。在我有一个包含我的代码的文件之前。在这个模板中,我应该放置我的配置位,有以下文本:

/* TODO Fill in your config bits here.  Remove #if 0 to embed config words.   */

#if 0

/* General syntax for configuration word 1 - Check your device .h file
for an up to date listing of available macros.*/
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF);

/* If the device has multiple configuration words, the second macro defines
the second configuration word.  Again check your device .h file
for an up to date listing of available macros. */
__CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_19 & LVP_OFF);

#endif

我真的不明白“删除#if 0 以嵌入配置词”是什么。意思是......这可能是非常简单的事情。我尝试了谷歌搜索,并搜索了编译器手册,但没有得到任何好的结果。据我所知,#if 0 和 #endif 之间的代码永远不会被编译。这个嵌入是什么意思?它与在代码中设置配置位与之后设置有关吗?

3个回答

扩展一下#if 0:
它本质上是一种允许多行注释的技巧。在编译器之前运行的预处理器将删除#if 0 和匹配的#endif 之间的所有内容。

使用它而不是 /* */ 样式注释的一个原因是,您只需将其更改为“#if 1”即可启用整个块。

据我所知,#if 0 和 #endif 之间的代码永远不会被编译。

是的。

这个嵌入是什么意思?它与在代码中设置配置位与之后设置有关吗?

配置位是 PIC 中的一个特殊编程寄存器,它决定振荡器的操作、掉电检测和其他事情。参考手册之一:(C 中的 __CONFIG 宏映射到汇编中的相应指令)

MPASM 的 CONFIG 指令

Microchip 的汇编器 MPASM 有一个很好的特性,它允许您在源代码文件中指定该程序配置位的选定状态。这确保了在为应用程序编程设备时,所需的配置也被编程。这最大限度地减少了对错误设备配置进行编程的风险,并想知道为什么它不再在应用程序中工作。

你完全正确,#if 0/#endif 之间的代码永远不会被编译。这是注释掉代码块的另一种方式。

删除 #if 0/#endif 将包括 __CONFIG 宏,它将启用 PIC 配置位中的这些位。