Files
website/coding-style/index.html
2025-11-20 13:17:01 +00:00

1205 lines
64 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Midnight Commander Development Center">
<meta name="author" content="Yury V. Zaytsev">
<link rel="canonical" href="https://midnight-commander.org/coding-style/">
<link rel="prev" href="../source-code/">
<link rel="next" href="../translations/">
<link rel="icon" href="../img/mc-logo.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.22">
<title>Coding style - Midnight Commander</title>
<link rel="stylesheet" href="../assets/stylesheets/main.84d31ad4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Fira+Mono:300,300i,400,400i,700,700i%7CFira+Code:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Fira Mono";--md-code-font:"Fira Code"}</style>
<link rel="stylesheet" href="../stylesheets/extra.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#coding-style" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="Midnight Commander" class="md-header__button md-logo" aria-label="Midnight Commander" data-md-component="logo">
<img src="../img/mc-logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Midnight Commander
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Coding style
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/MidnightCommander/mc" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
MidnightCommander/mc
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="Midnight Commander" class="md-nav__button md-logo" aria-label="Midnight Commander" data-md-component="logo">
<img src="../img/mc-logo.png" alt="logo">
</a>
Midnight Commander
</label>
<div class="md-nav__source">
<a href="https://github.com/MidnightCommander/mc" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
</div>
<div class="md-source__repository">
MidnightCommander/mc
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../maintainers/" class="md-nav__link">
<span class="md-ellipsis">
Maintainers
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../communication/" class="md-nav__link">
<span class="md-ellipsis">
Communication
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../other/" class="md-nav__link">
<span class="md-ellipsis">
Other resources
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
<span class="md-ellipsis">
Development
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Development
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../source-code/" class="md-nav__link">
<span class="md-ellipsis">
Source code
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Coding style
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Coding style
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#readable-code" class="md-nav__link">
<span class="md-ellipsis">
Readable code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#comments" class="md-nav__link">
<span class="md-ellipsis">
Comments
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#conditionals" class="md-nav__link">
<span class="md-ellipsis">
Conditionals
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#function-calls" class="md-nav__link">
<span class="md-ellipsis">
Function calls
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#braces" class="md-nav__link">
<span class="md-ellipsis">
Braces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#goto" class="md-nav__link">
<span class="md-ellipsis">
Goto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#variables" class="md-nav__link">
<span class="md-ellipsis">
Variables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#loops" class="md-nav__link">
<span class="md-ellipsis">
Loops
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#headers" class="md-nav__link">
<span class="md-ellipsis">
Headers
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../translations/" class="md-nav__link">
<span class="md-ellipsis">
Translations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../release-process/" class="md-nav__link">
<span class="md-ellipsis">
Release process
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#readable-code" class="md-nav__link">
<span class="md-ellipsis">
Readable code
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#comments" class="md-nav__link">
<span class="md-ellipsis">
Comments
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#conditionals" class="md-nav__link">
<span class="md-ellipsis">
Conditionals
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#function-calls" class="md-nav__link">
<span class="md-ellipsis">
Function calls
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#braces" class="md-nav__link">
<span class="md-ellipsis">
Braces
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#goto" class="md-nav__link">
<span class="md-ellipsis">
Goto
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#variables" class="md-nav__link">
<span class="md-ellipsis">
Variables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#loops" class="md-nav__link">
<span class="md-ellipsis">
Loops
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#headers" class="md-nav__link">
<span class="md-ellipsis">
Headers
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="coding-style">Coding style</h1>
<p>We loosely follow the <a href="https://www.gnu.org/prep/standards/standards.html">GNU Coding Standards</a> with some local deviations. Whether you agree with them or not, do check it out—it is an educational read. In a nutshell:</p>
<ul>
<li>Use templates for new files (see <a href="https://github.com/MidnightCommander/mc/tree/master/maint/templates">maint/templates</a> in the source tree)</li>
<li>Maximum line width is 100 characters<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></li>
<li>No tabs, indent with 4 spaces</li>
<li>No trailing whitespace</li>
</ul>
<p>Use the <code>clang-format</code> to format the code:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>make<span class="w"> </span>indent
</code></pre></div>
<p>To avoid formatting differences between <code>clang-format</code> versions, we currently use <code>clang-format-20.1.3</code>. The <a href="https://pypi.org/project/clang-format/">clang-format Python distribution</a> provides precompiled binaries for all major platforms:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>uv<span class="w"> </span>tool<span class="w"> </span>install<span class="w"> </span><span class="s1">&#39;clang-format==20.1.3&#39;</span>
$<span class="w"> </span><span class="nb">alias</span><span class="w"> </span>clang-format<span class="o">=</span><span class="s1">&#39;uvx clang-format&#39;</span>
</code></pre></div>
<h2 id="readable-code">Readable code</h2>
<p>Use your best judgment and choose the more readable option. Remember that many other people will be reading it:</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="n">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read</span><span class="w"> </span><span class="p">(</span><span class="n">fd</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">routine</span><span class="p">.</span><span class="n">pointer</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">routine</span><span class="p">));</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">bytes</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">-1</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="kt">size_t</span><span class="p">)</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">routine</span><span class="p">))</span>
<span class="w"> </span><span class="p">...</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">read</span><span class="w"> </span><span class="p">(</span><span class="n">fd</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">routine</span><span class="p">.</span><span class="n">pointer</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">routine</span><span class="p">)))</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">-1</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="p">(</span><span class="kt">size_t</span><span class="p">)</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="k">sizeof</span><span class="w"> </span><span class="p">(</span><span class="n">routine</span><span class="p">))</span>
<span class="w"> </span><span class="p">...</span>
</code></pre></div>
<p>Do not put more than one statement on a line:</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="p">();</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">f</span><span class="p">())</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
</code></pre></div>
</div>
<h2 id="comments">Comments</h2>
<p>Precede comments with a blank line. If the comment belongs directly to the following code, there should not be a blank line after the comment, unless the comment contains a summary of several blocks of following code.</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="cm">/*</span>
<span class="cm"> * This is a multiline comment</span>
<span class="cm"> *</span>
<span class="cm"> * Note that edit_delete() will not corrupt anything if it is called </span>
<span class="cm"> * while the cursor position is EOF.</span>
<span class="cm"> */</span>
<span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="n">edit_delete</span><span class="w"> </span><span class="p">(</span><span class="n">edit</span><span class="p">);</span>
<span class="c1">// This is a one-line comment. Allocate additional memory.</span>
<span class="n">mem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="w"> </span><span class="p">(</span><span class="n">memneed</span><span class="p">);</span>
<span class="cm">/**</span>
<span class="cm"> * @brief This is a Doxygen comment</span>
<span class="cm"> *</span>
<span class="cm"> * This is a more detailed explanation of</span>
<span class="cm"> * this simple function.</span>
<span class="cm"> *</span>
<span class="cm"> * @param[in] param1 The parameter value of the function</span>
<span class="cm"> * @param[out] result1 The result value of the function</span>
<span class="cm"> * @return 0 on success and -1 on error</span>
<span class="cm"> */</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">example</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">param1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">result1</span><span class="p">);</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="c1">//This is a one-line comment.</span>
<span class="n">mem</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="n">malloc</span><span class="w"> </span><span class="p">(</span><span class="n">memneed</span><span class="p">);</span><span class="c1">// No space before comment</span>
<span class="cm">/* This is a multiline comment,</span>
<span class="cm"> with some more words...*/</span>
</code></pre></div>
<h2 id="conditionals">Conditionals</h2>
<p>Always follow an <code>if</code> keyword with a space, but do not include additional spaces before or after the parentheses in the conditional:</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="err">â €</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">i</span><span class="p">)</span>
</code></pre></div>
</div>
<p>Use explicit comparison in equality operators:</p>
<div class="highlight"><pre><span></span><code><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">p1</span><span class="p">,</span><span class="w"> </span><span class="o">*</span><span class="n">p2</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">i1</span><span class="p">,</span><span class="w"> </span><span class="n">i2</span><span class="p">;</span>
<span class="kt">char</span><span class="w"> </span><span class="n">c1</span><span class="p">,</span><span class="w"> </span><span class="n">c2</span><span class="p">;</span>
</code></pre></div>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p1</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i1</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">c1</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="sc">&#39;\0&#39;</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">c2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">&#39;\0&#39;</span><span class="p">)</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p1</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">p2</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i1</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">i2</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">c1</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">c2</span><span class="p">)</span>
</code></pre></div>
</div>
<p>Do not check boolean values for equality:</p>
<div class="highlight"><pre><span></span><code><span class="n">gboolean</span><span class="w"> </span><span class="n">b1</span><span class="p">,</span><span class="w"> </span><span class="n">b2</span><span class="p">;</span>
</code></pre></div>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">b1</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">b2</span><span class="p">)</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">b1</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">TRUE</span><span class="p">)</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">b2</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FALSE</span><span class="p">)</span>
</code></pre></div>
</div>
<h2 id="function-calls">Function calls</h2>
<p>Always include a space between the name and the left parentheses when calling functions:</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="n">do_example</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">param1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">result1</span><span class="p">);</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="n">do_example</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">param1</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">result1</span><span class="p">);</span>
</code></pre></div>
</div>
<h2 id="braces">Braces</h2>
<p>Braces for blocks of code associated with <code>for</code>, <code>if</code>, <code>switch</code>, <code>while</code>, <code>do .. while</code>, etc. should start on the next line after the statement keyword and end on a separate line.</p>
<p>If the length of the opening statement requires it to span multiple lines, the opening brace should be on a separate line.</p>
<p>Do not use braces unnecessarily when a single statement will do.</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">xterm_flag</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">xterm_title</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strip_home_and_password</span><span class="w"> </span><span class="p">(</span><span class="n">current_panel</span><span class="o">-&gt;</span><span class="n">cwd</span><span class="p">);</span>
<span class="w"> </span><span class="p">...</span>
<span class="p">}</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="n">k</span><span class="o">++</span><span class="p">)</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">)</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">str_options</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">opt_name</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="w"> </span><span class="n">g_free</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">str_options</span><span class="p">[</span><span class="n">i</span><span class="p">].</span><span class="n">opt_addr</span><span class="p">);</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">xterm_flag</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">xterm_title</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strip_home_and_password</span><span class="w"> </span><span class="p">(</span><span class="n">current_panel</span><span class="o">-&gt;</span><span class="n">cwd</span><span class="p">);</span>
<span class="w"> </span><span class="p">...</span>
<span class="p">}</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">xterm_flag</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">xterm_title</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">path</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">strip_home_and_password</span><span class="w"> </span><span class="p">(</span><span class="n">current_panel</span><span class="o">-&gt;</span><span class="n">cwd</span><span class="p">);</span><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<h2 id="goto">Goto</h2>
<p>Use <code>goto</code> only when necessary; it is evil, but can greatly improve readability and reduce memory leaks when used as the only exit point from a function.</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">link_type</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">LINK_HARDLINK</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">src</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">g_strdup_printf</span><span class="w"> </span><span class="p">(</span><span class="n">_</span><span class="w"> </span><span class="p">(</span><span class="s">&quot;Link %s to:&quot;</span><span class="p">),</span><span class="w"> </span><span class="n">str_trunc</span><span class="w"> </span><span class="p">(</span><span class="n">fname</span><span class="p">,</span><span class="w"> </span><span class="mi">46</span><span class="p">));</span>
<span class="w"> </span><span class="n">dest</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">input_expand_dialog</span><span class="w"> </span><span class="p">(</span><span class="n">_</span><span class="w"> </span><span class="p">(</span><span class="s">&quot;Link&quot;</span><span class="p">),</span><span class="w"> </span><span class="n">src</span><span class="p">,</span><span class="w"> </span><span class="n">MC_HISTORY_FM_LINK</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">dest</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="o">*</span><span class="n">dest</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="sc">&#39;\0&#39;</span><span class="p">)</span>
<span class="w"> </span><span class="k">goto</span><span class="w"> </span><span class="n">cleanup</span><span class="p">;</span>
<span class="w"> </span><span class="p">...</span>
<span class="w"> </span><span class="p">...</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">...</span>
<span class="w"> </span><span class="p">...</span>
<span class="nl">cleanup</span><span class="p">:</span>
<span class="w"> </span><span class="n">g_free</span><span class="w"> </span><span class="p">(</span><span class="n">src</span><span class="p">);</span>
<span class="w"> </span><span class="n">g_free</span><span class="w"> </span><span class="p">(</span><span class="n">dest</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="variables">Variables</h2>
<p>Do not mix variable declarations and code; declare variables only at the beginning of the appropriate block.</p>
<p>Reduce variable scope as much as possible: declare local variables in the block where they are used.</p>
<p>Separate variable declaration and code with an empty line.</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">TRUE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="n">do_bar</span><span class="w"> </span><span class="p">(</span><span class="n">foo</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">TRUE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">do_bar</span><span class="w"> </span><span class="p">(</span><span class="n">foo</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="err">â €</span>
</code></pre></div>
</div>
<p>If a variable is introduced only to store an intermediate value, declare it at the place of use, join declaration and initialization, and mark it as a constant:</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="k">const</span><span class="w"> </span><span class="kt">ssize_t</span><span class="w"> </span><span class="n">len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mc_readlink</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="p">);</span>
<span class="err">â €</span>
<span class="err">â €</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">ssize_t</span><span class="w"> </span><span class="n">len</span><span class="p">;</span>
<span class="n">len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mc_readlink</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="p">);</span>
</code></pre></div>
</div>
<p>Avoid having initialized and uninitialized variables in the same declaration:</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="err">â €</span>
</code></pre></div>
</div>
<p>Avoid multiple non-trivial variable initializations in a declaration:</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="err">â €</span>
</code></pre></div>
</div>
<p>Mark unused variables with the <code>MC_UNUSED</code> macro:</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="kt">int</span>
<span class="nf">progress_button_callback</span><span class="w"> </span><span class="p">(</span><span class="n">MC_UNUSED</span><span class="w"> </span><span class="n">WButton</span><span class="w"> </span><span class="o">*</span><span class="n">button</span><span class="p">,</span><span class="w"> </span><span class="n">MC_UNUSED</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">action</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">int</span>
<span class="nf">progress_button_callback</span><span class="w"> </span><span class="p">(</span><span class="n">WButton</span><span class="w"> </span><span class="o">*</span><span class="n">button</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">action</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="n">button</span><span class="p">;</span>
<span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="n">action</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
<p>Try to avoid passing function calls as function parameters in new code. Not doing so makes the code much easier to read, and it is also easier to use the <code>step</code> command in <code>gdb</code>.</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="kt">void</span>
<span class="nf">dirsizes_cmd</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">ComputeDirSizeUI</span><span class="w"> </span><span class="o">*</span><span class="n">ui</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">compute_dir_size_create_ui</span><span class="w"> </span><span class="p">();</span>
<span class="w"> </span><span class="n">compute_dir_size_destroy_ui</span><span class="w"> </span><span class="p">(</span><span class="n">ui</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">void</span>
<span class="nf">dirsizes_cmd</span><span class="w"> </span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">compute_dir_size_destroy_ui</span><span class="w"> </span><span class="p">(</span><span class="n">compute_dir_size_create_ui</span><span class="w"> </span><span class="p">());</span>
<span class="p">}</span>
</code></pre></div>
<p>Avoid abusing non-<code>const</code> function parameters as local variables:</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="kt">void</span>
<span class="nf">foo</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">iterations</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">result</span><span class="p">;</span>
<span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">do_one_thing</span><span class="w"> </span><span class="p">(</span><span class="n">iterations</span><span class="p">);</span>
<span class="w"> </span><span class="n">do_something</span><span class="w"> </span><span class="p">(</span><span class="o">&amp;</span><span class="n">result</span><span class="p">);</span>
<span class="w"> </span><span class="p">...</span>
<span class="p">}</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">void</span>
<span class="nf">foo</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">iterations</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">iterations</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">do_one_thing</span><span class="w"> </span><span class="p">(</span><span class="n">iterations</span><span class="p">);</span>
<span class="w"> </span><span class="n">do_something</span><span class="w"> </span><span class="p">(</span><span class="o">&amp;</span><span class="n">iterations</span><span class="p">);</span>
<span class="w"> </span><span class="p">...</span>
<span class="p">}</span>
</code></pre></div>
<h2 id="loops">Loops</h2>
<p>Declare loop variables within the loop to limit its scope and avoid unwanted reuse of the last value set.</p>
<div class="grid">
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="err">â €</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">do_something</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
<span class="err">â €</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">do_something</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
</div>
<h2 id="headers">Headers</h2>
<p>Do not mix headers:</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;errno.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;string.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;sys/types.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;sys/stat.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/global.h&quot;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/tty/tty.h&quot;</span><span class="c1"> // LINES, tty_touch_screen()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/tty/win.h&quot;</span><span class="c1"> // do_enter_ca_mode()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/subshell.h&quot;</span><span class="c1"> // use_subshell</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/help.h&quot;</span><span class="c1"> // interactive_display()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/setup.h&quot;</span>
</code></pre></div>
<div class="highlight"><span class="filename">Wrong</span><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;errno.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;sys/types.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;string.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;sys/stat.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/subshell.h&quot;</span><span class="c1"> // use_subshell</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/help.h&quot;</span><span class="c1"> // interactive_display()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/tty/tty.h&quot;</span><span class="c1"> // LINES, tty_touch_screen()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/tty/win.h&quot;</span><span class="c1"> // do_enter_ca_mode()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/setup.h&quot;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/global.h&quot;</span>
</code></pre></div>
<p>Use short comment for header file:</p>
<div class="highlight"><span class="filename">Right</span><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/tty/tty.h&quot;</span><span class="c1"> // LINES, tty_touch_screen()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;lib/tty/win.h&quot;</span><span class="c1"> // do_enter_ca_mode()</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/subshell.h&quot;</span><span class="c1"> // use_subshell</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;src/help.h&quot;</span><span class="c1"> // interactive_display()</span>
</code></pre></div>
<div class="footnote">
<hr />
<ol>
<li id="fn:1">
<p>This is not to please folks with low-resolution screens, but rather because sticking to 100 columns prevents you from easily nesting more than one level of if statements or other code blocks.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
</li>
</ol>
</div>
<aside class="md-source-file">
<span class="md-source-file__fact">
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="October 26, 2025 12:08:06 UTC">October 26, 2025</span>
</span>
<span class="md-source-file__fact">
<span class="md-icon" title="Created">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="March 5, 2025 18:32:32 UTC">March 5, 2025</span>
</span>
</aside>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2025 <a href="https://www.linkedin.com/in/yuryzaytsev/">Yury V. Zaytsev</a>
&bull;
Revision: <a href="https://github.com/MidnightCommander/website/commit/945f32a0c198efdf96033110182fd123c9c5db6c">g945f32a0c</a>
&bull;
<a
href="https://github.com/MidnightCommander/website/edit/master/docs/coding-style.md"
title="Edit this page"
class="md-footer__copyright_button"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<a
href="https://github.com/MidnightCommander/website/raw/master/docs/coding-style.md"
title="View source of this page"
class="md-footer__copyright_button"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
</a>
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://github.com/MidnightCommander" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
<a href="https://ftp.osuosl.org/pub/midnightcommander" target="_blank" rel="noopener" title="ftp.osuosl.org" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M256 32c0-17.7-14.3-32-32-32s-32 14.3-32 32v210.7l-41.4-41.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 242.7zM64 320c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64v-32c0-35.3-28.7-64-64-64h-46.9l-56.6 56.6c-31.2 31.2-81.9 31.2-113.1 0L110.9 320zm304 56a24 24 0 1 1 0 48 24 24 0 1 1 0-48"/></svg>
</a>
<a href="https://source.midnight-commander.org" target="_blank" rel="noopener" title="source.midnight-commander.org" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M384 512H96c-53 0-96-43-96-96V96C0 43 43 0 96 0h304c26.5 0 48 21.5 48 48v288c0 20.9-13.4 38.7-32 45.3V448c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 384c-17.7 0-32 14.3-32 32s14.3 32 32 32h256v-64zm32-232c0 13.3 10.7 24 24 24h176c13.3 0 24-10.7 24-24s-10.7-24-24-24H152c-13.3 0-24 10.7-24 24m24 72c-13.3 0-24 10.7-24 24s10.7 24 24 24h176c13.3 0 24-10.7 24-24s-10.7-24-24-24z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["content.code.copy", "navigation.sections"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
</html>