大佬教程收集整理的这篇文章主要介绍了条件执行不适用于这种代码情况?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么#ifdef INITIAliSATION
和#endif
里面的代码没有执行?
int main(voID)
{
uint8_t DLEVEL = 10;
#if DLEVEL > 5
#define INITIAliSATION
#endif
while (1)
{
#ifdef INITIAliSATION
display(); // This line is never being execuTing :: please Help for a solution
#endif
}
}
已编辑...
感谢回复
实际上下面提到的代码逻辑被用作我的代码内存优化的一部分。
现在代码内存溢出了,所以我需要在 Sym_DLEVEL
值为 10
时执行一次初始化,然后 Sym_DLEVEL
的值从 10 to 2
更改,然后我需要自动评论或禁用的初始部分,然后只有display_2()
功能需要启用并需要执行。
可能吗?
#define Sym_DLEVEL 10
int main(voID)
{
#if Sym_DLEVEL > 5
display_1(); // need to execute this line once(before the value changes from 10 t0 2)
#endif
#define Sym_DLEVEL 2 // after this line execution i need to automatically disable the above section and automatically enable the below section
#if Sym_DLEVEL < 5
#define INITIAliSATION // need to execute only when value changes from 10 to 2
#endif
while (1)
{
#ifdef INITIAliSATION
display_2();
#endif
}
}
它不执行代码,因为预处理器在编译器中运行,而局部变量 DLEVEL 在执行过程中被赋值。
预处理器只是寻找一个明显未定义的预处理器符号DLEVEL
。
未定义的符号等于 0,因此符号 INITIALISATION
未定义。
为了使其工作,定义一个预处理器符号,即 Sym_DLEVEL
,用于条件预处理,并最终将其分配给运行时变量。即
#define Sym_DLEVEL 10
int main(void)
{
uint8_t DLEVEL = Sym_DLEVEL;
#if Sym_DLEVEL > 5
#define INITIALISATION
#endif
while (1)
{
#ifdef INITIALISATION
Display(); // This line is now is executed
#endif
}
}
请记住,预处理或多或少是一个文本处理器(它根据文本的基本片段、标记进行操作,如下面的评论中所述),并且在代码编译之前执行。它不知道运行时变量及其赋值,它只知道用预处理器指令 (#define
) 定义的符号。
不要将编译器执行的死代码删除或其他优化等操作与预处理器可以执行的操作混淆。黄金法则是:“预处理只理解预处理对象,C 代码是纯文本,没有任何特殊含义”。
以上是大佬教程为你收集整理的条件执行不适用于这种代码情况?全部内容,希望文章能够帮你解决条件执行不适用于这种代码情况?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。