{"id":1351,"date":"2021-04-02T13:49:05","date_gmt":"2021-04-02T20:49:05","guid":{"rendered":"https:\/\/coderpad-staging.io\/?post_type=programming-language&#038;p=1074"},"modified":"2023-04-17T03:49:41","modified_gmt":"2023-04-17T10:49:41","slug":"cpp","status":"publish","type":"programming-language","link":"https:\/\/coderpad.io\/languages\/cpp\/","title":{"rendered":"C++"},"content":{"rendered":"\n<p>We run your C++ code with GCC 8. You should define an&nbsp;<code>int main()<\/code>&nbsp;entrypoint. The gcc compiler is invoked with the following args:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs shcb-wrap-lines\">g++ -Wall -fsanitize=address -std=c++17 -pthread \\\n-lboost_date_time -lboost_regex -lboost_system -lboost_thread -lboost_timer -lboost_filesystem \\\n-lssl -lcrypto -lmysqlcppconn\n<\/code><\/span><\/pre>\n\n\n<p>Which results in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use the C++17 standard<\/li>\n\n\n\n<li>Turn on all warning messages<\/li>\n\n\n\n<li>Compile in debug mode<\/li>\n\n\n\n<li>Warn on memory use-after-free bugs and other memory issues with&nbsp;<a href=\"https:\/\/github.com\/google\/sanitizers\/wiki\/AddressSanitizer\" target=\"_blank\" rel=\"noopener\">ASan<\/a>. If you see an unusual message or segfault, it\u2019s likely ASan picking up a use-after-free or use of uninitialized memory bug in your code.<\/li>\n\n\n\n<li>Link the&nbsp;<code>pthread<\/code>&nbsp;library<\/li>\n\n\n\n<li>Link a few static boost libraries<\/li>\n<\/ul>\n\n\n\n<p>We also provide a few libraries:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.boost.org\/\" target=\"_blank\" rel=\"noopener\">Boost<\/a>&nbsp;is provided, with most of its header-only libraries working straight out of the box. Of its statically compiled components, we link to&nbsp;<code>DateTime<\/code>,&nbsp;<code>Regex<\/code>,&nbsp;<code>System<\/code>,&nbsp;<code>Thread<\/code>, and&nbsp;<code>Timer<\/code>. If you need more than those, please let us know!<\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/nlohmann\/json\" target=\"_blank\" rel=\"noopener\">nlohmann\/json<\/a>, a convenient and simple JSON library. To use it on CoderPad, just include&nbsp;<code>\"json.hpp\"<\/code>&nbsp;and go nuts:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\">  <span class=\"hljs-selector-id\">#include<\/span> \"<span class=\"hljs-selector-tag\">json<\/span><span class=\"hljs-selector-class\">.hpp<\/span>\"\n  <span class=\"hljs-selector-id\">#include<\/span> &lt;<span class=\"hljs-selector-tag\">iostream<\/span>&gt;\n\n  <span class=\"hljs-selector-tag\">int<\/span> <span class=\"hljs-selector-tag\">main<\/span>() {\n    <span class=\"hljs-attribute\">nlohmann<\/span>::json j2 = {\n      {<span class=\"hljs-string\">\"hello\"<\/span>, <span class=\"hljs-string\">\"world\"<\/span>}\n    };\n    <span class=\"hljs-selector-tag\">std<\/span><span class=\"hljs-selector-pseudo\">::cout<\/span> &lt;&lt; <span class=\"hljs-selector-tag\">j2<\/span>;\n  }\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/philsquared\/Catch\" target=\"_blank\" rel=\"noopener\">Catch<\/a>, a C++ testing library. Catch is a single-header library and very easy to get started with. To use it on CoderPad, simply define a macro and include the header like so:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C++\" data-shcb-language-slug=\"cpp\"><span><code class=\"hljs language-cpp shcb-wrap-lines\">  <span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">define<\/span> CATCH_CONFIG_MAIN<\/span>\n  <span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">\"catch.hpp\"<\/span><\/span>\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">Factorial<\/span><span class=\"hljs-params\">( <span class=\"hljs-keyword\">unsigned<\/span> <span class=\"hljs-keyword\">int<\/span> number )<\/span> <\/span>{\n      <span class=\"hljs-keyword\">return<\/span> number &lt;= <span class=\"hljs-number\">1<\/span> ? <span class=\"hljs-number\">1<\/span> : Factorial(number - <span class=\"hljs-number\">1<\/span>) * number;\n  }\n\n  TEST_CASE( <span class=\"hljs-string\">\"Factorials are computed\"<\/span>, <span class=\"hljs-string\">\"&#91;factorial]\"<\/span> ) {\n      REQUIRE( Factorial(<span class=\"hljs-number\">0<\/span>) == <span class=\"hljs-number\">1<\/span> );\n      REQUIRE( Factorial(<span class=\"hljs-number\">1<\/span>) == <span class=\"hljs-number\">1<\/span> );\n      REQUIRE( Factorial(<span class=\"hljs-number\">2<\/span>) == <span class=\"hljs-number\">2<\/span> );\n      REQUIRE( Factorial(<span class=\"hljs-number\">3<\/span>) == <span class=\"hljs-number\">6<\/span> );\n      REQUIRE( Factorial(<span class=\"hljs-number\">10<\/span>) == <span class=\"hljs-number\">3628800<\/span> );\n  }\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C++<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cpp<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you do so, you should&nbsp;<em>NOT <\/em>define your own main method. You can also read more about&nbsp;<a href=\"https:\/\/github.com\/philsquared\/Catch\/blob\/master\/docs\/tutorial.md#test-cases-and-sections\" target=\"_blank\" rel=\"noopener\">Catch\u2019s macros for testing<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/eigen.tuxfamily.org\/index.php?title=Main_Page\" target=\"_blank\" rel=\"noopener\">Eigen<\/a>, a library for linear algebra. We provide&nbsp;<a href=\"https:\/\/eigen.tuxfamily.org\/dox\/group__QuickRefPage.html#QuickRef_Headers\" target=\"_blank\" rel=\"noopener\">all of the Eigen modules and header files<\/a>&nbsp;to the environment. To use it in CoderPad, just include the header that you want and instantiate an object:<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"C++\" data-shcb-language-slug=\"cpp\"><span><code class=\"hljs language-cpp shcb-wrap-lines\">  <span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">&lt;iostream&gt;<\/span><\/span>\n  <span class=\"hljs-meta\">#<span class=\"hljs-meta-keyword\">include<\/span> <span class=\"hljs-meta-string\">&lt;Eigen\/Dense&gt;<\/span><\/span>\n\n  <span class=\"hljs-keyword\">using<\/span> Eigen::MatrixXd;\n\n  <span class=\"hljs-function\"><span class=\"hljs-keyword\">int<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span>\n  <\/span>{\n    <span class=\"hljs-function\">MatrixXd <span class=\"hljs-title\">m<\/span><span class=\"hljs-params\">(<span class=\"hljs-number\">2<\/span>,<span class=\"hljs-number\">2<\/span>)<\/span><\/span>;\n    m(<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">0<\/span>) = <span class=\"hljs-number\">3<\/span>;\n    m(<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>) = <span class=\"hljs-number\">2.5<\/span>;\n    m(<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">1<\/span>) = <span class=\"hljs-number\">-1<\/span>;\n    m(<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">1<\/span>) = m(<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>) + m(<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-number\">1<\/span>);\n    <span class=\"hljs-built_in\">std<\/span>::<span class=\"hljs-built_in\">cout<\/span> &lt;&lt; m &lt;&lt; <span class=\"hljs-built_in\">std<\/span>::<span class=\"hljs-built_in\">endl<\/span>;\n  }<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C++<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cpp<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"parent":0,"menu_order":0,"template":"","class_list":["post-1351","programming-language","type-programming-language","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/programming-language\/1351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/programming-language"}],"about":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/types\/programming-language"}],"wp:attachment":[{"href":"https:\/\/coderpad.io\/wp-json\/wp\/v2\/media?parent=1351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}