您的位置:首页 > 编程语言 > C语言/C++

关于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不会被走到,编译将自动优化,去掉这个分支走向。所以出现上面的没打印错误消息的现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: