第1个回答 2022-11-26
(1)⾸先,if是条件语句,#if是预处理指令,功能相同,执⾏的时期不同
(2)举例1:
#define A 2
#if A==2
void foo()
{
printf("A == 2");
}
#else
void foo()
第 1 页
上汽大众威然 Viloran,您的大V生活
订购威然,至高购置税减免75%,至高5年0利率,10,000元置换补贴
点击立即咨询,了解更多详情
咨询
上海上汽大众汽车销售 广告
{
printf("A != 2");
}
#endif
int main()
{
foo();
}
举例2:
这样会输出 A == 2
如果改变#define A 2就可能会输出A != 2
第 2 页
#if.
a
#else
b
#endif,其实这个就是选择编译那部分,和if-else的区别就是:编译的时候进⾏选择的,如果是a的话,b那么就根本不去编译,⽽if-else是全部编译好的,然后再去运⾏
那么问题来了,⽤#if #else的预处理⽅式,如果是a的话,那么在程序运⾏中,条件满⾜else了,那么会执⾏b吗??
答案是:不会,原因在(3)中解释
(3)#if的作⽤:有些程序在调试、兼容性、
第 3 页
平台移植等情况下可能想要通过简单地设置⼀些参数就⽣成⼀个不同的软件,这当然可以通过变量设置,把所有可能⽤到的代码都写进去,在初始化时配置,但在不同的情况下可能只⽤到⼀部分代码,就没必要把所有的代码都写进去,就可以⽤条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。
所以,⼀旦预处理条件部分编译后,在运⾏中只执⾏符合条件的部分代码块
即可以设置不同的条件,在编译时编译不同的代码,预编译指令中的表达式与C语⾔本⾝的表达式基本⼀⾄如逻辑运算、算术运算、位运算等均可以在预编译指令中使⽤。之所以能够实现条件编译是因为预编译指令是在编译之前进⾏处理的,通过预编译进⾏宏替
第 4 页
换、条件选择代码段,然后⽣成最后的待编译代码,最后进⾏编译。
#if 的⼀般含义是如果#if 后⾯的常量表达式为true,则编译它所控制的代码,如条件1成⽴时就代码段1,条件1不成⽴再看条件2是否成⽴,如果条件2成⽴则编译代码段2,否则再依次类推判断其它条件,如果条件1-N都不成⼒则会编译最后的代码段n+1。
(4)#if的好处: 系统裁剪
系统裁剪是针对系统的⽤途,对系统的源代码进⾏⼀下优化,减少不必要的功能。
/*--------------------------------------------------------------------*/
#include“stdio.h”
第 5 页
#define TEST_2 1
int main()
{
int a=11;
#if TEST_2
int *b=&a;
*b = 10;
#endif
a++;
}
/*----------------------------------------------------------------------*/
第 6 页
如上⾯的例⼦,对于某些功能不需要,我们只需对于的功能TEST_2的宏定义改成0,然后重新编译就⾏了。当然⼀般宏定义是放在⼀个特定的⽂件(这⾥为了简单就写在⼀起),这样外⾯的⼈只需要更改那个⽂件所对应的值就⾏对系统进⾏裁剪⽽不需要关⼼具体代码,就⾏实现裁剪。
第 7 页
百度文库
搜索
stm32和if的区别
第2个回答 2022-11-26
stm32和if的区别:
(1)⾸先,if是条件语句,#if是预处理指令,功能相同,执⾏的时期不同
(2)举例1:
#define A 2
#if A==2
void foo()
{
printf("A == 2");
}
第 1 页
#else
void foo()
{
printf("A != 2");
}
#endif
int main()
{
foo();
}
第3个回答 2022-11-26
stm32和if的区别是,stm32的长度更长,if的长度更短
第4个回答 2022-11-26
区别是,if是条件语句,#if是预处理指令,功能相同,执行的时期不同。