How to use goto statement in lambda expression C++
Is there any way to use goto statement in lambda expression?
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
};
lambda();
return 0;
label:
std::cout << "hello, world!" << std::endl;
}
I want the console to output hello, world!, but the compiler gives an error:
use of undeclared label 'label'
goto label;
^
1 error generated.
c++
add a comment |
Is there any way to use goto statement in lambda expression?
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
};
lambda();
return 0;
label:
std::cout << "hello, world!" << std::endl;
}
I want the console to output hello, world!, but the compiler gives an error:
use of undeclared label 'label'
goto label;
^
1 error generated.
c++
7
This code is fairly confusing, you should really avoid usinggoto
like that, the odds of nothing going wrong are fairly slim. If you could share what you actually wanted to achieve, we might be able to help with that.
– Qubit
Dec 17 '18 at 12:26
1
What's the problem you're trying to solve with goto inside a lambda?
– Ami Tavory
Dec 17 '18 at 12:28
@Qubit Maybe my example does not convey very well, but whether or not to use goto statement is not the key of this question.
– 0x11901
Dec 18 '18 at 3:18
@0x11901 My point was related more to the fact of even consideringgoto
to move between functions, think of all the issues that arise from something like this, it would become fairly difficult to keep track of what the code does. Not to mention, you then have a function that never reaches thereturn
statement, which seems to defeat the purpose. So the point was, there should never even be a case where you would want to do this, regardless of whether or not it is possible.
– Qubit
Dec 18 '18 at 8:39
add a comment |
Is there any way to use goto statement in lambda expression?
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
};
lambda();
return 0;
label:
std::cout << "hello, world!" << std::endl;
}
I want the console to output hello, world!, but the compiler gives an error:
use of undeclared label 'label'
goto label;
^
1 error generated.
c++
Is there any way to use goto statement in lambda expression?
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
};
lambda();
return 0;
label:
std::cout << "hello, world!" << std::endl;
}
I want the console to output hello, world!, but the compiler gives an error:
use of undeclared label 'label'
goto label;
^
1 error generated.
c++
c++
asked Dec 17 '18 at 12:24
0x119010x11901
657
657
7
This code is fairly confusing, you should really avoid usinggoto
like that, the odds of nothing going wrong are fairly slim. If you could share what you actually wanted to achieve, we might be able to help with that.
– Qubit
Dec 17 '18 at 12:26
1
What's the problem you're trying to solve with goto inside a lambda?
– Ami Tavory
Dec 17 '18 at 12:28
@Qubit Maybe my example does not convey very well, but whether or not to use goto statement is not the key of this question.
– 0x11901
Dec 18 '18 at 3:18
@0x11901 My point was related more to the fact of even consideringgoto
to move between functions, think of all the issues that arise from something like this, it would become fairly difficult to keep track of what the code does. Not to mention, you then have a function that never reaches thereturn
statement, which seems to defeat the purpose. So the point was, there should never even be a case where you would want to do this, regardless of whether or not it is possible.
– Qubit
Dec 18 '18 at 8:39
add a comment |
7
This code is fairly confusing, you should really avoid usinggoto
like that, the odds of nothing going wrong are fairly slim. If you could share what you actually wanted to achieve, we might be able to help with that.
– Qubit
Dec 17 '18 at 12:26
1
What's the problem you're trying to solve with goto inside a lambda?
– Ami Tavory
Dec 17 '18 at 12:28
@Qubit Maybe my example does not convey very well, but whether or not to use goto statement is not the key of this question.
– 0x11901
Dec 18 '18 at 3:18
@0x11901 My point was related more to the fact of even consideringgoto
to move between functions, think of all the issues that arise from something like this, it would become fairly difficult to keep track of what the code does. Not to mention, you then have a function that never reaches thereturn
statement, which seems to defeat the purpose. So the point was, there should never even be a case where you would want to do this, regardless of whether or not it is possible.
– Qubit
Dec 18 '18 at 8:39
7
7
This code is fairly confusing, you should really avoid using
goto
like that, the odds of nothing going wrong are fairly slim. If you could share what you actually wanted to achieve, we might be able to help with that.– Qubit
Dec 17 '18 at 12:26
This code is fairly confusing, you should really avoid using
goto
like that, the odds of nothing going wrong are fairly slim. If you could share what you actually wanted to achieve, we might be able to help with that.– Qubit
Dec 17 '18 at 12:26
1
1
What's the problem you're trying to solve with goto inside a lambda?
– Ami Tavory
Dec 17 '18 at 12:28
What's the problem you're trying to solve with goto inside a lambda?
– Ami Tavory
Dec 17 '18 at 12:28
@Qubit Maybe my example does not convey very well, but whether or not to use goto statement is not the key of this question.
– 0x11901
Dec 18 '18 at 3:18
@Qubit Maybe my example does not convey very well, but whether or not to use goto statement is not the key of this question.
– 0x11901
Dec 18 '18 at 3:18
@0x11901 My point was related more to the fact of even considering
goto
to move between functions, think of all the issues that arise from something like this, it would become fairly difficult to keep track of what the code does. Not to mention, you then have a function that never reaches the return
statement, which seems to defeat the purpose. So the point was, there should never even be a case where you would want to do this, regardless of whether or not it is possible.– Qubit
Dec 18 '18 at 8:39
@0x11901 My point was related more to the fact of even considering
goto
to move between functions, think of all the issues that arise from something like this, it would become fairly difficult to keep track of what the code does. Not to mention, you then have a function that never reaches the return
statement, which seems to defeat the purpose. So the point was, there should never even be a case where you would want to do this, regardless of whether or not it is possible.– Qubit
Dec 18 '18 at 8:39
add a comment |
3 Answers
3
active
oldest
votes
You can't use goto
to move between functions, and a lambda defines a separate function to it's enclosing scope.
From this reference
The
goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
And the standard, [stmt.goto]
The
goto
statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label located in the current function.
add a comment |
Is there any way to use goto statement in lambda expression?
No. Not to leave the scope of lambda and jump to the enclosing scope. You can only goto
a labeled statement inside the lambda, same as if it were any other function.
Having said that, the uses for goto
in C++ specifically are few and infrequent. There are other, better, options. I urge you not to reach for goto
as the first tool you use.
3
Actually I can't come up with a single use case ofgoto
in C++. In C, I still use it for error handling from time to time.
– liliscent
Dec 17 '18 at 12:40
3
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
1
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
1
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@Spitemaster you usereturn
to break out of a deep loop
– Caleth
Dec 17 '18 at 20:25
|
show 1 more comment
The goto
statement transfers control to the location specified by label. The goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
You can instead do this:
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
label:
std::cout << "hello, world!" << std::endl;
};
lambda();
return 0;
}
And it will print "Hello World". See demo.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53815203%2fhow-to-use-goto-statement-in-lambda-expression-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can't use goto
to move between functions, and a lambda defines a separate function to it's enclosing scope.
From this reference
The
goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
And the standard, [stmt.goto]
The
goto
statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label located in the current function.
add a comment |
You can't use goto
to move between functions, and a lambda defines a separate function to it's enclosing scope.
From this reference
The
goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
And the standard, [stmt.goto]
The
goto
statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label located in the current function.
add a comment |
You can't use goto
to move between functions, and a lambda defines a separate function to it's enclosing scope.
From this reference
The
goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
And the standard, [stmt.goto]
The
goto
statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label located in the current function.
You can't use goto
to move between functions, and a lambda defines a separate function to it's enclosing scope.
From this reference
The
goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
And the standard, [stmt.goto]
The
goto
statement unconditionally transfers control to the statement labeled by the identifier. The identifier shall be a label located in the current function.
answered Dec 17 '18 at 12:28
CalethCaleth
17k22139
17k22139
add a comment |
add a comment |
Is there any way to use goto statement in lambda expression?
No. Not to leave the scope of lambda and jump to the enclosing scope. You can only goto
a labeled statement inside the lambda, same as if it were any other function.
Having said that, the uses for goto
in C++ specifically are few and infrequent. There are other, better, options. I urge you not to reach for goto
as the first tool you use.
3
Actually I can't come up with a single use case ofgoto
in C++. In C, I still use it for error handling from time to time.
– liliscent
Dec 17 '18 at 12:40
3
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
1
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
1
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@Spitemaster you usereturn
to break out of a deep loop
– Caleth
Dec 17 '18 at 20:25
|
show 1 more comment
Is there any way to use goto statement in lambda expression?
No. Not to leave the scope of lambda and jump to the enclosing scope. You can only goto
a labeled statement inside the lambda, same as if it were any other function.
Having said that, the uses for goto
in C++ specifically are few and infrequent. There are other, better, options. I urge you not to reach for goto
as the first tool you use.
3
Actually I can't come up with a single use case ofgoto
in C++. In C, I still use it for error handling from time to time.
– liliscent
Dec 17 '18 at 12:40
3
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
1
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
1
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@Spitemaster you usereturn
to break out of a deep loop
– Caleth
Dec 17 '18 at 20:25
|
show 1 more comment
Is there any way to use goto statement in lambda expression?
No. Not to leave the scope of lambda and jump to the enclosing scope. You can only goto
a labeled statement inside the lambda, same as if it were any other function.
Having said that, the uses for goto
in C++ specifically are few and infrequent. There are other, better, options. I urge you not to reach for goto
as the first tool you use.
Is there any way to use goto statement in lambda expression?
No. Not to leave the scope of lambda and jump to the enclosing scope. You can only goto
a labeled statement inside the lambda, same as if it were any other function.
Having said that, the uses for goto
in C++ specifically are few and infrequent. There are other, better, options. I urge you not to reach for goto
as the first tool you use.
answered Dec 17 '18 at 12:28
StoryTellerStoryTeller
94.5k12191254
94.5k12191254
3
Actually I can't come up with a single use case ofgoto
in C++. In C, I still use it for error handling from time to time.
– liliscent
Dec 17 '18 at 12:40
3
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
1
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
1
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@Spitemaster you usereturn
to break out of a deep loop
– Caleth
Dec 17 '18 at 20:25
|
show 1 more comment
3
Actually I can't come up with a single use case ofgoto
in C++. In C, I still use it for error handling from time to time.
– liliscent
Dec 17 '18 at 12:40
3
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
1
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
1
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@Spitemaster you usereturn
to break out of a deep loop
– Caleth
Dec 17 '18 at 20:25
3
3
Actually I can't come up with a single use case of
goto
in C++. In C, I still use it for error handling from time to time.– liliscent
Dec 17 '18 at 12:40
Actually I can't come up with a single use case of
goto
in C++. In C, I still use it for error handling from time to time.– liliscent
Dec 17 '18 at 12:40
3
3
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
@liliscent - I can't come up with one either (unless I'm in some sort of overly constraint environment). But I don't want to make an argument out of ignorance by saying there absolutely is no use.
– StoryTeller
Dec 17 '18 at 12:41
1
1
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
Some state machines are more clearly coded (and more efficient) using goto instead of other techniques. Some C-based SDKs (even when used with C++... say Carbon for example) use goto as the paradigm for error handling.
– Eljay
Dec 17 '18 at 12:47
1
1
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@liliscent Isn't there one for breaking out of multiple loops? I can't think of a better one if you want to break out of all of them at once (even though most of the time it makes more sense to return, I can see a use there).
– Spitemaster
Dec 17 '18 at 18:53
@Spitemaster you use
return
to break out of a deep loop– Caleth
Dec 17 '18 at 20:25
@Spitemaster you use
return
to break out of a deep loop– Caleth
Dec 17 '18 at 20:25
|
show 1 more comment
The goto
statement transfers control to the location specified by label. The goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
You can instead do this:
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
label:
std::cout << "hello, world!" << std::endl;
};
lambda();
return 0;
}
And it will print "Hello World". See demo.
add a comment |
The goto
statement transfers control to the location specified by label. The goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
You can instead do this:
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
label:
std::cout << "hello, world!" << std::endl;
};
lambda();
return 0;
}
And it will print "Hello World". See demo.
add a comment |
The goto
statement transfers control to the location specified by label. The goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
You can instead do this:
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
label:
std::cout << "hello, world!" << std::endl;
};
lambda();
return 0;
}
And it will print "Hello World". See demo.
The goto
statement transfers control to the location specified by label. The goto
statement must be in the same function as the label it is referring, it may appear before or after the label.
You can instead do this:
#include <iostream>
int main()
{
auto lambda = () {
goto label;
return;
label:
std::cout << "hello, world!" << std::endl;
};
lambda();
return 0;
}
And it will print "Hello World". See demo.
answered Dec 17 '18 at 12:28
P.WP.W
11.8k3842
11.8k3842
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53815203%2fhow-to-use-goto-statement-in-lambda-expression-c%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
7
This code is fairly confusing, you should really avoid using
goto
like that, the odds of nothing going wrong are fairly slim. If you could share what you actually wanted to achieve, we might be able to help with that.– Qubit
Dec 17 '18 at 12:26
1
What's the problem you're trying to solve with goto inside a lambda?
– Ami Tavory
Dec 17 '18 at 12:28
@Qubit Maybe my example does not convey very well, but whether or not to use goto statement is not the key of this question.
– 0x11901
Dec 18 '18 at 3:18
@0x11901 My point was related more to the fact of even considering
goto
to move between functions, think of all the issues that arise from something like this, it would become fairly difficult to keep track of what the code does. Not to mention, you then have a function that never reaches thereturn
statement, which seems to defeat the purpose. So the point was, there should never even be a case where you would want to do this, regardless of whether or not it is possible.– Qubit
Dec 18 '18 at 8:39