アカウント名:
パスワード:
C++なら、再帰的テンプレートでコンパイル時に計算したいところだけど、再起禁止っていうのがコンパイル時も含むなら除外かなあ。ってことで、$title。
ああ、とても行儀の良いコードですね。特に、数値の出力がきちんと print_n に関数化されていて、longjmp がただのgoto代替品じゃなく、ロングジャンプらしい威力を発揮してるあたりが。
私が思い付いたのはせいぜいこんなのです。#include <iostream>#include <csetjmp>std::jmp_buf jump_buffer;int main(void) { int count = 1 + setjmp(jump_buffer); if (count <= 100) { std::cout << count << std::endl; std::longjmp(jump_buffer, count); } return 0;}
あとは、凄く行儀悪いですがこんなのも行けそうな(やめとけ)#include <iostream>#include <csetjmp>std::jmp_buf jump_buffer;int main(void) { volatile int count = 1; std::cout << (count += setjmp(jump_buffer)) << std::endl; if (count < 100) { std::longjmp(jump_buffer, 1); } return 0;}
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
gotoがだめならsetjmp()、longjmp()すれば良いじゃない (スコア:1)
C++なら、再帰的テンプレートでコンパイル時に計算したいところだけど、
再起禁止っていうのがコンパイル時も含むなら除外かなあ。
ってことで、$title。
Re: (スコア:2)
Re:gotoがだめならsetjmp()、longjmp()すれば良いじゃない (スコア:1)
ああ、とても行儀の良いコードですね。
特に、数値の出力がきちんと print_n に関数化されていて、longjmp がただのgoto代替品じゃなく、ロングジャンプらしい威力を発揮してるあたりが。
私が思い付いたのはせいぜいこんなのです。
#include <iostream>
#include <csetjmp>
std::jmp_buf jump_buffer;
int main(void) {
int count = 1 + setjmp(jump_buffer);
if (count <= 100) {
std::cout << count << std::endl;
std::longjmp(jump_buffer, count);
}
return 0;
}
あとは、凄く行儀悪いですがこんなのも行けそうな(やめとけ)
#include <iostream>
#include <csetjmp>
std::jmp_buf jump_buffer;
int main(void) {
volatile int count = 1;
std::cout << (count += setjmp(jump_buffer)) << std::endl;
if (count < 100) {
std::longjmp(jump_buffer, 1);
}
return 0;
}
Re:gotoがだめならsetjmp()、longjmp()すれば良いじゃない (スコア:2)