<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>C/C&#43;&#43; on G. T. Wang</title>
    <link>https://blog.gtwang.org/tags/c/c&#43;&#43;/</link>
    <description>Recent content in C/C&#43;&#43; on G. T. Wang</description>
    <generator>Hugo -- 0.156.0</generator>
    <language>zh-tw</language>
    <copyright>G. T. Wang</copyright>
    <lastBuildDate>Tue, 02 Jul 2019 14:34:17 +0800</lastBuildDate>
    <atom:link href="https://blog.gtwang.org/tags/c/c++/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>GCC 編譯器基本使用教學與範例</title>
      <link>https://blog.gtwang.org/programming/gcc-comipler-basic-tutorial-examples/</link>
      <pubDate>Tue, 02 Jul 2019 14:34:17 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/gcc-comipler-basic-tutorial-examples/</guid>
      <description>&lt;p&gt;本篇介紹如何在 Linux 系統上使用 GCC 編譯器，將寫好的 C 與 C++ 程式碼編譯成執行檔。&lt;/p&gt;
&lt;p&gt;Linux 系統上最常見的 C/C++ 編譯器就是 GCC，它是一個開放原始碼的免費編譯器，幾乎任何的 Linux 系統上都有這個編譯器可用，以下介紹 GCC 的基本用法以及範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Big-Endian 與 Little-Endian 的差異與判斷程式碼</title>
      <link>https://blog.gtwang.org/programming/difference-between-big-endian-and-little-endian-implementation-in-c/</link>
      <pubDate>Thu, 17 May 2018 10:06:25 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/difference-between-big-endian-and-little-endian-implementation-in-c/</guid>
      <description>&lt;p&gt;這裡介紹 Big-Endian 與 Little-Endian 兩種位元組順序的差異，並提供判斷位元組順序的 C 語言實作程式碼範例。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F&#34;&gt;位元組順序（Endianness）&lt;/a&gt;是指資料在記憶體中的放置順序，不同的 CPU 可能會採用不同的放置規則，若遇到需要在不同機器或是網路之間交換低階的二進位資料時，就必須注意這個問題。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言排序演算法實作整理：泡沫排序、快速排序等</title>
      <link>https://blog.gtwang.org/programming/c-sorting-algorithms-implementation/</link>
      <pubDate>Mon, 02 Apr 2018 11:22:36 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-sorting-algorithms-implementation/</guid>
      <description>&lt;p&gt;這裡提供各種排序演算法的 C 語言實作範例。&lt;/p&gt;
&lt;p&gt;若要對一連串的元素（陣列）做排序的話，有很多種實作方式，常見的排序方法有：&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F&#34;&gt;泡沫排序法（bubble sort）&lt;/a&gt;、&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F&#34;&gt;插入排序法（insertion sort）&lt;/a&gt;、&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F&#34;&gt;快速排序法（quick sort）&lt;/a&gt;等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言 pthread 多執行緒平行化程式設計入門教學與範例</title>
      <link>https://blog.gtwang.org/programming/pthread-multithreading-programming-in-c-tutorial/</link>
      <pubDate>Sun, 25 Mar 2018 09:06:47 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/pthread-multithreading-programming-in-c-tutorial/</guid>
      <description>&lt;p&gt;這裡介紹如何在 C 語言中使用 &lt;code&gt;pthread&lt;/code&gt; 開發多執行緒的平行化程式，用多顆 CPU 加速計算。&lt;/p&gt;
&lt;p&gt;現在電腦的 CPU 都具備多顆核心，因此在使用 C 語言撰寫計算用的程式時，若能夠善用多核新的 CPU 進行平行運算，可以讓計算速度大幅提昇。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言 fork 使用教學與範例，多行程 Multi-Process 平行化程式設計</title>
      <link>https://blog.gtwang.org/programming/c-fork-tutorial-multi-process-programming/</link>
      <pubDate>Tue, 08 Aug 2017 16:10:41 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-fork-tutorial-multi-process-programming/</guid>
      <description>&lt;p&gt;這裡介紹如何使用 C 語言的 &lt;code&gt;fork&lt;/code&gt; 函數建立子行程，設計多行程的平行化程式。&lt;/p&gt;
&lt;p&gt;C 語言中的 &lt;code&gt;fork&lt;/code&gt; 函數可以將目前的程式行程（process）複製一份，建立出新的子行程（child process），而原本的行程就稱為父行程（parent process）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;11 內建亂數函式庫使用教學：隨機亂數產生器與機率分布</title>
      <link>https://blog.gtwang.org/programming/cpp-random-number-generator-and-probability-distribution-tutorial/</link>
      <pubDate>Fri, 07 Apr 2017 10:55:08 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-random-number-generator-and-probability-distribution-tutorial/</guid>
      <description>&lt;p&gt;這裡介紹如何使用 C++11 標準中內建的亂數函式庫，產生各種機率分布的隨機亂數。&lt;/p&gt;
&lt;p&gt;傳統上在 C/C++ 程式中若要產生亂數，大家最常用的就是&lt;a href=&#34;https://blog.gtwang.org/programming/c-cpp-rand-random-number-generation-tutorial-examples/&#34;&gt;標準的 rand 函數&lt;/a&gt;，它的用法簡單、快速又方便，雖然其功能比較陽春，生成的亂數品質也比較不好，但因為是標準的函數之一，所以還是非常多人喜歡用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C/C&#43;&#43; 使用 rand 函數產生隨機亂數教學與範例程式碼</title>
      <link>https://blog.gtwang.org/programming/c-cpp-rand-random-number-generation-tutorial-examples/</link>
      <pubDate>Thu, 06 Apr 2017 08:33:06 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-cpp-rand-random-number-generation-tutorial-examples/</guid>
      <description>&lt;p&gt;本篇介紹 C/C++ 中使用 &lt;code&gt;rand&lt;/code&gt; 函數產生亂數的方法，並且提供各種常用的範例程式碼。&lt;/p&gt;
&lt;p&gt;在撰寫 C/C++ 程式時，如果需要產生一些簡單的亂數，最方便的作法就是使用 &lt;code&gt;rand&lt;/code&gt; 這個亂數產生函數，以下介紹這個函數的相關用法與範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言緩衝區溢位攻擊範例程式碼</title>
      <link>https://blog.gtwang.org/programming/c-buffer-overflow-attack-with-example/</link>
      <pubDate>Sun, 02 Apr 2017 16:29:32 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-buffer-overflow-attack-with-example/</guid>
      <description>&lt;p&gt;本篇以 C 語言的實際範例，解釋緩衝區溢位攻擊的原理。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA&#34;&gt;緩衝區溢位&lt;/a&gt;攻擊是一種典型的攻擊方式，雖然這種手法已經有一段的歷史，不過還是有可能因為程式設計者的疏忽，讓程式存在這樣的漏洞。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;以下我們以 C 語言的程式來解釋緩衝區溢位的原理以及攻擊方式。&lt;/p&gt;
&lt;h2 id=&#34;緩衝區溢位&#34;&gt;緩衝區溢位&lt;/h2&gt;
&lt;p&gt;程式中的緩衝區是指一塊特定的記憶體空間，程式在執行時可以將資料處存在其中，而緩衝區溢位（buffer overflow）就是指程式將資料寫入緩衝區時，超過了它的範圍，例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C/C&#43;&#43; 程式設計教學：main 函數讀取命令列參數，argc 與 argv 用法</title>
      <link>https://blog.gtwang.org/programming/c-cpp-tutorial-argc-argv-read-command-line-arguments/</link>
      <pubDate>Mon, 27 Mar 2017 16:16:44 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-cpp-tutorial-argc-argv-read-command-line-arguments/</guid>
      <description>&lt;p&gt;本篇教學介紹如何在 C/C++ 程式的 &lt;code&gt;main&lt;/code&gt; 函數中，使用 &lt;code&gt;argc&lt;/code&gt; 與 &lt;code&gt;argv&lt;/code&gt; 兩個參數，取得執行程式時所輸入的指令參數。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;argc-與-argv-參數&#34;&gt;&lt;code&gt;argc&lt;/code&gt; 與 &lt;code&gt;argv&lt;/code&gt; 參數&lt;/h2&gt;
&lt;p&gt;C 語言程式的 &lt;code&gt;main&lt;/code&gt; 函數如果不需要讀取任何來自於命令列的參數，則 &lt;code&gt;main&lt;/code&gt; 函數就使用最簡單的寫法即可：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C/C&#43;&#43; 語言測量時間函數，評估程式執行效能方法整理</title>
      <link>https://blog.gtwang.org/programming/measure-the-execution-time-in-c-language/</link>
      <pubDate>Sun, 19 Mar 2017 16:50:25 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/measure-the-execution-time-in-c-language/</guid>
      <description>&lt;p&gt;這裡整理了 C/C++ 中各種測量時間的函數與用法，並提供完整的範例程式碼，讓程式開發者方便測量程式執行速度。&lt;/p&gt;
&lt;p&gt;這裡我蒐集了一些在 C/C++ 中常見的程式執行速度測量方式，因為時間的量測方式與細節非常多，這裡只是簡單寫一些常用的方式與範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 使用 Async 非同步函數開發平行化計算程式教學</title>
      <link>https://blog.gtwang.org/programming/cpp-11-async-function-parallel-computing-tutorial/</link>
      <pubDate>Thu, 09 Mar 2017 11:25:03 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-11-async-function-parallel-computing-tutorial/</guid>
      <description>&lt;p&gt;這裡介紹 C++ 語言的 &lt;code&gt;std::async&lt;/code&gt; 非同步函數的使用方式，並提供一些入門的範例程式碼。&lt;/p&gt;
&lt;p&gt;由於&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E5%AE%9A%E5%BE%8B&#34;&gt;摩爾定律&lt;/a&gt;已經達到極限，現今的 CPU 都已經演變為多核心（multi-core）的架構，單一執行緒（single thread）的程式放在新的電腦中不見得可以跑得更快，若要發揮 CPU 完整的計算能力，就必須充分使用 CPU 的每一個核心。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言動態記憶體配置教學：malloc、free 等函數</title>
      <link>https://blog.gtwang.org/programming/c-memory-functions-malloc-free/</link>
      <pubDate>Tue, 07 Mar 2017 09:19:00 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-memory-functions-malloc-free/</guid>
      <description>&lt;p&gt;本文將介紹與 C 語言動態記憶體配置有關的各種函數及其使用方式，包含 &lt;code&gt;malloc&lt;/code&gt;、&lt;code&gt;calloc&lt;/code&gt;、&lt;code&gt;free&lt;/code&gt; 與 &lt;code&gt;realloc&lt;/code&gt; 函數。&lt;/p&gt;
&lt;p&gt;C 語言的動態記憶體配置可以讓程式在需要使用到大量的記憶體時，動態的取得更多的記憶體空間，在使用完之後也可以將不再需要使用的記憶體釋出，也就是說它可以讓程式設計者自行管理記憶體的使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言程式的記憶體配置概念教學</title>
      <link>https://blog.gtwang.org/programming/memory-layout-of-c-program/</link>
      <pubDate>Wed, 01 Mar 2017 16:49:30 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/memory-layout-of-c-program/</guid>
      <description>&lt;p&gt;本篇介紹 C 語言程式的記憶體配置概念，並以實際的範例程式碼來說明。&lt;/p&gt;
&lt;p&gt;在使用 C 語言開發比較低階的程式之前，多少都要了解一下程式實際在執行時的記憶體配置情況，以下我們以最簡單的實際範例來說明。&lt;/p&gt;</description>
    </item>
    <item>
      <title>有趣的 C&#43;&#43; 地圖（2017 年版本）</title>
      <link>https://blog.gtwang.org/funny/interesting-cpp-map-2017/</link>
      <pubDate>Mon, 27 Feb 2017 17:35:25 +0800</pubDate>
      <guid>https://blog.gtwang.org/funny/interesting-cpp-map-2017/</guid>
      <description>&lt;p&gt;這是 &lt;a href=&#34;https://alenacpp.blogspot.com/2017/02/17.html&#34;&gt;АЛЁНА C++&lt;/a&gt; 所創作的一張有趣的 C++ 地圖，上面標示了各種 C++ 程式語言的標準與語法，雖然不是相當精準，不過看起來非常有趣。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;C++ 地圖（2017 年版本）&#34; loading=&#34;lazy&#34; src=&#34;https://blog.gtwang.org/funny/interesting-cpp-map-2017/cppmap-20170227-2.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;這張圖原始檔解析度是 3840×2555，可從 &lt;a href=&#34;https://alenacpp.blogspot.com/2017/02/17.html&#34;&gt;АЛЁНА C++&lt;/a&gt; 的網站上下載，可用於非營利的用途。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言 setjmp 與 longjmp 函數用法教學</title>
      <link>https://blog.gtwang.org/programming/c-setjmp-longjmp-function-tutorial/</link>
      <pubDate>Mon, 27 Feb 2017 15:35:20 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-setjmp-longjmp-function-tutorial/</guid>
      <description>&lt;p&gt;這裡介紹 C 語言的 &lt;code&gt;setjmp&lt;/code&gt; 與 &lt;code&gt;longjmp&lt;/code&gt; 函數的用法，還有典型的使用範例。&lt;/p&gt;
&lt;p&gt;在 C 語言中的 &lt;code&gt;goto&lt;/code&gt; 只能跳到函數內部的 label 位置，若要跳到其他函數中則必須使用 &lt;code&gt;setjmp&lt;/code&gt; 與 &lt;code&gt;longjmp&lt;/code&gt;，這兩個函數在深層的程式錯誤處理上非常好用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS Linux 7 自行編譯與安裝 GCC 6 編譯器教學</title>
      <link>https://blog.gtwang.org/programming/centos-linux-7-compile-and-install-gcc-6/</link>
      <pubDate>Sat, 25 Feb 2017 08:28:35 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/centos-linux-7-compile-and-install-gcc-6/</guid>
      <description>&lt;p&gt;這裡介紹在 CentOS Linux 7 之下自己載 gcc 6 編譯器原始碼、編譯與安裝的過程。&lt;/p&gt;
&lt;p&gt;gcc 是 Linux 系統上最常被使用的編譯器，而 CentOS Linux 7.2 中的 gcc 版本比較舊：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcc -v
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class=&#34;output&#34;&gt;Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)&lt;/pre&gt;
&lt;p&gt;如果想要使用比較新的功能，就會有問題。以下是自己下載 gcc 6.3.0 原始碼來編譯與安裝的過程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 程式語言 auto 自動變數類型語法教學與範例</title>
      <link>https://blog.gtwang.org/programming/cpp-auto-variable-tutorial/</link>
      <pubDate>Thu, 23 Feb 2017 19:58:32 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-auto-variable-tutorial/</guid>
      <description>&lt;p&gt;這裡介紹 C++ 語言的 &lt;code&gt;auto&lt;/code&gt; 自動變數類型的用法，並提供幾種使用範例程式碼。&lt;/p&gt;
&lt;p&gt;在 &lt;a href=&#34;https://zh.wikipedia.org/wiki/C%2B%2B14&#34;&gt;C++14&lt;/a&gt; 標準跟前一版的 &lt;a href=&#34;https://zh.wikipedia.org/wiki/C%2B%2B11&#34;&gt;C++11&lt;/a&gt; 比較起來沒有太大的變革，大概都是改善舊的語法，讓程式設計者更方便使用，這裡我將介紹 &lt;code&gt;auto&lt;/code&gt; 這個 C++11 所新增的自動變數類型，以及在 C++14 中的變革。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 gcc 自製 C/C&#43;&#43; 靜態、共享與動態載入函式庫教學</title>
      <link>https://blog.gtwang.org/programming/howto-create-library-using-gcc/</link>
      <pubDate>Fri, 03 Feb 2017 12:31:56 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/howto-create-library-using-gcc/</guid>
      <description>&lt;p&gt;這裡介紹如何使用 &lt;code&gt;gcc&lt;/code&gt; 編譯器自己製作 C/C++ 靜態、共享與動態載入函式庫，讓程式碼可以更方便的重複使用。&lt;/p&gt;
&lt;p&gt;在開發不同的程式時，如果有一些程式碼是重複會用到的話，就可以將其製作成獨立的函式庫，不僅維護上更方便，也可以方便其他專案或是開發者使用，以下介紹以 &lt;code&gt;gcc&lt;/code&gt; 還有 &lt;code&gt;ar&lt;/code&gt; 等工具製作靜態、共享與動態載入函式庫的步驟。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C/C&#43;&#43; 程式語言的箭頭 --&gt; 運算子？</title>
      <link>https://blog.gtwang.org/programming/cpp-postfix-decrement-greater-than-operator/</link>
      <pubDate>Thu, 02 Feb 2017 14:15:01 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-postfix-decrement-greater-than-operator/</guid>
      <description>&lt;p&gt;最近看到網路論壇中有人在討論 C/C++ 程式語言有趣的箭頭 &lt;code&gt;--&amp;gt;&lt;/code&gt; 運算子，跟大家分享一下。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;p&gt;這是很簡單的 C 語言 &lt;code&gt;while&lt;/code&gt; 迴圈：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// x 遞減至 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;%d &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;這個程式碼的邏輯很簡單，就是讓 &lt;code&gt;x&lt;/code&gt; 逐步遞減至 &lt;code&gt;0&lt;/code&gt;，不過 &lt;code&gt;while&lt;/code&gt; 的判斷式在乍看之下有些奇怪，正常的 C 語言似乎沒有 &lt;code&gt;x --&amp;gt; 0&lt;/code&gt; 這種箭頭的運算子，但是這個程式卻可以正常執行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu Linux 安裝 OpenCV 入門教學、C&#43;&#43; 與 Python 範例程式碼</title>
      <link>https://blog.gtwang.org/programming/ubuntu-linux-install-opencv-cpp-python-hello-world-tutorial/</link>
      <pubDate>Thu, 19 Jan 2017 15:12:12 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/ubuntu-linux-install-opencv-cpp-python-hello-world-tutorial/</guid>
      <description>&lt;p&gt;這裡介紹如何在 Ubuntu Linux 中安裝 OpenCV 影像處理與電腦視覺函式庫，並且使用 C/C++ 或 Python 開發 OpenCV 的影像處理與電腦視覺應用程式。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;

&lt;h2 id=&#34;安裝-opencv-函式庫&#34;&gt;安裝 OpenCV 函式庫&lt;/h2&gt;
&lt;p&gt;在 Ubuntu Linux 我們可以使用 apt 安裝套件庫中已經編譯好的 OpenCV 函式庫：&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言 #pragma pack 預處理指令的意義、用法教學與範例程式碼</title>
      <link>https://blog.gtwang.org/programming/c-language-pragma-pack-tutorial-and-examples/</link>
      <pubDate>Wed, 18 Jan 2017 09:59:14 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/c-language-pragma-pack-tutorial-and-examples/</guid>
      <description>&lt;p&gt;這裡介紹 C 語言預處理指令 &lt;code&gt;#pragma pack&lt;/code&gt; 所代表的意思，並以實際範例說明其使用上的效果與不使用的差異。&lt;/p&gt;
&lt;p&gt;C 語言的 &lt;code&gt;#pragma pack&lt;/code&gt; 是用來指定 &lt;code&gt;struct&lt;/code&gt; 結構內部資料的儲存對齊方式的預處理指令，會直接影響 &lt;code&gt;struct&lt;/code&gt; 結構所使用的記憶體空間大小，以及每個內部變數的放置位置，在處理低階資料結構（例如網路封包）時時常會需要使用到這個語法，以下是使用教學與實際範例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 MPU-6050 的 DMP 來取得更精準的運動感測資料</title>
      <link>https://blog.gtwang.org/iot/raspberry-pi-mpu-6050-read-data-using-dmp/</link>
      <pubDate>Tue, 21 Jul 2015 12:14:29 +0800</pubDate>
      <guid>https://blog.gtwang.org/iot/raspberry-pi-mpu-6050-read-data-using-dmp/</guid>
      <description>&lt;p&gt;這裡介紹如何在樹莓派 Raspberry Pi 中使用 MPU-6050 的 DMP 來取得更精準的運動感測資料。&lt;/p&gt;
&lt;p&gt;MPU-6050 加速度計與陀螺儀六軸感測器內建的 Digital Motion Processor（DMP）可以負責一些運動處理演算法（motion processing algorithm）的計算，DMP 可從加速度計（accelerometers）、陀螺儀（gyroscopes）或第三方的感測器上讀取資料，透過 DMP 的暫存器來讓使用者讀取運算的結果，或是將運算結果放進 FIFO 中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>樹莓派 Raspberry Pi 使用 C&#43;&#43; 讀取 MPU-6050 加速度計與陀螺儀感測資料</title>
      <link>https://blog.gtwang.org/iot/raspberry-pi-read-data-from-mpu6050-using-cpp/</link>
      <pubDate>Fri, 17 Jul 2015 15:15:18 +0800</pubDate>
      <guid>https://blog.gtwang.org/iot/raspberry-pi-read-data-from-mpu6050-using-cpp/</guid>
      <description>&lt;p&gt;這裡介紹如何在樹莓派上使用 C 語言來讀取 MPU-6050 加速度計與陀螺儀感測資料。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.gtwang.org/iot/raspberry-pi-mpu6050-six-axis-gyro-accelerometer-1/&#34;&gt;上一篇文章&lt;/a&gt;中我們已經將 MPU-6050 連接上 Raspberry Pi 了，接下來就是要實際讀取加速度計與陀螺儀的資料了。&lt;/p&gt;
&lt;p&gt;

&lt;ins class=&#34;adsbygoogle&#34;
     style=&#34;display:block&#34;
     data-ad-client=&#34;ca-pub-7794009487786811&#34;
     data-ad-slot=&#34;9921134032&#34;
     data-ad-format=&#34;auto&#34;
     data-full-width-responsive=&#34;true&#34;&gt;&lt;/ins&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 C 語言讀取 AmiraMesh 檔案內容，解析 Scalar 與 Vector Fields</title>
      <link>https://blog.gtwang.org/programming/read-amiramesh-file-format-using-c/</link>
      <pubDate>Tue, 19 May 2015 14:48:52 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/read-amiramesh-file-format-using-c/</guid>
      <description>&lt;p&gt;AmiraMesh 是 &lt;a href=&#34;https://amira.zib.de/&#34;&gt;Amira&lt;/a&gt; 原生的檔案格式，學術版的 Amira 是由 &lt;a href=&#34;https://www.zib.de/&#34;&gt;ZIB&lt;/a&gt; 所發展的，商業版的則有 &lt;a href=&#34;https://www.visageimaging.com/&#34;&gt;Visage Imaging&lt;/a&gt; 與 VSG。&lt;/p&gt;
&lt;p&gt;AmiraMesh 的檔案內容可以分為檔頭（header）與資料（data）兩部分，檔頭部分都是以 ASCII 的編碼來儲存，其中包含許多的 meta 資訊，而資料的部分則有 ASCII 與二進位（binary）兩種，這裡我們示範讀取二進位資料的方式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GStreamer 入門使用教學（一）：播放網路影片串流（Streaming）Hello World 程式</title>
      <link>https://blog.gtwang.org/programming/gstreamer-hello-world-streaming/</link>
      <pubDate>Thu, 05 Mar 2015 04:52:34 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/gstreamer-hello-world-streaming/</guid>
      <description>&lt;p&gt;這是 GStreamer 的入門使用教學，播放網路影片串流的 Hello World 程式。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;gstreamer-logo&#34; loading=&#34;lazy&#34; src=&#34;https://blog.gtwang.org/programming/gstreamer-hello-world-streaming/gstreamer-logo.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gstreamer.freedesktop.org/&#34;&gt;GStreamer&lt;/a&gt; 是 GNOME 桌面環境之下用來建立多媒體串流應用的架構（framework），可以簡化影音相關應用程式的開發流程，支援各種常用的多媒體影音格式，如 mp3、ogg、mpeg1、mpeg2、avi、quicktime 等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43;11 Lambda Expression 語法教學與範例</title>
      <link>https://blog.gtwang.org/programming/lambda-expression-in-c11/</link>
      <pubDate>Thu, 19 Feb 2015 20:19:18 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/lambda-expression-in-c11/</guid>
      <description>&lt;p&gt;C++11 標準中所新增的 lambda expression 語法，可以讓函數的定義與使用更加有彈性，程式碼看起來也更簡潔。&lt;/p&gt;
&lt;p&gt;C++11 的標準中加入了一個新的 lambda expression 語法，如果您有一陣子沒有注意最新的 C++ 標準，看到這樣的寫法可能會感覺很奇怪，以下我們將介紹 lambda expression 的使用方式與時機，並提供幾個範例作為參考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C&#43;&#43; 智慧型指標（Smart Pointer）：自動管理與回收記憶體</title>
      <link>https://blog.gtwang.org/programming/cpp-smart-pointers/</link>
      <pubDate>Tue, 17 Feb 2015 20:50:52 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/cpp-smart-pointers/</guid>
      <description>&lt;p&gt;智慧型指標是 C++ 中一個常用的設計模式，它可以讓 C++ 的程式自行管理記憶體的配置與回收，避免記憶體洩漏等問題。&lt;/p&gt;
&lt;p&gt;在 C/C++ 語言中，我們常常會使用指標（pointer）來配置或存取記憶體，一個指標變數儲存了記憶體的位址，而程式設計師就可以運用這個記憶體位址來做出各種變化，是一個非常好用的型別，甚至在某些複雜的應用上，如果沒有指標這項功能的話，可能會讓程式設計師不知道如何開發程式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 語言中關於記憶體釋放的議題</title>
      <link>https://blog.gtwang.org/programming/memory-deallocation-issues-in-c/</link>
      <pubDate>Wed, 02 Oct 2013 07:20:09 +0800</pubDate>
      <guid>https://blog.gtwang.org/programming/memory-deallocation-issues-in-c/</guid>
      <description>&lt;p&gt;這裡討論一些在 C 語言中關於記憶體釋放的議題，包含記憶體的重複釋放、敏感性資料的處理等。&lt;/p&gt;
&lt;p&gt;在 C 語言中在使用完動態配置的記憶體時，我們通常只會記得將自己配置的記憶體釋放，避免記憶體洩漏（memory leak），然後就結束了，但是對於一些敏感性的資料而言，其實這樣還不夠。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
