跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
捷比信电阻高精密 · 大功率无感 · 金属膜电阻

三种“最常见”的预编译器包括:但“最不常用”表示

1#error和#warning谈论预编译。常用的条件编译选项是#if,#else,#ifdef,#ifndef,#endif等。但是,当我们阅读一些大型代码或库时,通常会看到#error和#warning。一些朋友可能已经对其进行了扫描,但不清楚如何使用这些预编译的说明。我猜已经写了很长时间的代码了,我再也没有敲过它们。 #error /#warning形式:#error /#warningmessage功能:生成编译错误事件并停止编译/发出警告消息。注意:消息不需要双引号。参考演示:#include#include //#defineconfigUART_N5#ifndefconfigUART_N#errorconfigUART_Nmustdefine //#error“ configUARTmustdefine” //#warning“ configUARTmustdefine”#endif#ifconfigUART_N> 4#errorconfigUART_N不得超过4 / ## *******************************************功能:执行预编译测试*作者:(最后一个错误)************************************** / intmain(intargc,char * argv [ ]){printf(“正式帐户;最后一个错误”); return0;}输出:编译失败,无法生成可执行文件。上面是放开宏并使用警告,没有其他错误在这种情况下,可以生成可执行文件。说明:通过以上测试代码,我们可以了解到,通过预编译#if等,#error和#warning可以提醒开发人员在编译过程中以错误和警告的形式关注相关的代码设计问题,从而确保代码的正确性。这样,在发布一些巨大的库代码时,为了使开发人员能够正确使用库,这些技巧将帮助他更好地移植代码。因此,许多小伙伴编译的代码中经常会有很多警告。他们总是觉得警告不相关。但是,警告也分为不同的类型。一些未使用的变量不相关。其他情况应认真对待。好东西是实现“ 0Error,0warning”。 2#undef#undef标识符用于取消以前的宏定义名称,不要看这个宏使用不多,它可能非常有用,让我举几个简单的例子:一旦本地宏定义定义好宏,即使在函数内部,文件中的所有代码也可以使用该宏,这会导致宏的混乱,例如以下代码:请参阅演示:#include#include#defineconfigRatio10 / ** *** ***************************************功能:获取传感器电压值*作者:(最后一个错误) ********************************************** / intGetSensorVolt(void){#defineconfigRatio1intret = 0; ret = configRatio * 1024; //比例因子* AD值returnret; // ## undefconfigRatio} / ****************************** ** ************功能:获取传感器电压值*作者:(最后一个错误)********************** ** ************** / intGetSensorCurr(void){#defineconfigRatio2intret = 0; ret = configRatio * 1024; //比例因子* AD值returnret; //#undefconfigRatio} / ** ** *********************** *************功能:执行预编译测试*作者:(最后一个错误)********************* *************** / intmain(intargc,char * argv []){printf(“ configRatio =%d”,configRatio); //未定义报告宏printf(“ ; GetSensorVolt =%d“,GetSensorVolt()); printf(” GetSensorCurr =%d“,GetSensorCurr()); printf(”官方账号;最后一个错误“); return0;}输出:说明:如果我们没有注意到函数内部具有相同名称的宏定义,那么警告当然会被忽略,则在主函数中使用相同名称的宏定义可能不是我们期望的那样。顶部的宏定义会导致程序错误。因此,我们可以使用#undef来限制每个宏的范围。如果在每个函数中使用#undef,则在主函数中未定义report宏,因此可以发现问题。当然,您也可以通过警告To来理解。 2选择该接口,以通过宏在要使用的程序的不同接口之间进行切换:请参阅演示:#include#include#include#defineDEV_SPI#include“ Drive.h” #undefDEV_SPI / ********* ****** *****************************功能:执行预编译测试*作者:(最后一个错误)***** ****** ******************************* / intmain(intargc,char * argv []){char * strbug =&quot ; thelastbug“; SendData(strbug); ProcessData(strbug); printf(” public account; last bug“); return0;}#include#ifdefDEV_UART#defineSendData(s)printf(” UARTSend:%s“,s) #defineProcessData(s)printf(“ UARTProcess:%s”,s)#endif#ifdefDEV_CAN#defineSendData(s)printf(“ CANSend:%s”,s)#defineProcessData(s)printf(“ CANProcess:% s'',s)#endif#ifdefDEV_SPI#defineSendData(s)printf(“ SpiSend:%s”,s)#defineProcessData(s)printf(“ SpiProcess:%s”,s)#endif输出结果:3自定义界面当多个人维护一组代码时,一些同事