社区
C语言
帖子详情
请问这一句是什么意思?#define IO (void(*)(int)) -1
哟西哟西地
2004-11-08 11:56:49
请问这一句是什么意思?
#define IO (void(*)(int)) -1
这后面的-1有什么用?
...全文
335
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
打赏
举报
回复
在线=
172集通俗易懂的C语言从入门到项目实战教程
1) 本套课程针对高校大学生系统学习C语言而录制,从0基础入门讲起,循序渐进,通俗易懂,同时适用于计算机系及非计算机系的同学。通过学习可以帮助大家掌握C语言本质,轻松面对C语言全国二级考试,并达到能独立完成...
C++详解 | #
define
预处理器
文章目录一、预处理器二、语法三、原理三、参数宏四、类型宏五、#和##运算符 一、预处理器 预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符...
#
define
用法集锦(非常全)
Definit
io
n:The #
define
Directive You can use the #
define
directive to give a meaningful name to a constant in your program. The two forms of the syntax are: Syntax #
define
identifier token-string...
#
define
总结-#
define
用法集锦 (网上资料汇集)
Definit
io
n:The #
define
Directive You can use the #
define
directive to give a meaningful name to a constant in your program. The two forms of the syntax are: Syntax #
define
identifier to
(*(volatile unsigned
int
*))详解
使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义#
define
RAM_ADDR (*(volatile unsigned long *)0x00000000)然后就可以用C语言对这个内存地址进行读写操作了 读:tmp = RAM_ADDR; 写:RAM_...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章