tags:

views:

792

answers:

2

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;
}
+16  A: 

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.

Brian R. Bondy
This is true. Thank you very much! Problem solved.
Joshua Lowry
Your other posts helped me with the other errors I was getting with malloc.
Joshua Lowry
A: 

You should be able to use a #define if you don't want to change the rest of the code.

#define catch _catch
Thank you for construction. Luckily there was only this one function with a few calls :).
Joshua Lowry
Tested on another set of code... this works.
Joshua Lowry