tidy - cppcoreguidelines-avoid-goto — Extra Clang Tools 22.0.0git documentation (original) (raw)
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.76from the C++ Core Guidelines and6.3.1from High Integrity C++ Coding Standard.
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.
// 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.
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++.
Options¶
IgnoreMacros¶
If set to true, the check will not warn if a goto statement is expanded from a macro. Default is false.