{"id":6881,"date":"2024-02-12T14:56:57","date_gmt":"2024-02-12T20:56:57","guid":{"rendered":"https:\/\/www.logikalsolutions.com\/wordpress\/?p=6881"},"modified":"2024-02-13T08:05:46","modified_gmt":"2024-02-13T14:05:46","slug":"never","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/","title":{"rendered":"C++ \u2014 Never Do&#8217;s"},"content":{"rendered":"\n<p>No, Never Do isn&#8217;t a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some things you should never do in your code. I&#8217;ve spent nearly 40 years in IT now. For the past decade I&#8217;ve been working in the medical device realm. Prior to that I wrote great big boring systems for great big companies. This be what you don&#8217;t do in C++ today.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Override &amp;&amp; or ||<\/h2>\n\n\n\n<p>The standard will let you do it, but it will never work correctly. <\/p>\n\n\n\n<p>All of you know that if the first test fails the second test doesn&#8217;t even happen, correct? Not when you override &amp;&amp;. That only happens for the built-in operator. When you declare the &amp;&amp; operator for your class, you cannot even be sure which expression will be evaluated first. Think that is a minor inefficiency?<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"MyBadClass abc;\nMyBadClass def;\nMyBadClass ghi;\nMyBadClass jkl;\n\n...\n\nif ( (abc || def) &amp;&amp; (ghi || jkl) )\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">MyBadClass abc;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">MyBadClass def;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">MyBadClass ghi;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">MyBadClass jkl;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( (abc <\/span><span style=\"color: #F97583\">||<\/span><span style=\"color: #B392F0\"> def) <\/span><span style=\"color: #F97583\">&amp;&amp;<\/span><span style=\"color: #B392F0\"> (ghi <\/span><span style=\"color: #F97583\">||<\/span><span style=\"color: #B392F0\"> jkl) )<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>What happens if you&#8217;re custom class that overrode these did it because you thought it would be way cool to both step the motor in the robot arm while testing? The last two movements aren&#8217;t supposed to happen until the first two have cut as far as needed in a human heart.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Omit {} Around a Single Statement Condition<\/h2>\n\n\n\n<p>You will actually find that one in the <a href=\"https:\/\/barrgroup.com\/embedded-systems\/books\/embedded-c-coding-standard\">Barr Group Coding Standard for Embedded Systems<\/a>. It&#8217;s a good rule. One I arrived at after thinking code &#8220;looked better&#8221; without them. When you do this<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"if (!eof)\n   idx.read_next();\n   \" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (<\/span><span style=\"color: #F97583\">!<\/span><span style=\"color: #B392F0\">eof)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">   <\/span><span style=\"color: #79B8FF\">idx<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">read_next();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">   <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>is you end up needing some kind of debug statement or additional logic. While it may seem trivial in a 2-line example when you&#8217;ve got a screen length if-else-if-else nested to various levels and most having just one line, it&#8217;s a house of cards waiting for someone to kick the table. 99 times out of a hundred it&#8217;s not even properly aligned.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/ecomputernotes.com\/images\/the-if--e1se--if-ladder.jpg\" alt=\"\"\/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.cs.mtsu.edu\/~xyang\/images\/multiway.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>I&#8217;ve opened up source code that had over a hundred line if statement that looked much like the above only they also indented when the true side of the if had another if.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Put { on the Same Line as Code<\/h2>\n\n\n\n<p>No, that&#8217;s not valid C++. That&#8217;s for Java and JavaScript. Again this is one from the Barr Coding Standard and it is a good one. Lots of studies have been done and it is determined that the human brain needs the visual separation. We need to visually know with just a glance what language we are looking at. There have been too many C++ wanna-be languages and now we are in multi-language projects.<\/p>\n\n\n\n<p>Know this, the embedded systems will be in C\/C++ because you cannot use Python for a medical device. FDA regulations mandate <em>static source code analysis on a type-safe language<\/em>. Sometimes you get forced into situations like this and the boundaries matter.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"void MainWindow::menuShortCutsFromScintilla()\n{\n    EdtEditWidget *ptr = static_cast&lt;EdtEditWidget *&gt;( m_tabWidget-&gt;currentWidget() );\n    QString keySequence;\n\n    if ( ptr )\n    {\n        Scintilla::Message msg = static_cast&lt;Scintilla::Message&gt;( SCI_REDO );\n        keySequence = ptr-&gt;editor()-&gt;keyForMessage( msg, 1 );\n\n        if ( keySequence.length() &gt; 0 )\n        {\n            m_actionRedo-&gt;setShortcut( QKeySequence( keySequence ) );\n        }\n\n        msg = static_cast&lt;Scintilla::Message&gt;( SCI_UNDO );\n        keySequence = ptr-&gt;editor()-&gt;keyForMessage( msg, 1 );\n\n        if ( keySequence.length() &gt; 0 )\n        {\n            m_actionUndo-&gt;setShortcut( QKeySequence( keySequence ) );\n        }\n\n        msg = static_cast&lt;Scintilla::Message&gt;( SCI_CUT );\n        keySequence = ptr-&gt;editor()-&gt;keyForMessage( msg, 1 );\n\n        if ( keySequence.length() &gt; 0 )\n        {\n            m_actionCut-&gt;setShortcut( QKeySequence( keySequence ) );\n        }\n\n        msg = static_cast&lt;Scintilla::Message&gt;( SCI_COPY );\n        keySequence = ptr-&gt;editor()-&gt;keyForMessage( msg, 1 );\n\n        if ( keySequence.length() &gt; 0 )\n        {\n            m_actionCopy-&gt;setShortcut( QKeySequence( keySequence ) );\n        }\n\n        msg = static_cast&lt;Scintilla::Message&gt;( SCI_PASTE );\n        keySequence = ptr-&gt;editor()-&gt;keyForMessage( msg, 1 );\n\n        if ( keySequence.length() &gt; 0 )\n        {\n            m_actionPaste-&gt;setShortcut( QKeySequence( keySequence ) );\n        }\n\n        msg = static_cast&lt;Scintilla::Message&gt;( SCI_SELECTALL );\n        keySequence = ptr-&gt;editor()-&gt;keyForMessage( msg, 1 );\n\n        if ( keySequence.length() &gt; 0 )\n        {\n            m_actionSelectAll-&gt;setShortcut( QKeySequence( keySequence ) );\n        }\n    }\n\n    keySequence = Overlord::getInstance()-&gt;beginSelectionKeySequence();\n\n    if ( keySequence.length() &gt; 0 )\n    {\n        m_actionSelectionBegin-&gt;setShortcut( QKeySequence( keySequence ) );\n    }\n\n    keySequence = Overlord::getInstance()-&gt;clearSelectionKeySequence();\n\n    if ( keySequence.length() &gt; 0 )\n    {\n        m_actionSelectionClear-&gt;setShortcut( QKeySequence( keySequence ) );\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> MainWindow<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">menuShortCutsFromScintilla()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    EdtEditWidget <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #B392F0\">ptr <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">EdtEditWidget <\/span><span style=\"color: #F97583\">*&gt;<\/span><span style=\"color: #B392F0\">( <\/span><span style=\"color: #79B8FF\">m_tabWidget<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">currentWidget() );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString keySequence;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( ptr )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message msg <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">( SCI_REDO );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">ptr<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">editor()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">keyForMessage( msg<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #79B8FF\">m_actionRedo<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        msg <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">( SCI_UNDO );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">ptr<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">editor()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">keyForMessage( msg<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #79B8FF\">m_actionUndo<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        msg <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">( SCI_CUT );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">ptr<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">editor()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">keyForMessage( msg<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #79B8FF\">m_actionCut<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        msg <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">( SCI_COPY );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">ptr<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">editor()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">keyForMessage( msg<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #79B8FF\">m_actionCopy<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        msg <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">( SCI_PASTE );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">ptr<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">editor()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">keyForMessage( msg<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #79B8FF\">m_actionPaste<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        msg <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">static_cast&lt;<\/span><span style=\"color: #B392F0\">Scintilla<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">Message<\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\">( SCI_SELECTALL );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">ptr<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">editor()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">keyForMessage( msg<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">1<\/span><span style=\"color: #B392F0\"> );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">            <\/span><span style=\"color: #79B8FF\">m_actionSelectAll<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">beginSelectionKeySequence();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">m_actionSelectionBegin<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    keySequence <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> Overlord<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">getInstance()<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">clearSelectionKeySequence();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> ( <\/span><span style=\"color: #79B8FF\">keySequence<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #B392F0\">length() <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\"> )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">m_actionSelectionClear<\/span><span style=\"color: #BBBBBB\">-&gt;<\/span><span style=\"color: #B392F0\">setShortcut( QKeySequence( keySequence ) );<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you think that is unreasonable, think again. That&#8217;s from a programmer&#8217;s text editor that allows one to override default keyboard shortcuts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Put More Than 130 Characters on a Line<\/h2>\n\n\n\n<p>Today&#8217;s text editors will let you go to unbelievable lengths on a line but it is impossible for programmers to &#8220;see&#8221; the logic flow when you do that. The Barr standard actually wants less than 80. I understand, but with C++ that isn&#8217;t realistic. It&#8217;s not just because terminals used to support only 80 columns. Lots of code had to be sent via UseNet or to paper terminals which doubled as printers. We also had IBM <a href=\"https:\/\/en.wikipedia.org\/wiki\/Telecommunications_Access_Method\">TCAM<\/a> to deal with. Because of the additional control codes (&lt;CR&gt;&lt;LF&gt;&lt;STX&gt;&lt;ETX&gt; and a couple others) you could only send 72 printable characters without wrapping.<\/p>\n\n\n\n<p>Today, in a nice readable font, you can easily display 130 characters. Printers are more than capable of printing 132 characters on a line so nothing wraps when you need to make a printout. Most importantly, if you limit the lines to one screen height per function, a <em>developer can see the flow<\/em>.<\/p>\n\n\n\n<p><strong><em>When you open a source file and see a bunch of lines running off the right side of the screen you know that was written by a hack!<\/em><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Bury a Private Class in a Source File<\/h2>\n\n\n\n<p>When you see stuff like this<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"419\" height=\"121\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/01\/q-d-001.png\" alt=\"\" class=\"wp-image-6819\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/01\/q-d-001.png 419w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/01\/q-d-001-300x87.png 300w\" sizes=\"(max-width: 419px) 100vw, 419px\" \/><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"477\" height=\"76\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/01\/q_d-002.png\" alt=\"\" class=\"wp-image-6820\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/01\/q_d-002.png 477w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/01\/q_d-002-300x48.png 300w\" sizes=\"(max-width: 477px) 100vw, 477px\" \/><\/figure>\n<\/div>\n\n\n<p>know that you are dealing with an archaic legacy application\/framework. Typically they tried to span languages between C++ and non-type-safe languages like Python, JavaScript, insert-scripting-language-here. The only way they could make that house of cards function was to bury the functionality. If your use case doesn&#8217;t fit into the original developer&#8217;s tiny mind, you can&#8217;t make it work. You have to pull in a ton of their build configuration and dependencies just to override a simple thing. You can read a bit more about this in my <em><a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/application-frameworks\/\">Death of Commercial Application Frameworks<\/a><\/em> post.<\/p>\n\n\n\n<p>None of you write tight enough code to bury it in a hidden class. None of you can make proper decisions for all use cases when it comes to what to make private. If your use case wants\/needs a buried &#8220;private&#8221; class you can simply inherit private.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class MyBetterClass : private MyBaseClass\n{\n...\n};\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> MyBetterClass <\/span><span style=\"color: #BBBBBB\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> MyBaseClass<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">};<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>For your use class everything from MyBaseClass will be private in your derived class. If you want almost all of it to be private you can override certain methods and\/or member variables. If they were public in the base class and you want them public (or protected) in your derived class.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class MyBetterClass : private MyBaseClass\n{\npublic:\n   using MyBaseClass::nukeSomething();\n   \n protected:\n    using MyBaseClass::visible;\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> MyBetterClass <\/span><span style=\"color: #BBBBBB\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> MyBaseClass<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">public<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">   <\/span><span style=\"color: #F97583\">using<\/span><span style=\"color: #B392F0\"> MyBaseClass<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nukeSomething();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">protected<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">using<\/span><span style=\"color: #B392F0\"> MyBaseClass<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">visible;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Just remember, you can increase protection when deriving, you cannot decrease it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Single Exception to This Never<\/h3>\n\n\n\n<p>Human\/animal safety is the one time it is recommended to bury access in a hidden private class.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.iwavesystems.com\/wp-content\/uploads\/2020\/10\/iW-RainboW-G27M-Block-Diagram.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>When you are developing a custom carrier board for a SoM or SoC one can override\/re-purpose a great many of the edge connector pins as well as the expansion and header pins. Any time one of those pins is used for human\/animal safety it is advisable to bury all access to it in a hidden private class.<\/p>\n\n\n\n<p>What kind of safety? <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If this pin has voltage the robot arm is physically blocked from starting surgery because staff haven&#8217;t completed one or many pre-surgical safety tasks.<\/li>\n\n\n\n<li>Until this pin gets voltage the forklift cannot move. The pin won&#8217;t get voltage until a sensor stating the operator&#8217;s ass is in the seat sends voltage in on some other pin.<\/li>\n\n\n\n<li>The automobile cannot be put in gear until this pin has power and this pin will not have power until the drunk has blown into the breathalyzer and it determines they are legal to drive.<\/li>\n<\/ul>\n\n\n\n<p>You get the idea. Those pins have to be protected so they cannot be randomly written to via stray pointer or some other code anomaly.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Provide Comparison Operators Without Explicit Constructors<\/h2>\n\n\n\n<p>This fries a lot of eggs. Let&#8217;s go back to the <a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/initialization\/\">C++ Initialization and Constructors Post<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class FileDetails\n{\npublic:\n\n    FileDetails( std::optional&lt;const QString&gt; fileName      = std::nullopt,\n                 std::optional&lt;const QString&gt; cacheFileName = std::nullopt,\n                 std::optional&lt;const QString&gt; lexerName     = std::nullopt,\n                 std::optional&lt;const QString&gt; tabText       = std::nullopt,\n                 std::optional&lt;int&gt;           eolMode       = std::nullopt,\n                 std::optional&lt;sptr_t&gt;        pos           = std::nullopt,\n                 std::optional&lt;sptr_t&gt;        lineNumber    = std::nullopt,\n                 std::optional&lt;int&gt;           lineWrap      = std::nullopt,\n                 std::optional&lt;bool&gt;          readOnly      = std::nullopt,\n                 std::optional&lt;bool&gt;          autoIndent    = std::nullopt,\n                 std::optional&lt;bool&gt;          isDirty       = std::nullopt );\n\n    FileDetails( const FileDetails &amp;other ) = default;\n    \n    QString fileName();\n\n...\n\nprivate:\n    \/\/ QString initializes itself to empty string\n    \/\/ only have to set the one we need filled in\n    \/\/\n    QString m_fileName;\n    QString m_cacheFileName;\n    QString m_lexerName {&quot;null&quot;};\n    QString m_tabText;\n    int     m_eolMode {SC_EOL_LF};\n    sptr_t  m_pos {0};\n    sptr_t  m_lineNumber {0};\n    int     m_lineWrap {SC_WRAP_NONE};\n    bool    m_readOnly {false};\n    bool    m_isDirty  {false};\n    bool    m_autoIndentEnabled {false};\n};\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> FileDetails<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">public<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; fileName      <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; cacheFileName <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; lexerName     <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> QString&gt; tabText       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">&gt;           eolMode       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">&gt;        pos           <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">&gt;        lineNumber    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">&gt;           lineWrap      <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">&gt;          readOnly      <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">&gt;          autoIndent    <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">                 std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">optional&lt;<\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">&gt;          isDirty       <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> std<\/span><span style=\"color: #BBBBBB\">::<\/span><span style=\"color: #B392F0\">nullopt );<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    FileDetails( <\/span><span style=\"color: #F97583\">const<\/span><span style=\"color: #B392F0\"> FileDetails <\/span><span style=\"color: #F97583\">&amp;<\/span><span style=\"color: #B392F0\">other ) <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">default<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString fileName();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">private<\/span><span style=\"color: #BBBBBB\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">    \/\/ QString initializes itself to empty string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">    \/\/ only have to set the one we need filled in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">    \/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_fileName;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_cacheFileName;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_lexerName {<\/span><span style=\"color: #FFAB70\">&quot;null&quot;<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    QString m_tabText;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">     m_eolMode {SC_EOL_LF};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">  m_pos {<\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #79B8FF\">sptr_t<\/span><span style=\"color: #B392F0\">  m_lineNumber {<\/span><span style=\"color: #F8F8F8\">0<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\">     m_lineWrap {SC_WRAP_NONE};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">    m_readOnly {<\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">    m_isDirty  {<\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">bool<\/span><span style=\"color: #B392F0\">    m_autoIndentEnabled {<\/span><span style=\"color: #79B8FF\">false<\/span><span style=\"color: #B392F0\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">};<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>That constructor would have to have an explicit clause on it if I were to provide ==, &lt;, or &gt; operators. This happens a lot with classes that have numeric parameters but I can show you here as well. Let us assume such operators are defined, what happens when someone gets lazy, tired, or distracted while coding. That want to see if the value in m_fileName matches a given name.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"FileDetails fred(&quot;instructions.txt&quot;);\n\n...\n\n\/\/ Oops! This constructs a FileDetails object and compares them\n\/\/ names are same but rest of fields will not be and will return false.\nif (fred == &quot;instructions.txt&quot;)\n\n...\n\n\/\/ Oops! This constructs a FileDetails object with main.cpp and assigns it to fred\n\/\/ should always return true.\nif (fred = &quot;main.cpp&quot;)\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">FileDetails fred(<\/span><span style=\"color: #FFAB70\">&quot;instructions.txt&quot;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Oops! This constructs a FileDetails object and compares them<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ names are same but rest of fields will not be and will return false.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (fred <\/span><span style=\"color: #F97583\">==<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;instructions.txt&quot;<\/span><span style=\"color: #B392F0\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ Oops! This constructs a FileDetails object with main.cpp and assigns it to fred<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6B737C\">\/\/ should always return true.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (fred <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;main.cpp&quot;<\/span><span style=\"color: #B392F0\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>While some of today&#8217;s compilers will catch the use of a single = in the second if, Yoda Coding allows even old compilers to catch it.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"if (&quot;main.cpp&quot; = fred)\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">if<\/span><span style=\"color: #B392F0\"> (<\/span><span style=\"color: #FFAB70\">&quot;main.cpp&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> fred)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Will fail to compile every time.<\/p>\n\n\n\n<p>What the programmer needed to do was use fred.fileName(), but they got in a hurry. Because this class needed to be easy to use it did not put explicit on the constructor. If it had one would need to do this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"FileDetails Ethyl( QString(&quot;MainWindow.cpp&quot;));\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">FileDetails Ethyl( QString(<\/span><span style=\"color: #FFAB70\">&quot;MainWindow.cpp&quot;<\/span><span style=\"color: #B392F0\">));<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>because it couldn&#8217;t promote an ordinary string to a QString.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Put Locals Before Globals<\/h2>\n\n\n\n<p>How many of you know that #include &#8220;myclass.h&#8221; is a <em>local<\/em> include and #include &lt;stdio.h&gt; is a global include? During the days of DOS, 20 MEG hard drives and 1.2 MEG floppy disks this was a much needed optimization. I\/O was sloooooowwwww. You only wanted to look one place for a file. <\/p>\n\n\n\n<p>C and even C++ programmers got enamored with MACROS. I worked in one shop where a single developer had tried to write the entire system using macros. Early compilers wouldn&#8217;t flag macro re-definition as any kind of warning or error. They are a bit better today, but even <a href=\"https:\/\/support.microsoft.com\/en-us\/topic\/fix-macro-redefinition-message-occurs-if-you-include-the-errno-h-and-winsock-h-header-files-in-your-c-code-in-windows-embedded-compact-2013-6215d545-c066-84f2-bd45-2fd7721005f7\">Microsoft got burned by this recently<\/a>.<\/p>\n\n\n\n<p>Honestly, I&#8217;ve tried to use libraries from different places and had one do this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#define TRUE 1\n#define FALSE 0\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> TRUE 1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> FALSE 0<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>and another do this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#define TRUE 0\n#define FALSE 1\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> TRUE 0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> FALSE 1<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>nice, huh? You can still torpedo yourself from afar by putting your own local include files ahead of global include files in source files.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#include &quot;MyInclude.h&quot;\n#include &lt;thirdpartylib.h&gt;    \/\/ some third party library main header file\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">#include<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;MyInclude.h&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">#include<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&lt;thirdpartylib.h&gt;<\/span><span style=\"color: #B392F0\">    <\/span><span style=\"color: #6B737C\">\/\/ some third party library main header file<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now, let us assume somewhere inside MyInclude.h you have the following:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#define EXTENSION txt\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> EXTENSION txt<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>But in thirdpartylib.h you have<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#define SUPPORTED_FILE_EXTENSION_LIST &quot;.cpp,.c,.h,.hpp,.cxx,.hxx&quot;\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> SUPPORTED_FILE_EXTENSION_LIST &quot;.cpp,.c,.h,.hpp,.cxx,.hxx&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The library you link against was compiled with that definition of the macro. Trouble is, after processing your local include the compiler will change the macro to be<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Deja-Vu-Mono.ttf\" style=\"font-size:.875rem;font-family:Code-Pro-Deja-Vu-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1f1f1f\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"#define SUPPORTED_FILE_txt_LIST &quot;.cpp,.c,.h,.hpp,.cxx,.hxx&quot;\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">#define<\/span><span style=\"color: #B392F0\"> SUPPORTED_FILE_txt_LIST &quot;.cpp,.c,.h,.hpp,.cxx,.hxx&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Yes, compilers have gotten better about catching such things. You can minimize self-inflicted damage by placing your locals after globals. Most IDEs with code generation make this difficult though.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Never Use Smart Pointers in a Mixed Language Application<\/h2>\n\n\n\n<p>Your C++ compilation unit doesn&#8217;t know about the outside world. You don&#8217;t know about the outside world. All you know is you are calling some OS provided function or third party library. It has no idea bout your Smart Pointer. For more details on the subject, <a href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/smart-pointers\/\">read this post<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No, Never Do isn&#8217;t a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some things you should never do in your code. I&#8217;ve spent nearly 40 years in IT now. For the past decade I&#8217;ve been working in the medical device realm. Prior to that I wrote great big boring systems for great big companies. This be what you don&#8217;t do in &hellip; <a title=\"C++ \u2014 Never Do&#8217;s\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/\"><span class=\"screen-reader-text\">C++ \u2014 Never Do&#8217;s<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":6848,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1309,3],"tags":[1504,159],"class_list":["post-6881","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-experience","category-information-technology","tag-c","tag-qt","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>C++ \u2014 Never Do&#039;s &#8211; Logikal Blog<\/title>\n<meta name=\"description\" content=\"No, Never Do isn&#039;t a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some . . .\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C++ \u2014 Never Do&#039;s &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"No, Never Do isn&#039;t a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some . . .\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-12T20:56:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-13T14:05:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png\" \/>\n\t<meta property=\"og:image:width\" content=\"256\" \/>\n\t<meta property=\"og:image:height\" content=\"288\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seasoned_geek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"seasoned_geek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"C++ \u2014 Never Do&#8217;s\",\"datePublished\":\"2024-02-12T20:56:57+00:00\",\"dateModified\":\"2024-02-13T14:05:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/\"},\"wordCount\":1602,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"keywords\":[\"C++\",\"Qt\"],\"articleSection\":[\"Experience\",\"Information Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/\",\"name\":\"C++ \u2014 Never Do's &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"datePublished\":\"2024-02-12T20:56:57+00:00\",\"dateModified\":\"2024-02-13T14:05:46+00:00\",\"description\":\"No, Never Do isn't a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some . . .\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/cpp-icon.png\",\"width\":256,\"height\":288,\"caption\":\"C++ image from icons-library.com\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/never\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C++ \u2014 Never Do&#8217;s\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\",\"name\":\"Logikal Blog\",\"description\":\"For people with attention spans longer than a Tweet\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\",\"name\":\"seasoned_geek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"caption\":\"seasoned_geek\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\"},\"description\":\"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\\\/Qt touchscreen\\\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \\\"Zinc It!\\\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \\\"The Minimum You Need to Know to Be an OpenVMS Application Developer\\\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \\\"The Minimum You Need to Know\\\" book series was born. Three years later he wrote his first novel \\\"Infinite Exposure\\\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \\\"The Earth That Was\\\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.\",\"sameAs\":[\"https:\\\/\\\/theminimumyouneedtoknow.com\"],\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/seasoned_geek\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C++ \u2014 Never Do's &#8211; Logikal Blog","description":"No, Never Do isn't a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some . . .","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/","og_locale":"en_US","og_type":"article","og_title":"C++ \u2014 Never Do's &#8211; Logikal Blog","og_description":"No, Never Do isn't a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some . . .","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/","og_site_name":"Logikal Blog","article_published_time":"2024-02-12T20:56:57+00:00","article_modified_time":"2024-02-13T14:05:46+00:00","og_image":[{"width":256,"height":288,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","type":"image\/png"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"C++ \u2014 Never Do&#8217;s","datePublished":"2024-02-12T20:56:57+00:00","dateModified":"2024-02-13T14:05:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/"},"wordCount":1602,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","keywords":["C++","Qt"],"articleSection":["Experience","Information Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/","name":"C++ \u2014 Never Do's &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","datePublished":"2024-02-12T20:56:57+00:00","dateModified":"2024-02-13T14:05:46+00:00","description":"No, Never Do isn't a new loop type though it can be what happens when you ASS-U-ME a default value for a loop variable. These are some . . .","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2024\/02\/cpp-icon.png","width":256,"height":288,"caption":"C++ image from icons-library.com"},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/never\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"C++ \u2014 Never Do&#8217;s"}]},{"@type":"WebSite","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website","url":"https:\/\/www.logikalsolutions.com\/wordpress\/","name":"Logikal Blog","description":"For people with attention spans longer than a Tweet","publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logikalsolutions.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842","name":"seasoned_geek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","caption":"seasoned_geek"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r"},"description":"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\/Qt touchscreen\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \"Zinc It!\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \"The Minimum You Need to Know to Be an OpenVMS Application Developer\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \"The Minimum You Need to Know\" book series was born. Three years later he wrote his first novel \"Infinite Exposure\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \"The Earth That Was\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.","sameAs":["https:\/\/theminimumyouneedtoknow.com"],"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/seasoned_geek\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/6881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=6881"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/6881\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/6848"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=6881"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=6881"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=6881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}