2009-04-20 63 views
3

嘗試使用g ++編譯下面的代碼時,出現以下錯誤。當我使用gcc編譯它時,它工作正常(除了一些警告)。任何幫助讚賞。爲什麼在C編譯而不是C++(sigaction)?

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

catch是在C++關鍵字但不是在C.

請參閱我的相關答案C是不是C++ here,甚至更好here一個子集。

+1

這是事實。非常感謝你! 問題解決。 – 2009-04-20 03:50:51

+0

您的其他帖子幫助我解決了使用malloc獲得的其他錯誤。 – 2009-04-20 04:10:36

0

如果您不想更改其餘代碼,您應該可以使用#define。

#define catch _catch 
相關問題