当前位置: 技术问答>linux和unix
invalid conversion from `int (*)(int)' to `void (*)(int)',这个怎么转换
来源: 互联网 发布时间:2016-03-19
本文导语: #include #include #include #include int catch1(int sig); int main(void) { signal(SIGINT, catch1); /* 将SIGINT 信号与catch 函数关联 */ printf("xixin"); sleep(10); printf("endn"); return 0; } int catch1(int sig) { printf("Catch succeed!n"); } [root@zoux...
#include
#include
#include
#include
int catch1(int sig);
int main(void)
{
signal(SIGINT, catch1); /* 将SIGINT 信号与catch 函数关联 */
printf("xixin");
sleep(10);
printf("endn");
return 0;
}
int catch1(int sig)
{
printf("Catch succeed!n");
}
[root@zouxd network]# make
gcc page532.cpp -o page532
page532.cpp: In function `int main()':
page532.cpp:9: invalid conversion from `int (*)(int)' to `void (*)(int)'
make: *** [page532] Error 1
[root@zouxd network]#
#include
#include
#include
int catch1(int sig);
int main(void)
{
signal(SIGINT, catch1); /* 将SIGINT 信号与catch 函数关联 */
printf("xixin");
sleep(10);
printf("endn");
return 0;
}
int catch1(int sig)
{
printf("Catch succeed!n");
}
[root@zouxd network]# make
gcc page532.cpp -o page532
page532.cpp: In function `int main()':
page532.cpp:9: invalid conversion from `int (*)(int)' to `void (*)(int)'
make: *** [page532] Error 1
[root@zouxd network]#
|
不是如何转换的问题
而是函数返回值类型错了
而是函数返回值类型错了
|
int catch1(int sig);
void catch1(int sig);
--------------------------------------------------,
int catch1(int sig)
{
printf("Catch succeed!n");
}
void catch1(int sig)
{
printf("Catch succeed!n");
}
|
#include
void (*signal(int signo, void (*func)(int)))(int);
信号处理函数的原型:
void (*func)(int);
void (*signal(int signo, void (*func)(int)))(int);
信号处理函数的原型:
void (*func)(int);
|
也可强制转换:
signal (SIGINT, (void (*)(int))catch1);
或者可读性好一些的:
typedef void (*func_t)(int);
...
signal (SIGINT, (func_t)catch1);
signal (SIGINT, (void (*)(int))catch1);
或者可读性好一些的:
typedef void (*func_t)(int);
...
signal (SIGINT, (func_t)catch1);