<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title>C - 标签 - 招财猫的部落格</title>
        <link>https://blog.besty.day/tags/c/</link>
        <description>C - 标签 - 招财猫的部落格</description>
        <generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Fri, 18 Dec 2015 15:48:18 &#43;0000</lastBuildDate><atom:link href="https://blog.besty.day/tags/c/" rel="self" type="application/rss+xml" /><item>
    <title>21世纪C语言 第2章 调试，测试，文档</title>
    <link>https://blog.besty.day/posts/2015/12/21st-c-2/</link>
    <pubDate>Fri, 18 Dec 2015 15:48:18 &#43;0000</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2015/12/21st-c-2/</guid>
    <description><![CDATA[<h1 id="使用调试器">使用调试器</h1>
<p>关于调试器的第一个简明提示：总是使用调试器。</p>
<h2 id="一个调试侦探故事">一个调试侦探故事</h2>
<p>调试代码：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-c">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;math.h&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span> <span class="cpf">&lt;stdio.h&gt; //size_t</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span>
</span></span><span class="line"><span class="cl"><span class="k">typedef</span> <span class="k">struct</span> <span class="n">meanvar</span> <span class="p">{</span><span class="kt">double</span> <span class="n">mean</span><span class="p">,</span> <span class="n">var</span><span class="p">;}</span> <span class="n">meanvar</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">meanvar</span> <span class="nf">mean_and_var</span><span class="p">(</span><span class="k">const</span> <span class="kt">double</span> <span class="o">*</span><span class="n">data</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">double</span> <span class="n">avg</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="n">avg2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">double</span> <span class="n">ratio</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">size_t</span> <span class="n">count</span><span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span><span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>  <span class="o">!</span><span class="nf">isnan</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span> <span class="n">i</span><span class="o">++</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">        <span class="n">ratio</span> <span class="o">=</span> <span class="n">count</span><span class="o">/</span><span class="p">(</span><span class="n">count</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="n">count</span> <span class="o">++</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">avg</span>   <span class="o">*=</span> <span class="n">ratio</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">avg2</span>  <span class="o">*=</span> <span class="n">ratio</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">avg</span>   <span class="o">+=</span> <span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">/</span><span class="p">(</span><span class="n">count</span> <span class="o">+</span><span class="mf">0.0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">        <span class="n">avg2</span>  <span class="o">+=</span> <span class="nf">pow</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="mi">2</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">count</span> <span class="o">+</span><span class="mf">0.0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">(</span><span class="n">meanvar</span><span class="p">){.</span><span class="n">mean</span> <span class="o">=</span> <span class="n">avg</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="p">.</span><span class="n">var</span> <span class="o">=</span> <span class="n">avg2</span> <span class="o">-</span> <span class="nf">pow</span><span class="p">(</span><span class="n">avg</span><span class="p">,</span> <span class="mi">2</span><span class="p">)};</span> <span class="c1">//E[x^2] - E^2[x]
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">d</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">34124.75</span><span class="p">,</span> <span class="mf">34124.48</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                   <span class="mf">34124.90</span><span class="p">,</span> <span class="mf">34125.31</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                   <span class="mf">34125.05</span><span class="p">,</span> <span class="mf">34124.98</span><span class="p">,</span> <span class="n">NAN</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">meanvar</span> <span class="n">mv</span> <span class="o">=</span> <span class="nf">mean_and_var</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;mean: %.10g var: %.10g</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">mv</span><span class="p">.</span><span class="n">mean</span><span class="p">,</span> <span class="n">mv</span><span class="p">.</span><span class="n">var</span><span class="o">*</span><span class="mi">6</span><span class="o">/</span><span class="mf">5.</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">d2</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="mf">4.75</span><span class="p">,</span> <span class="mf">4.48</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="mf">4.90</span><span class="p">,</span> <span class="mf">5.31</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                    <span class="mf">5.05</span><span class="p">,</span> <span class="mf">4.98</span><span class="p">,</span> <span class="n">NAN</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">mv</span> <span class="o">=</span> <span class="nf">mean_and_var</span><span class="p">(</span><span class="n">d2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">mv</span><span class="p">.</span><span class="n">var</span> <span class="o">*=</span> <span class="mf">6.</span><span class="o">/</span><span class="mi">5</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;mean: %.10g var: %.10g</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">mv</span><span class="p">.</span><span class="n">mean</span><span class="p">,</span> <span class="n">mv</span><span class="p">.</span><span class="n">var</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>

<p>使用<strong>CFLAGS=&quot;-g -Wall -std=gnu11 -O3&quot; make stddev</strong>编译代码，<strong>gdb stddev_bugged</strong>调试代码。</p>]]></description>
</item>
<item>
    <title>21世纪C语言 第1章 便利编译配置</title>
    <link>https://blog.besty.day/posts/2015/12/21st-c-1/</link>
    <pubDate>Tue, 15 Dec 2015 19:55:08 &#43;0000</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2015/12/21st-c-1/</guid>
    <description><![CDATA[<h1 id="使用包管理器">使用包管理器</h1>
<p>必须获取的包：</p>
<ul>
<li>编译器。必须安装<strong>gcc</strong>；<strong>clang</strong>可能也有用。</li>
<li><strong>gdb</strong>，调试器</li>
<li><strong>Valgrind</strong>，测试C内存使用错误。</li>
<li><strong>gprof</strong>，一个分析工具</li>
<li><strong>make</strong>，你永远不需要直接调用编译器</li>
<li><strong>pkg-config</strong>，查找库</li>
<li><strong>Doxygen</strong>，文档生成</li>
<li>文本编辑器。<strong>Emacs</strong>或<strong>vim</strong>。</li>
<li>自动工具：<strong>Autoconf</strong>，<strong>Automake</strong>，<strong>libtool</strong>。</li>
<li><strong>Git</strong></li>
<li>Shell替换品，比如Z shell。</li>
</ul>
<p>一些省去重复造轮子的C库：</p>]]></description>
</item>
<item>
    <title>整理代码片段</title>
    <link>https://blog.besty.day/posts/2015/11/baiyu/</link>
    <pubDate>Tue, 10 Nov 2015 11:18:10 &#43;0000</pubDate>
    <author>招财猫</author>
    <guid>https://blog.besty.day/posts/2015/11/baiyu/</guid>
    <description><![CDATA[<h1 id="根据pid获取进程名">根据pid获取进程名</h1>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-c">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">get_process_name_by_pid</span><span class="p">(</span><span class="kt">int</span> <span class="n">pid</span><span class="p">,</span> <span class="kt">char</span> <span class="o">*</span><span class="n">name</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">buf</span><span class="p">[</span><span class="mi">256</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">path</span><span class="p">[</span><span class="mi">256</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="mi">0</span><span class="p">};</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nf">sprintf</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="s">&#34;/proc/%d/exe&#34;</span><span class="p">,</span> <span class="n">pid</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">readlink</span><span class="p">(</span><span class="n">buf</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">path</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="o">*</span><span class="n">filename</span> <span class="o">=</span> <span class="nf">basename</span><span class="p">(</span><span class="n">path</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">filename</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>

<h1 id="c语言变长数组">C语言变长数组</h1>
<p><strong>C99标准才有的特性</strong></p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-c">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">test_vla</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">str</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="nf">strlen</span><span class="p">(</span><span class="n">str</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">a</span><span class="p">[</span><span class="n">len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">a</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">str</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nf">printf</span><span class="p">(</span><span class="s">&#34;%s</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">,</span> <span class="n">a</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>

<h1 id="确保路径存在">确保路径存在</h1>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-c">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">bool</span> <span class="nf">besure_path</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span> <span class="o">*</span><span class="n">pathname</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">len</span> <span class="o">=</span> <span class="nf">strlen</span><span class="p">(</span><span class="n">pathname</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">char</span> <span class="n">buffer</span><span class="p">[</span><span class="n">len</span> <span class="o">+</span> <span class="mi">1</span><span class="p">];</span>
</span></span><span class="line"><span class="cl">    <span class="nf">memset</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="k">sizeof</span><span class="p">(</span><span class="n">buffer</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nf">strcpy</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">pathname</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">len</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">buffer</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="sc">&#39;/&#39;</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">buffer</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="nf">access</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="n">F_OK</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="k">if</span> <span class="p">(</span><span class="nf">mkdir</span><span class="p">(</span><span class="n">buffer</span><span class="p">,</span> <span class="mo">0755</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">                    <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">                <span class="p">}</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">            <span class="n">buffer</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="sc">&#39;/&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>

<h1 id="计算一个数字二进制格式1的个数">计算一个数字二进制格式1的个数</h1>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-c">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title="复制到剪贴板"><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">count_bit</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">while</span> <span class="p">(</span><span class="n">n</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="o">++</span><span class="n">count</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">n</span> <span class="o">&amp;=</span> <span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">count</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>]]></description>
</item>
</channel>
</rss>
