C和指针 第五章 警告总结
1.有符号的值得右移位操作是不可移植的
2.移位操作的位数是个负数,是未定义的
3.连续赋值的各个变量的长度 不一,导致变量值截断。
#include <stdio.h> int main()
{
char chr_num;
int int_num;
//截断
int_num = chr_num = 100000; return 0;
}
编译器提示:

4.条件语句勿用=代替==
5.勿用 | 代替||, & 代替 &&
6.不同的用于表示布尔值的非零值之间进行比较。
#define FALSE 0
#define TRUE 1 //如果flag为任意整型值,那么下面两个语句是不等价的
if(flag == TRUE)
{
} if(flag)
{
}
避免混合使用整型值和布尔值。
7.表达式赋值的位置并不决定表达式的计算精度。
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数转换为另外一个操作数的类型,否则操作数无法进行。
寻常算术转换
long double
double
float
unsigned long int
long int
unsigned int
int
如果某个操作数排名较低,那么它首先转换为另外一个操作数的类型,然后执行操作。
例如 在16位的机器上
int a = 5000;
int b = 100;
long c = a * b;
会发生溢出,需要将a * b的结果转换为长整型。
int a = 5000;
int b = 100;
long c = (long) a * b;
8.编写结果依赖于求值顺序的表达式
表达式的求值顺序由三个因素影响:
操作符的优先级
操作符的结合性
操作符是否控制执行顺序
操作符的优先级决定了相邻的操作符哪个先被执行,如果优先级相等,那么结合性决定执行顺序,
但是,这些并不能完全决定表达式的求值顺序,编译器只要不违背优先级和结合性规则,可以自由决定复杂表达式的求值顺序。所以如果,表达式的结果依赖于求值顺序,那么,本质上是不可移植的,避免使用。
C和指针 第五章 警告总结的更多相关文章
- C和指针 第五章 位数组
5.4的习题:编写一组函数,实现维数组,函数原型如下: //指定位设置为1void set_bit(char bit_array[], unsigned bit_number); //指定位清零 vo ...
- C和指针 第五章 习题
下列输出的值: #include <stdio.h> int func(){ static int count = 1; return ++count; } int main() { in ...
- C和指针 第五章 逻辑位移与算术位移
对于操作数的左位移都是相同的,右边空出来的位置用0补齐. 但是对于右位移,对于有符号和无符号数是不一样的,最高位的1有两种处理方式.逻辑位移和算术位移. 逻辑位移:右移入位用0补齐 算术位移:右移入位 ...
- C和指针 (pointers on C)——第五章:操作符和表达式
第五章 操作符和表达式 这一章假设没做过玩过单片机.汇编的话,读起来可能比較吃力,尤其是在移位运算符.位运算符应用上.另外多注意一下左值和右值的理解. 总结: 算术操作符.赋值操作符.关系操作符.条件 ...
- 深入理解 C 指针阅读笔记 -- 第五章
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...
- 【C++】《Effective C++》第五章
第五章 实现 条款26:尽可能延后变量定义式的出现时间 只要定义了一个变量而其类型带有一个构造函数或析构函数,那么 当程序的控制流到达这个变量定义式时,你得承受这个构造成本. 当这个变量离开这个作用域 ...
- C和指针 第六章 习题
6.1编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集中出现的字符,返回第一个找到的字符位置指针,未找到返回NULL #include <stdio.h> char * f ...
- 《Linux内核设计与实现》读书笔记 第五章 系统调用
第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用在用户空间进程和硬件设备间添加了一个中间层, 作用:为用户空间提供了一种 ...
- 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳
<Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...
随机推荐
- NOIP模拟赛20161007
%hzwer http://hzwer.com/7602.html 题目名称 “与” 小象涂色 行动!行动! 输入文件 and.in elephant.in move.in 输出文件 and.out ...
- 非常棒的Visual Studo调试插件:OzCode
非常棒的Visual Studo调试插件:OzCode 周银辉 视频介绍 http://channel9.msdn.com/Shows/Visual-Studio-Toolbox/OzCode 官方网 ...
- Git的Patch功能
转自:http://www.cnblogs.com/y041039/articles/2411600.html UNIX世界的软件开发大多都是协作式的,因此,Patch(补丁)是一个相当重要的东西,因 ...
- OrchardNoCMS实体关系映射扩展
在OrchardNoCMS中,默认的系统会把实体关系映射保存到mappings.bin文件中. 如果不进行任何修改,默认的可以自动保存关系映射的model是有很大限制的. 条件是model的命名空间必 ...
- 安卓 service
public class MyService extends Service { public MyService() { } @Override public IBinder onBind(Inte ...
- 利用python合并两个文件
1格式如下 在做利用zabbix的api来批量添加主机的时候,需要处理ip和hostname,在借用别人写的py程序的基础上,自己有改装了以下脚本,为自己使用.需要时ip和hostname为一个统一格 ...
- 发布ASP.NET Core网站到IIS
打开VS2015,新建项目: 选择模板,取消身份验证: 项目加载完成后就可以运行了: 下面要发布到IIS: 需要安装从IIS到Kestrel server的反向代理,下载地址:.NET Core Wi ...
- JavaScript数组的方法
push() :将参数加载到数组的最后,返回数组的长度 pop() :删除数组的最后一个元素,返回删除的值 shift() :删除数组的第一个元素,返回删除的值 unshift ...
- BZOJ 4698: Sdoi2008 Sandy的卡片
4698: Sdoi2008 Sandy的卡片 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 106 Solved: 40[Submit][Stat ...
- bzoj3527: [Zjoi2014]力
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...