社区
C语言
帖子详情
请问这一句是什么意思?#define IO (void(*)(int)) -1
哟西哟西地
2004-11-08 11:56:49
请问这一句是什么意思?
#define IO (void(*)(int)) -1
这后面的-1有什么用?
...全文
380
20
打赏
收藏
请问这一句是什么意思?#define IO (void(*)(int)) -1
请问这一句是什么意思? #define IO (void(*)(int)) -1 这后面的-1有什么用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
哟西哟西地
2004-12-14
打赏
举报
回复
对不起,分太少了.:)
哟西哟西地
2004-12-14
打赏
举报
回复
谢谢大家.
因为这段时我的ip被csdn给ban了.无法上来及时结贴,向大家说声对不起.!
cdxiaogan
2004-11-13
打赏
举报
回复
怎么没人说了呢?高手快现身啊!
harvey93
2004-11-13
打赏
举报
回复
说说我的理解,高手请指教:
#define IO (void(*)(int)) -1 /* IO定义为一个函数的指针(由-1转化来的),这个函数返回值为void型,参数为int,原因烧后说 */
void (*signal(int,void(*Func)(int)))(int);
/* 这个语句是对signal函数的一个声明.
假设作一个宏: #define POINTER signal(int,void(*Func)(int)) 那么原句可以写成为 void (* POINTER)(int); POINTER代表了一个函数指针,它是函数signal(int,void(*Func)(int))的返回值,函数signal(int,void(*Func)(int))本身有两个参数,一个为int型,另外一个参数又是一个函数的指针Func.因为signal返回值是void(* POINTER)(int)这种形式,所以如果-1要作为signal函数的返回值,就必须作一次强行转换,至于signal返回-1的含义,请见LoveCreatesBeauty(爱产生美)的大作
*/
cdxiaogan
2004-11-10
打赏
举报
回复
to LoveCreatesBeauty(爱产生美):
/*************************
void ( *signal( int,void(*Func)(int) ) )(int);是这样一个函数:
1、它有两个参数。一个是int,一个是函数指针Func。
2、它的返回值是一个函数指针。在signal正确时它的返回值上一个函数的地址。这个用法可能与
Windows编程里有些概念相似,比如获取一个设备上下文句柄时,也会返回原始设备上下文的句
柄,以便恢复。
************************/
函数指针Func?Func是一个用typedefine定义过得自定义类型吗?
如果定义成void ( *signal( int,void(*)(int) ) )(int);会有什么区别呢?
cdxiaogan
2004-11-10
打赏
举报
回复
to LoveCreatesBeauty(爱产生美):
/*************************
void ( *signal( int,void(*Func)(int) ) )(int);是这样一个函数:
1、它有两个参数。一个是int,一个是函数指针Func。
2、它的返回值是一个函数指针。在signal正确时它的返回值上一个函数的地址。这个用法可能与
Windows编程里有些概念相似,比如获取一个设备上下文句柄时,也会返回原始设备上下文的句
柄,以便恢复。
************************/
函数指针Func?Func是一个用typedefine定义过得自定义类型吗?
如果定义成void ( *signal( int,void(*)(int) ) )(int);会有什么区别呢?
Zark
2004-11-09
打赏
举报
回复
根据不同的字长系统,这个宏可以变为
在16字长中
#define IO 0xFFFF
在32字长中
#define IO 0xFFFFFFFF
DiabloWalkOnTheEarth
2004-11-09
打赏
举报
回复
把-1强制转化为(void(*)(int)),不会吧,这么暴力.
zhangfjj
2004-11-09
打赏
举报
回复
在哪看到的?
单纯看的话,只是一个宏,不知道-1的作用。能不能给出更详细的代码?
jozosoft
2004-11-09
打赏
举报
回复
哎,别光是嘴巴上说,送分给大家呀。我也要一点呀!
LoveCreatesBeauty
2004-11-09
打赏
举报
回复
得到您的表扬,真是比三伏天吃西瓜还要高兴:)
Zark
2004-11-09
打赏
举报
回复
致: LoveCreatesBeauty(爱产生美)
正确.
yycec
2004-11-09
打赏
举报
回复
这个宏定义了一个函数指针,指向函数的首地址-1处。
LoveCreatesBeauty
2004-11-09
打赏
举报
回复
//signal.h
/* signal error value (returned by signal call on error) */
#define SIG_ERR (void (__cdecl *)(int))-1 /* signal error value */
signal函数失败时返回SIG_ERR,在标准C语言中SIG_ERR是-1。但不能直接用-1。用为signal的返回类型是 void(*)(int)。所以-1也要转换为signal的返回类型。地址毕竟跟整数还是有区别的。这与DiabloWalkOnTheEarth(毁灭小符 (Annihilus)(99)(3502)) 猜得是一样的。不知道楼主提到的那个为什么没有用SIG_ERR,而是自定义一个类似的IO。金陵五月大哥指教一下:)
void ( *signal( int,void(*Func)(int) ) )(int);是这样一个函数:
1、它有两个参数。一个是int,一个是函数指针Func。
2、它的返回值是一个函数指针。在signal正确时它的返回值上一个函数的地址。这个用法可能与
Windows编程里有些概念相似,比如获取一个设备上下文句柄时,也会返回原始设备上下文的句
柄,以便恢复。
hffaming
2004-11-09
打赏
举报
回复
void (*signal(int,void(*Func)(int)))(int);
该函数用来返回一个具有(int)参数的void函数句柄
cdxiaogan
2004-11-09
打赏
举报
回复
计算机对(void(*)(int))的具体处理过程呢,请 Zark(金陵五月) 能进一步详细解释一下吗?
我初学者,谢谢!~
sdusthd
2004-11-09
打赏
举报
回复
void (*signal(int,void(*Func)(int)))(int);
这个怎么理解?不理解为什么最后还有一个(int)?安它带入的参数好像不行呀
sdusthd
2004-11-09
打赏
举报
回复
这个问题要关注
哟西哟西地
2004-11-09
打赏
举报
回复
这是一本linux书中介绍的。
书中前面有定义:
void (*signal(int,void(*Func)(int)))(int);
#define IO (void(*)(int)) -1
void Text(int a){
..
}
后有
if(signal(10,text)==IO)
....
这样的语句。。。
哟西哟西地
2004-11-08
打赏
举报
回复
在线=
高级
IO
和5种
IO
模型
高级
IO
详解
【Linux网络】五种
IO
模型与非阻塞
IO
本文聚焦操作系统与 Linux 网络编程核心
IO
体系,从
IO
最底层的本质概念入手,拆解
IO
执行的两大核心步骤,解释
IO
运行低效的根本原因,并给出优化
IO
效率的核心思路。为了降低抽象概念的理解难度,全文采用钓鱼生活化案例类比业界通用的五种经典
IO
模型,依次讲解阻塞
IO
、非阻塞
IO
、信号驱动
IO
、
IO
多路复用、异步
IO
的运行逻辑,同时精准界定同步
IO
与异步
IO
的判定标准,搭配可直接编译运行的 C 语言代码完成信号驱动
IO
、POSIX 异步
IO
的实操演示。
【C语言笔记】#
define
与typedef的区别
1、#
define
define
是预处理指令,在编译时不进行任何检查,只进行简单的替换 宏定义的一般形式为: #
define
宏名 字符串 这里所说的字符串是一般意义上的字符序列,不要和C语言中的字符串等同,它不需要双引号。 2、typedef typedef是在C语言中用来为复杂的声明定义简单的别名,它本身是一种存储类的关键字,与auto、extern、mutable、static、r...
define
java_#
define
in Java
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):问题:I'm beginning to program in Java and I'm wondering if the equivalent to the C++ #
define
exists.A quick search of google says that it doesn't, but cou...
java中
define
_#
define
in Java
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):问题:I'm beginning to program in Java and I'm wondering if the equivalent to the C++ #
define
exists.A quick search of google says that it doesn't, but cou...
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章