mirror of
https://github.com/MidnightCommander/website.git
synced 2026-02-02 11:13:47 -08:00
1204 lines
64 KiB
HTML
1204 lines
64 KiB
HTML
|
||
<!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.11">
|
||
|
||
|
||
|
||
<title>Coding style - Midnight Commander</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../assets/stylesheets/main.4af4bdda.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 6.7.2 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></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 6.7.2 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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></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-19</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">'clang-format==19.*'</span>
|
||
$<span class="w"> </span><span class="nb">alias</span><span class="w"> </span>clang-format<span class="o">=</span><span class="s1">'uvx clang-format'</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">&</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"><</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">&</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"><</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>
|
||
<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">'\0'</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">'\0'</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="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>
|
||
<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">&&</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">-></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"><</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"><</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">&&</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">-></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">&&</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">-></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">"Link %s to:"</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">"Link"</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">""</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">'\0'</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">&</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">&</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"><</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"><</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"><errno.h></span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdio.h></span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><string.h></span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/stat.h></span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/global.h"</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/tty/tty.h"</span><span class="c1"> // LINES, tty_touch_screen()</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/tty/win.h"</span><span class="c1"> // do_enter_ca_mode()</span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/subshell.h"</span><span class="c1"> // use_subshell</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/help.h"</span><span class="c1"> // interactive_display()</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/setup.h"</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"><errno.h></span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/types.h></span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdio.h></span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><string.h></span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf"><sys/stat.h></span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/subshell.h"</span><span class="c1"> // use_subshell</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/help.h"</span><span class="c1"> // interactive_display()</span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/tty/tty.h"</span><span class="c1"> // LINES, tty_touch_screen()</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/tty/win.h"</span><span class="c1"> // do_enter_ca_mode()</span>
|
||
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/setup.h"</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/global.h"</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">"lib/tty/tty.h"</span><span class="c1"> // LINES, tty_touch_screen()</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"lib/tty/win.h"</span><span class="c1"> // do_enter_ca_mode()</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/subshell.h"</span><span class="c1"> // use_subshell</span>
|
||
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"src/help.h"</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. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</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="March 25, 2025 13:11:58">March 25, 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">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 © 2025 <a href="https://www.linkedin.com/in/yuryzaytsev/">Yury V. Zaytsev</a>
|
||
|
||
•
|
||
Revision: <a href="https://github.com/MidnightCommander/website/commit/5b891d773b7ef513e46daf115a3e91be8d37ea6f">g5b891d773</a>
|
||
•
|
||
<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 496 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M165.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.9M244.8 8C106.1 8 0 113.3 0 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.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.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 512 512"><!--! Font Awesome Free 6.7.2 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 2024 Fonticons, Inc.--><path d="M288 32c0-17.7-14.3-32-32-32s-32 14.3-32 32v242.7l-73.4-73.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l128 128c12.5 12.5 32.8 12.5 45.3 0l128-128c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L288 274.7zM64 352c-35.3 0-64 28.7-64 64v32c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64v-32c0-35.3-28.7-64-64-64H346.5l-45.3 45.3c-25 25-65.5 25-90.5 0L165.5 352zm368 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 6.7.2 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 2024 Fonticons, Inc.--><path d="M96 0C43 0 0 43 0 96v320c0 53 43 96 96 96h320c17.7 0 32-14.3 32-32s-14.3-32-32-32v-64c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H96m0 384h256v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32m32-240c0-8.8 7.2-16 16-16h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16m16 48h192c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16"/></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.f8cc74c7.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.c8b220af.min.js"></script>
|
||
|
||
|
||
</body>
|
||
</html> |