.. title:: clang-tidy - cppcoreguidelines-avoid-goto cppcoreguidelines-avoid-goto ============================ The usage of ``goto`` for control flow is error prone and should be replaced with looping constructs. Only forward jumps in nested loops are accepted. This check implements `ES.76 `_ from the CppCoreGuidelines and `6.3.1 from High Integrity C++ `_. For more information on why to avoid programming with ``goto`` you can read the famous paper `A Case against the GO TO Statement. `_. The check diagnoses ``goto`` for backward jumps in every language mode. These should be replaced with `C/C++` looping constructs. .. code-block:: c++ // Bad, handwritten for loop. int i = 0; // Jump label for the loop loop_start: do_some_operation(); if (i < 100) { ++i; goto loop_start; } // Better for(int i = 0; i < 100; ++i) do_some_operation(); Modern C++ needs ``goto`` only to jump out of nested loops. .. code-block:: c++ for(int i = 0; i < 100; ++i) { for(int j = 0; j < 100; ++j) { if (i * j > 500) goto early_exit; } } early_exit: some_operation(); All other uses of ``goto`` are diagnosed in `C++`.