【发布时间】:2013-05-07 10:07:38
【问题描述】:
我的情况很简单:我希望我的 C++ 程序能够处理 Unix 信号。为此,glibc 在 signal.h 中提供了一个名为 sigaction 的函数,该函数期望接收一个函数指针作为其第二个参数。
extern "C"
{
void uponSignal(int);
}
void uponSignal(int)
{
// set some flag to quit the program
}
static
void installSignalHandler()
{
// initialize the signal handler
static struct sigaction sighandler;
memset( &sighandler, 0, sizeof(struct sigaction) );
sighandler.sa_handler = uponSignal;
// install it
sigaction( SIGINT, &sighandler, nullptr );
}
我的问题是:extern "C" 链接说明符是否必要?
额外问题:可以将 onSignal 声明为static吗?
【问题讨论】:
-
如果你删除
extern "C",一些编译器会直接拒绝编译它,因为 sigaction 的第二个参数类型错误。许多编译器的一个错误是他们不考虑函数类型的链接部分。
标签: c++ c signals glibc linkage