关于C语言指针比较的一点事
2016-03-09 11:07
295 查看
本人在研究linux 信号中,写了如下代码片段
static void sig_handler(int sig)
{
...
}
int i = 1;
for(;i< 33;++i)
{
if(signal(i,sig_handler) < 0) //正确做法,== SIG_ERR, 当时是因为想到SIG_ERR 定义的是一个值为-1的指针。
{
printf("register signal handler fail , sig number is %d\n",i);
}
}
因为SIGKILL 和 SIGSTOP是不能被捕捉的,所以运行程序后应该打印两条错误,结果什么都没打印。得出如下结论:
1, 首先在c语言中,0 会被隐试转换成 指针类型,不会发出编译警告。
2,在c语言中,if(pointer < 0){} 这种比较是无意义的,这种case不会被走到,编译将自动优化,去掉这个分支走向。所以出现上面的没打印错误消息的现象。
static void sig_handler(int sig)
{
...
}
int i = 1;
for(;i< 33;++i)
{
if(signal(i,sig_handler) < 0) //正确做法,== SIG_ERR, 当时是因为想到SIG_ERR 定义的是一个值为-1的指针。
{
printf("register signal handler fail , sig number is %d\n",i);
}
}
因为SIGKILL 和 SIGSTOP是不能被捕捉的,所以运行程序后应该打印两条错误,结果什么都没打印。得出如下结论:
1, 首先在c语言中,0 会被隐试转换成 指针类型,不会发出编译警告。
2,在c语言中,if(pointer < 0){} 这种比较是无意义的,这种case不会被走到,编译将自动优化,去掉这个分支走向。所以出现上面的没打印错误消息的现象。
相关文章推荐
- C++编程中使用设计模式中的policy策略模式的实例讲解
- 10种常用ADC滤波算法
- C++11保证稳定性和兼容性(一):保持与C99兼容
- 深入分析c++虚函数表
- C++中关于new和delete的详细介绍
- 深入解析C++编程中对设计模式中的策略模式的运用
- C++的精髓——虚函数
- c语言--指针
- 简单了解设计模式中的装饰者模式及C++版代码实现
- 单例模式
- C++ 对象或指针类型转换
- C语言中各种整型变量在不同字长机器上的字节数详细探讨
- C语言 原码--反码--补码
- 详解C++设计模式编程中策略模式的优缺点及实现
- CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)
- C++拷贝构造函数详解
- 深入理解C++的动态绑定和静态绑定
- 反向迭代器的使用
- C++ (P199—P211)多态 虚函数 抽象类
- C语言(回调函数)