## 副作用のない再帰は C では未定義の動作ですか?

Linda Hamilton
リリース: 2024-10-26 12:19:02
オリジナル
963 人が閲覧しました

## Is Recursion Without Side Effects Undefined Behavior in C  ?

副作用のない再帰は未定義の動作ですか?

C 11 では、次のような副作用のない無限ループは未定義とみなされます。動作 (UB):

<code class="cpp">int main() {
   while (true) {}
}</code>
ログイン後にコピー

ISO C 11 標準 (1.10p24) の次の規定により、動作は UB になります。

The implementation may assume that any thread will eventually do one of the following:
 - terminate, 
 - make a call to a library I/O function, 
 - access or modify a volatile object, or 
 - perform a synchronization operation or an atomic operation.
ログイン後にコピー

この規定は、ループの例と次の再帰的プログラム:

<code class="cpp">void foo() {
   foo();
}

int main() {
   foo();
}</code>
ログイン後にコピー

この再帰的プログラムには副作用はありませんが、いずれかのスレッドが最終的にリストされたアクションのいずれかを実行するという仮定に違反するため、UB とみなされます。 1.10p24.

この規定が存在しなかったとしても、入れ子になった再帰関数呼び出しの実装定義の制限を超える場合、再帰は依然として未定義の動作を示す可能性があることに注意してください。これは、バージョンに関係なく、 C では常に当てはまります。

以上が## 副作用のない再帰は C では未定義の動作ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!