掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
switch文中のマクロ (ID:59047)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
C++なら、例外を使用。Cなら、マクロで例外もどきを使用、とか。 MACROマクロは条件式のみに留めておくといいかも。 #define TRY do #define THROW goto TRY_TAG_ERROR #define CATCH while(0); goto TRY_TAG_RESUME; TRY_TAG_ERROR: #define FINNALY TRY_TAG_RESUME: #define MACRO (a != 10) int main(void) { int a = 1; TRY{ switch( a ){ case 1: if( MACRO ){ THROW; } puts("1"); break; default: puts("default"); } } CATCH{ puts("error!"); } FINNALY{ getchar(); } return 0; } もうちょい真面目に書くなら、 #define TRY do #define THROW(name) goto TRY_TAG_ERROR_##name #define CATCH(name, last) while(0); goto TRY_TAG_RESUME_##last; TRY_TAG_ERROR_##name: #define FINNALY(last) TRY_TAG_RESUME_##last: #define MACRO (a != 10) int main(void) { int a = 1; TRY{ switch( a ){ case 1: if( MACRO ){ THROW(A); } puts("1"); break; case 2: if( MACRO ){ THROW(B); } puts("2"); break; default: puts("default"); } } CATCH(A, F){ puts("error! A"); } CATCH(B, F){ puts("error! B"); } FINNALY(F){ getchar(); } return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.