Difference between revisions of "cpp/language/break"
(s/exist/exit/) |
m (Consistency with cpp/language/alignas) |
||
(7 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | {{title|break statement}} | + | {{title|{{tt|break}} statement}} |
{{cpp/language/statements/navbar}} | {{cpp/language/statements/navbar}} | ||
− | Causes the enclosing {{rlp|for}}, {{rlp|range-for}}, {{rlp|while}} or {{rlp|do|do-while}} loop or {{rlp|switch| switch statement}} to terminate. | + | Causes the enclosing {{rlp|for}}, {{rlp|range-for}}, {{rlp|while}} or {{rlp|do|do-while}} loop or {{rlp|switch|switch statement}} to terminate. |
Used when it is otherwise awkward to terminate the loop using the condition expression and conditional statements. | Used when it is otherwise awkward to terminate the loop using the condition expression and conditional statements. | ||
===Syntax=== | ===Syntax=== | ||
− | |||
{{sdsc begin}} | {{sdsc begin}} | ||
− | {{sdsc | {{spar|attr | + | {{sdsc|{{spar optional|attr}} {{ttb|break}} {{ttb|;}}}} |
{{sdsc end}} | {{sdsc end}} | ||
+ | |||
+ | {{par begin}} | ||
+ | {{par|{{spar|attr}}|{{mark since c++11}} any number of {{rlp|attributes}}}} | ||
+ | {{par end}} | ||
===Explanation=== | ===Explanation=== | ||
− | + | Appears only within the {{spar|statement}} of a loop body ({{rlpt|while}}, {{rlpt|do|do-while}}, {{rlpt|for}}) or within the {{spar|statement}} of a {{rlpt|switch}}. | |
After this statement the control is transferred to the statement immediately following the enclosing loop or switch. As with any block exit, all automatic storage objects declared in enclosing compound statement or in the {{spar|condition}} of a loop/switch are destroyed, in reverse order of construction, before the execution of the first line following the enclosing loop. | After this statement the control is transferred to the statement immediately following the enclosing loop or switch. As with any block exit, all automatic storage objects declared in enclosing compound statement or in the {{spar|condition}} of a loop/switch are destroyed, in reverse order of construction, before the execution of the first line following the enclosing loop. | ||
+ | |||
+ | ===Notes=== | ||
+ | A break statement cannot be used to break out of multiple nested loops. The {{rlp|goto|goto statement}} may be used for this purpose. | ||
===Keywords=== | ===Keywords=== | ||
− | |||
{{ltt|cpp/keyword/break}} | {{ltt|cpp/keyword/break}} | ||
− | |||
− | |||
− | |||
===Example=== | ===Example=== | ||
− | {{example | + | {{example |
− | + | |code= | |
#include <iostream> | #include <iostream> | ||
Line 30: | Line 32: | ||
{ | { | ||
int i = 2; | int i = 2; | ||
− | switch (i) { | + | switch (i) |
− | case 1: std::cout << "1"; | + | { |
− | case 2: std::cout << "2"; //execution starts at this case label | + | case 1: std::cout << "1"; // <---- maybe warning: fall through |
− | case 3: std::cout << "3"; | + | case 2: std::cout << "2"; // execution starts at this case label (+warning) |
− | case 4: | + | case 3: std::cout << "3"; // <---- maybe warning: fall through |
− | case 5: std::cout << "45"; | + | case 4: // <---- maybe warning: fall through |
− | break; //execution of subsequent statements is terminated | + | case 5: std::cout << "45"; // |
+ | break; // execution of subsequent statements is terminated | ||
case 6: std::cout << "6"; | case 6: std::cout << "6"; | ||
} | } | ||
+ | std::cout << '\n'; | ||
− | + | for (char c = 'a'; c < 'c'; c++) | |
− | + | { | |
− | for ( | + | for (int i = 0; i < 5; i++) // only this loop is affected by break |
− | for (int | + | { // |
− | if ( | + | if (i == 2) // |
− | std::cout << | + | break; // |
+ | std::cout << c << i << ' '; // | ||
} | } | ||
} | } | ||
+ | std::cout << '\n'; | ||
} | } | ||
− | + | |p=true | |
+ | |output= | ||
2345 | 2345 | ||
− | + | a0 a1 b0 b1 | |
}} | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc see c | c/language/break}} | + | {{dsc inc|cpp/language/attributes/dsc fallthrough}} |
+ | {{dsc see c|c/language/break}} | ||
{{dsc end}} | {{dsc end}} | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 11:16, 11 August 2024
Causes the enclosing for, range-for, while or do-while loop or switch statement to terminate.
Used when it is otherwise awkward to terminate the loop using the condition expression and conditional statements.
Contents |
[edit] Syntax
attr (optional) break ;
|
|||||||||
attr | - | (since C++11) any number of attributes |
[edit] Explanation
Appears only within the statement of a loop body (while
, do-while
, for
) or within the statement of a switch
.
After this statement the control is transferred to the statement immediately following the enclosing loop or switch. As with any block exit, all automatic storage objects declared in enclosing compound statement or in the condition of a loop/switch are destroyed, in reverse order of construction, before the execution of the first line following the enclosing loop.
[edit] Notes
A break statement cannot be used to break out of multiple nested loops. The goto statement may be used for this purpose.
[edit] Keywords
[edit] Example
#include <iostream> int main() { int i = 2; switch (i) { case 1: std::cout << "1"; // <---- maybe warning: fall through case 2: std::cout << "2"; // execution starts at this case label (+warning) case 3: std::cout << "3"; // <---- maybe warning: fall through case 4: // <---- maybe warning: fall through case 5: std::cout << "45"; // break; // execution of subsequent statements is terminated case 6: std::cout << "6"; } std::cout << '\n'; for (char c = 'a'; c < 'c'; c++) { for (int i = 0; i < 5; i++) // only this loop is affected by break { // if (i == 2) // break; // std::cout << c << i << ' '; // } } std::cout << '\n'; }
Possible output:
2345 a0 a1 b0 b1
[edit] See also
[[fallthrough]] (C++17)
|
indicates that the fall through from the previous case label is intentional and should not be diagnosed by a compiler that warns on fall-through (attribute specifier) |
C documentation for break
|