2011-08-09 9 views
0

c/C++についてよくわかりません。私はいくつかの分析を行うために小さなプログラムをコンパイルする必要があります。C/C++ SEHビルドエラーの例

これは私がのDev C++ 4.9.9.2でコンパイルしていたプログラム

#include<stdio.h> 
#include<string.h> 
#include<windows.h> 
//#include<seh.h> 
#include<excpt.h> 

int ExceptionHandler(void); 
int main(int argc,char *argv[]) 
{ 

char temp[512]; 

printf("Application launched"); 

try 
    { 

    strcpy(temp,argv[1]); 

    } catch (ExceptionHandler()) 
    { 
    } 
return 0; 
} 
int ExceptionHandler(void) 
{ 
printf("Exception"); 
return 0; 
} 

です。これらは私が得るエラーです

Compiler: Default compiler 
Building Makefile: "C:\Documents and Settings\madhur\Desktop\Makefile.win" 
Executing make... 
make.exe -f "C:\Documents and Settings\madhur\Desktop\Makefile.win" all 
g++.exe -c main.c -o main.o -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" 
main.c: In function `int main(int, char**)': 
main.c:20: error: `ExceptionHandler' is not a type 
m ain.c:20: error: invalid catch parameter 
make.exe: *** [main.o] Error 1 
Execution terminated 

このコードで何が問題なのでしょうか?

+2

いいえ、編集は役に立ちません。 'try/catch'は' __try/__ except'と同じ種類の例外をキャッチしません。そして構文は異なります。 –

+0

ありがとう、私はVisual C++コンパイラを試します –

答えて

2

@Ajayが指摘したように、SEHはMicrosoft C/C++コンパイラの機能です。ですから、GCCでの使用には少しの運があります(あなたがアドオンをサポートしていない限り、libSEHについての私のコメントを参照してください)。

GCCまたはDev C++を使用する必要がない場合は、代わりに無料のMicrosoft Visual C++ Expressエディションを使用できます。

0

定義する項目にはseh.hを含める必要があります。

1

__tryおよび__exceptは、SEH(構造化例外処理)のMicrosoft C/C++固有のキーワードです。 tryおよびcatch C++例外処理を使用する必要があります。

+0

+1:ちょうど2つのものを追加します。 SEHもC言語で動作しますが、C++は必須ではありません。第二に、GCCのSEHをエミュレートするためのライブラリ(決してそれを使用しない)があるようです:[libSEH](http://www.programmingunlimited.net/siteexec/content.cgi?page=libseh)。 –

+0

しかし、strcpyにはC++の例外はありません。 –

+0

ありがとう、私はVisual C++コンパイラを試します –

関連する問題