为什么这个编译C,但不是C ++(sigaction的)? [英] Why does this compile in C but not C++ (sigaction)?

查看:137
本文介绍了为什么这个编译C,但不是C ++(sigaction的)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图编译使用G ++下面code时,我得到了以下错误。当我用gcc它工作正常(比一些其他的警告)编译它。任何帮助AP preciated。

  G ++ ush7.cpp
ush7.cpp:在函数'诠释signalsetup(sigaction的*,* sigset_t,无效(*)(INT)):
ush7.cpp:93:错误:'抓'之前的预期不合格-ID
ush7.cpp:95:错误:'抓'之前的预期主要-EX pression
ush7.cpp:95:错误:预期';'之前'抓'
ush7.cpp:97:错误:'抓'之前的预期主要-EX pression
ush7.cpp:97:错误:预期';'之前'抓'
ush7.cpp:100:错误:'抓'之前的预期主要-EX pression
ush7.cpp:100:错误:预期`)抓''之前'
ush7.cpp:108:错误:之前预计');令牌
ush7.cpp:108:错误:之前预计');令牌
ush7.cpp:在函数'诠释makeargv(为const char *,为const char *,***炭):
ush7.cpp:137:错误:从'无效*'到'字符*'无效的转换
ush7.cpp:145:错误:从'无效*'无效转换的char **'


  INT signalsetup(结构的sigaction *闪避,sigset_t *面膜,无效(*处理器)(INT))
{
   结构的sigaction抓;   catch.sa_handler =处理程序; / *设置信号结构* /
   def-> sa_handler = SIG_DFL;
   catch.sa_flags = 0;
   def->其中sa_flags = 0;
   如果((sigemptyset(及(def-> sa_mask))== -1)||
       (sigemptyset(及(catch.sa_mask))== -1)||
       (sigaddset(及(catch.sa_mask),SIGINT)== -1)||
       (sigaddset(及(catch.sa_mask),SIGQUIT)== -1)||
       (sigaction的(SIGINT,和放大器;赶,NULL)== -1)||
       (sigaction的(SIGQUIT,&安培;捕捞,NULL)== -1)||
       (sigemptyset(掩模)== - 1)||
       (sigaddset(面具,SIGINT)== -1)||
       (sigaddset(掩模,SIGQUIT)== - 1))
       返回-1;
    返回0;
}


解决方案

在C ++中,但不是在C关键字。

请参阅我的相关答案C是不是C的真子集++ <一个href=\"http://stackoverflow.com/questions/304088/is-c-$c$c-still-considered-c/304091#304091\">here,甚至更好这里

I get the following errors when trying to compile the below code using g++. When I compile it using gcc it works fine (other than a few warnings). Any help appreciated.

g++ ush7.cpp
ush7.cpp: In function ‘int signalsetup(sigaction*, sigset_t*, void (*)(int))’:
ush7.cpp:93: error: expected unqualified-id before ‘catch’
ush7.cpp:95: error: expected primary-expression before ‘catch’
ush7.cpp:95: error: expected `;' before ‘catch’
ush7.cpp:97: error: expected primary-expression before ‘catch’
ush7.cpp:97: error: expected `;' before ‘catch’
ush7.cpp:100: error: expected primary-expression before ‘catch’
ush7.cpp:100: error: expected `)' before ‘catch’
ush7.cpp:108: error: expected `)' before ‘;’ token
ush7.cpp:108: error: expected `)' before ‘;’ token
ush7.cpp: In function ‘int makeargv(const char*, const char*, char***)’:
ush7.cpp:137: error: invalid conversion from ‘void*’ to ‘char*’
ush7.cpp:145: error: invalid conversion from ‘void*’ to ‘char**’


int signalsetup(struct sigaction *def, sigset_t *mask, void (*handler)(int))
{
   struct sigaction catch;

   catch.sa_handler = handler;  /* Set up signal structures  */
   def->sa_handler = SIG_DFL;
   catch.sa_flags = 0;
   def->sa_flags = 0;
   if ((sigemptyset(&(def->sa_mask)) == -1) ||
       (sigemptyset(&(catch.sa_mask)) == -1) ||
       (sigaddset(&(catch.sa_mask), SIGINT) == -1) ||
       (sigaddset(&(catch.sa_mask), SIGQUIT) == -1) ||
       (sigaction(SIGINT, &catch, NULL) == -1) ||
       (sigaction(SIGQUIT, &catch, NULL) == -1) ||
       (sigemptyset(mask) == -1) ||
       (sigaddset(mask, SIGINT) == -1) ||
       (sigaddset(mask, SIGQUIT) == -1))
       return -1;
    return 0;
}

解决方案

catch is a keyword in C++ but not in C.

Please see my related answer C is not a proper subset of C++ here, or even better here.

这篇关于为什么这个编译C,但不是C ++(sigaction的)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆