void (*)(int)
类型的参数与__sighnd64_t
C++中的信号处理
下面是我的简单代码:
#include <iostream>
#include <string>
#include <signal.h>
#include <ctype>
#include <stdlib.h>
#include <stdio.h>
typedef struct mystrcut
{
int a;
char *b;
} mystr;
void set_string (char **, const char *);
void my_handler(int s)
{
printf("Caught signal %d\n",s);
exit(1);
}
int main()
{
const std::string str1[] = {"hello1", "hello2"};
char str2[50];
size_t size1 = str1[1].size();
cout << size1;
memcpy (str2, str1[1].c_str(), size1);
cout << str2;
mystr *m = NULL;
m = new mystrcut;
m->a = 5;
set_string(&m->b, "hello");
cout << m->b;
delete []m->b;
// void (*prev_fn)(int);
signal (SIGINT,my_handler);
return 0;
}
void set_string (char **a, const char *b)
{
*a = new char [strlen(b)+1];
strcpy (*a, b);
}
我正在研究openvms。我可以通过某种类型转换来避免编译错误吗?我的编译器需要`__sighnd64_t __64_signal(int,__sighnd64_t);
添加处理程序extern c已经有效。谢谢
这是奇怪,因为据我所知'__sighnd64_t'被typedef定义为'无效(*)(INT)'。但是在你的代码中还有其他的问题......例如'cout'必须是一个未声明的标识符,因为你不使用'std ::' –
你可能必须在文件中寻找你的编译器(哪一个?) ,以确切地看到它对'signal()'参数的期望。 –
对不起,也许愚蠢的问题,但你有编译问题?在Linux上编译和工作,在需要的地方添加正确的std ::。 – dave