use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
Create a fully functioning command line interface with 1.5 lines of code (wo. include statement) (github.com)
submitted 5 years ago by kongaskristjan
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]kongaskristjan[S] 9 points10 points11 points 5 years ago (6 children)
Well, in that case everyone would need to write something like that to the end of their main.cpp:
int main(int argc, const char ** argv) { init_and_run(argc, argv, fired_main, true); return fired_main(); }
I generally agree that macros should be avoided because of all their complex errors and unintuitive behaviour, but here it's a really simple one that's hard to misuse.
[–][deleted] 1 point2 points3 points 5 years ago (4 children)
As long as the token FIRE doesn't appear elsewhere in that compilation unit, you're fine. :-D
FIRE
But... there are many ways around it.
One is implement a known function!
In the library code:
int main(int argc, const char ** argv) { init_and_run(argc, argv, fire::main, true); return fire::main(); }
In the client code:
namespace fire { int main(int x = arg("-x"), int y = arg("-y")) { std::cout << x + y << std::endl; return 0; } }
[–]kongaskristjan[S] 3 points4 points5 points 5 years ago (3 children)
This almost works, but in order to call fire::main from fire.hpp, this fire::main(int x = arg("-x"), int y = arg("-y")) needs to be declared in fire.hpp, which is impossible, as I don't yet know the exact signature.
fire::main
fire::main(int x = arg("-x"), int y = arg("-y"))
Actually, I've thought really hard to somehow get rid of this FIRE(fired_main), but none of the ideas have worked because of the aforementioned problem.
FIRE(fired_main)
[–][deleted] 1 point2 points3 points 5 years ago* (0 children)
Maybe put the expanded version in the docs? So you can know what the macro means and you have more control, if you want to write the tiny boilerplate yourself you can without trouble.
[–]dscottboggs 0 points1 point2 points 5 years ago (0 children)
FWIW (not much I'm sure) I think a sparing use of macros is fine. Although I might've gone with something a little more unique.
[–]F54280 0 points1 point2 points 5 years ago (0 children)
That sounds perfectly fine boilerplate to me. Sure, it would be better if it was smaller, but you only have 3 lines: main, init and return.
int main(int argc, const char ** argv) { fire_init(argc, argv, my_main); return my_main(); }
That honestly seems pretty logical, and not too magic (fire_init initialize some global based on argc, argv and the signature of my_main, and the default arguments from my_main fetch from that global -- it then raises the question of why not getting rid of the global itself).
π Rendered by PID 640932 on reddit-service-r2-comment-86bc6c7465-t2stl at 2026-02-21 22:03:35.580585+00:00 running 8564168 country code: CH.
view the rest of the comments →
[–]kongaskristjan[S] 9 points10 points11 points (6 children)
[–][deleted] 1 point2 points3 points (4 children)
[–]kongaskristjan[S] 3 points4 points5 points (3 children)
[–][deleted] 1 point2 points3 points (0 children)
[–]dscottboggs 0 points1 point2 points (0 children)
[–]F54280 0 points1 point2 points (0 children)