C言語関係掲示板

過去ログ

No.957 関数をまたぐジャンプ

[戻る] [ホームページ]
No.12245

goto 文について
投稿者---パンドラ(2004/01/28 15:29:39)


基本的なことと思いますが、
質問します。
例えば、
void main()
{
 void df01();
   :
a001:;
   :
}
void df01()
{
   :
  goto a001;
   :
}
このように、サブルーチンからメインや
サブルーチンからサブルーチンへとgoto文で
いくことは出来るんですか?
教えてください。

No.12246

Re:goto 文について
投稿者---NykR(2004/01/28 15:35:52)


>このように、サブルーチンからメインや
>サブルーチンからサブルーチンへとgoto文で
>いくことは出来るんですか?

出来ません。

No.12248

Re:goto 文について
投稿者---YuO(2004/01/28 15:48:39)


>このように、サブルーチンからメインや
>サブルーチンからサブルーチンへとgoto文で
>いくことは出来るんですか?

Cではサブルーチンとは呼ばずmainも含め全て関数と呼びます。
#戻り値が例えvoidでも。

それはともかく,gotoの制約としてその関数から出ることはできないとされています。
JIS X 3010-1993 6.6.6.1 goto文
制約 goto文の識別子は,そのgoto文を含む関数内のどこかに位置する名札を指定しなければならない。


さらに,ISO Cの1999年の改正により,制約が更に追加されています。
ISO/IEC 9899:1999 6.8.6.1 The goto statement
Constraints
The identifier in a goto statement shall name a label located somewhere in the enclosing function. A goto statement shall not jump from outside the scope of an identifier having a variably modified type to inside the scope of that identifier.



関数をまたぐジャンプはsetjmpとlongjmpを使うことで,ある程度はできるようになります。


No.12261

Re:goto 文について
投稿者---パンドラ(2004/01/28 17:51:56)


ありがとうございました。