#include <stdio.h>
/*
Goto example
*/
#define true 1
#define false 0
#define bool int
int main(void) {
for( int i = 0; i < 10; ++i ){
for( int j = 0; j < 10; ++j ){
if( j == 3 ) goto exit_two_loops;
printf("%d + %d = %d\n", i
, j
, i
+j
); /* just fo example */ }
}
exit_two_loops:
{ /* of course we do not need this to be visible outside */
bool we_should_exit_i = false;
for( int i = 0; i < 10; ++i ){
for( int j = 0; j < 10; ++j ){
if( j == 3 ) {
we_should_exit_i = true;
/* note that in real program it will not be that simple */
break;
}
printf("%d + %d = %d\n", i
, j
, i
+j
); /* just for example */ }
if( we_should_exit_i ) break;
}
}
puts( "Why do we need 'goto'? We don't. Goto is bad, do not use it." ); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Ci8qCglHb3RvIGV4YW1wbGUKKi8KI2RlZmluZSB0cnVlIDEKI2RlZmluZSBmYWxzZSAwCiNkZWZpbmUgYm9vbCBpbnQKCmludCBtYWluKHZvaWQpIHsKCQoJZm9yKCBpbnQgaSA9IDA7IGkgPCAxMDsgKytpICl7CgkJZm9yKCBpbnQgaiA9IDA7IGogPCAxMDsgKytqICl7CgkJCWlmKCBqID09IDMgKSBnb3RvIGV4aXRfdHdvX2xvb3BzOwoJCQlwcmludGYoIiVkICsgJWQgPSAlZFxuIiwgaSwgaiwgaStqICk7IC8qIGp1c3QgZm8gZXhhbXBsZSAqLwoJCX0KCX0KCWV4aXRfdHdvX2xvb3BzOgoKCXsgLyogb2YgY291cnNlIHdlIGRvIG5vdCBuZWVkIHRoaXMgdG8gYmUgdmlzaWJsZSBvdXRzaWRlICovCglib29sIHdlX3Nob3VsZF9leGl0X2kgPSBmYWxzZTsKCWZvciggaW50IGkgPSAwOyBpIDwgMTA7ICsraSApewoJCWZvciggaW50IGogPSAwOyBqIDwgMTA7ICsraiApewoJCQlpZiggaiA9PSAzICkgewoJCQkJd2Vfc2hvdWxkX2V4aXRfaSA9IHRydWU7CgkJCQkvKiBub3RlIHRoYXQgaW4gcmVhbCBwcm9ncmFtIGl0IHdpbGwgbm90IGJlIHRoYXQgc2ltcGxlICovCgkJCQlicmVhazsKCQkJfQoJCQlwcmludGYoIiVkICsgJWQgPSAlZFxuIiwgaSwgaiwgaStqICk7IC8qIGp1c3QgZm9yIGV4YW1wbGUgKi8KCQl9CgkJaWYoIHdlX3Nob3VsZF9leGl0X2kgKSBicmVhazsKCX0KCX0KCQoJcHV0cyggIldoeSBkbyB3ZSBuZWVkICdnb3RvJz8gV2UgZG9uJ3QuIEdvdG8gaXMgYmFkLCBkbyBub3QgdXNlIGl0LiIgKTsKCXJldHVybiAwOwp9Cg==