语句和表达式的概念
C语言中由一个分号;隔开的就是一条语句
printf("Hello!\n");
1+2;
C语言中,用各种操作符把变量连接起来,形成有意义的式子,就叫做表达式
1+2
if语句的多种语法结构
1.if语句
if(表达式) 语句;
2.if - else语句
if(表达式) 语句1; else 语句2;
3.if - else if - else语句
//多分支 if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;
注释的便捷方法(环境vs)
1.先按ctrl + k,再按ctrl + c
2.采用if(0)注释 -- 不推荐
同时我们还可以从上面得出一个结论:非0为真,0为假
if语句执行的过程
#include
int main()
{
int flag = 1;
if (flag == 1)
printf("hello world\n");
return 0;
}
#include
int isEmpty()
{
printf("某种数据结构是否为空!\n");
return 1;
}
int main()
{
if ((isEmpty()) == 1)
printf("yes\n");
return 0;
}
1.先执行()中的表达式或者函数,得到真假结果
2.条件 判定功能
3.进行 分支功能
逻辑与&& 逻辑或|| 运算关系的顺序
总结:从左到右。
else的匹配原则
我们来看看下面的代码运行结果是啥?
相信我们很多人看到这里,由于x等于0,而不等于10,所以来到else打印hello yesterday!但其结果其实是什么也不打印,这里是因为else是与离他最近的if匹配的,由于x不等于10,所以里面的if-else语句没有执行,所以也就不会打印啦。我们来验证一下,在与if(x==0)后面加一个与之匹配的else语句。
总结:以后写if_else时,建议带上{ },这样不仅不容易出粗,而且代码的可观性也比较好。
再来看一个代码
#include
int main()
{
int flag = 0;
if (flag == 1);
{
printf("why you can see me?\n");
}
return 0;
}
C语言有没有布尔类型
bool 类型只有两个值:true 和 false。上面我们写的if()语句中非0为真,0为假,是因为C语言没有提供bool类型,而且我们也知道if()只有是条件表达式为真我们才执行,所以我们一般都写if(1),而不写if(true)。
当我们写if(true)或者定义bool类型的变量时,编译器也提示出来为定义的标识符,说明编译器不认识它们,证明C没有提供bool类型。
C99标准
但其实C语言时是有bool类型的,只不过我们编译器目前采用的是C89 or C90的标准,而在C99中引入了_Bool类型,它是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了bool,为了保证C/C++兼容性。引入头文件stdbool.h,程序就没有错误了。
sizeof(bool)的值为多少?
在 C 语言标准中,bool 类型是由 stdbool.h 头文件引入的。bool 通常被定义为枚举类型,其中 false 的值为 0,true 的值为 1。因此,sizeof(bool) 的值在 C 语言标准中并没有规定。 一般情况下,sizeof(bool) 的大小应该是 1 字节,因为 bool 类型只需要存储一个二进制位(0 或 1)来表示 true 或 false。但是,具体的实现方式可能会因编译器和操作系统的不同而有所不同。
_Bool原码
BOOL、TRUE、FALSE
#include<stdio.h> #include<windows.h> int main() { BOOL x = TRUE; x = FALSE; }
这里的BOOL实际上是一个重命名 - typedef int BOOL; 这里我们可以证明一下
sizeof(BOOL)的值为多少?
BOOL与bool的区别
我将BOOL转到定义后,发现开头有这么一串注释,这样他们的区别就很明显了。
由上面的图片可以得到,BOOL是微软帮我们设计的,我们只能在微软的对应的开发工具才能使用BOOL,BOOL是微软的标准(不推荐,可移植性较差),而bool是通用的。
总结:
1.优先使用C90,就是我们之前用的非0为真,0为假。
2.一定要使用bool类型,优先使用bool,不推荐BOOL(可移植性较差)。
learn_C_deep_6 (布尔类型、布尔与“零值“、浮点型与“零值“、指针与“零值“的比较)(下):https://developer.aliyun.com/article/1424517