DIVE TO WORLD

ITを浅く広くピンポイントにお伝えするブログ

【プログラミング入門】MacでC言語に挑戦(2)

MacC言語に挑戦」の第2回目です。
前回の記事では、C言語のプログラムを動作させる手順についての内容でした。

divetoworld.hatenablog.com

今回は、前回書いたプログラム "hello.c" の意味について解説したいと思います。


目次

Hello, World とは

もう一度前回のソースコードを見てみましょう。


hello.c

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}


このプログラムは「Hello, World (ハロー ワールド)」という有名なプログラムです。
機能的には、単純に "Hello, World!" という文字列を画面に表示するだけ( ^ω^ )
人によって細かな違いはあれど、恐らく世界中で共通の「おまじない」です。

main関数

内容が「おまじない」のままではマズイので、具体的に見ていきましょう。


C言語では、一番初めに実行する構文はmain関数と決まっています。
関数とは、数学の関数 f(x) のように、"関数名(引数)" の形で書きます。
引数とは、関数の入力変数です。
hello.c のmian関数では、引数が不要なので "void" と記述しています。

関数名の後に中かっこ { } で囲んで、その中に内容を書きます。

int main(void) {
    /* ここに記述された内容がmain関数の処理として実行される。 */
}


hello.c では、printf文とreturn文の処理が記述されているので、その2つが実行されます。

    printf("Hello, World!\n");
    return 0;

printf文

printf文は、(標準出力に)文字列を出力します。
Macの「ターミナル」では文字だけの黒い画面が標準出力なので、そこに文字列が出ることになります。
\n (バックスラッシュ n) は改行を意味します。この改行を入れ忘れると、"Hello, World!" のすぐ後に文字が続くことになるので覚えておきましょう。

return文

return文は、main関数の戻り値として "0" を返す意味です。
main関数に限らず、関数はその処理の結果として「戻り値」を返します。数学に関連して考えますと、関数 f(x) = 3x というものがあった場合、この関数 f は、入力が与えられた時に、その3倍の値を返すものです。それと同様に、C言語の関数もreturn文によって戻り値を定める必要があるのです。ちなみに、main関数の戻り値が "0" ということは、「プログラムが正常終了しました」という意味になります。

#include について

includeディレクティブというもので、外部の機能を取り込むときに使用します
動作としては、コンパイル時に、< > の中に記述されたヘッダーファイルと呼ばれる、別のソースコードを読み込みます。
hello.c で使用した stdio.h は、標準入出力に関する定義が記述されており、printf文の定義はここに含まれています。なので、printf文を使用する時は必ず stdio.h をインクルードして下さい

ついに来た! Macのアップデート(WWDC 2017)

 

f:id:mgrtex360:20170606171023p:plain

今年もWWDC 2017が開幕しました!

(日本時間 6月5日 2:00AM 〜)

このイベントはAppleの開発者向けカンファレンスで、Macラインナップの発表もありました。

今回は、本日に発表されました、Macbookのラインナップについて紹介したいと思います。

 

以下が今回アップデートされた主要Macbookラインナップです。

(画像にはありませんが、Macbook AirもCPUが少し変わっています。)

f:id:mgrtex360:20170606171450j:plain

基本的に、ボディなどには変更がなく、マイナーアップデートとなっています。

2016年モデルでは、CPUがIntelの第6世代Coreシリーズ(Skylake)でしたが、第7世代のCoreシリーズ(Kabylake)にアップデートされました。

 

SkylakeとKabylakeはともに14nmプロセスのCPUであり、設計(アーキテクチャー)もほぼ同じです。変更点は、内蔵GPUのクロック向上や新しい動画コーデック(HEVC)のハードウェア対応などがあり、ゲームのパフォーマンス向上や、動画再生時間の向上がメリットになります。

 

特に15インチのMacbook Proについては、搭載の外部GPURadeon Pro 500シリーズにアップデートされているので、動画編集などではより性能を発揮するでしょう。

 

しかし、今回の発表で残念な点は、価格です。

12インチのMacbookが¥142,800〜となっており、値下げされた13インチMacbook Pro(TouchBarなし)と同じ価格となっています。

 

12インチMacbookの方が薄くて軽いとは言え、性能が異なるMacbook Proと同じ価格なのは困る感じですね。

12インチMacbookも$200値下げして欲しいです。

(為替の影響が大きいように感じます。)

 

今回のラインナップはSSDの速度も向上しているようなので、数年前のモデルから買い替えるのには、向いてるかと思います。

 

しかし、年末から来年にかけて、Intelの10nmプロセスを採用した新しいCPU(Cannonlake)が市場に出回る可能性があります。こちらは、大きな変更になることが予想されるので、そのCPUが搭載されたMacを待つのも十分ありです。

 

Macでopencv2.frameworkを試す(OpenCV 3.2.0)

XcodeOpenCVのプログラムを書く場合、従来は"opencv_core.dylib"などのライブラリをインポートしていましたが、version3.xよりiOSと同様に"opencv2.framework"を使うことが出来るようになりました。
OpenCV 3.2.0 で実際に使ってみたいと思います。


手順
1. OpenCVソースコード入手
2. フレームワークをビルド
3. Xcodeプロジェクトを作成
4. 必要なライブラリをインポート


iOS用のフレームワーク公式サイトよりダウンロード可能ですが、macOSは自分でビルドする必要があります。まずはソースコードを入手します。
f:id:mgrtex360:20161231141754p:plain
ダウンロードしたzipファイルを展開して、適当な作業フォルダに移動させておきましょう。


ビルド自体はとても簡単です。pythonファイルを実行するだけですが、動作に"CMake"が必要なので事前にインストールして下さい。CMakeが使える環境なら、pythonを実行するだけです。

python ./opencv/platforms/osx/build_framework.py [出力ディレクトリ]

実行すると、指定したディレクトリの中に"opencv2.framework"が生成されます。


次にXcodeプロジェクトを作成します。
"Create a new Xcode project"からmacOSの"Command Line Tool"を選択します。Languageは"C++"を選択。
f:id:mgrtex360:20161231143651p:plain


プロジェクトが開いたら、ライブラリの設定を行います。"Linked Frameworks and Libraries"の+ボタンをクリックして"Add Other..."から先ほど生成したopencv2.frameworkを選択します。
f:id:mgrtex360:20161231144209p:plain


opencv2.frameworkの追加が確認できれば、あとは"Build Settings"タブの"Search Paths"にある"Framework Search Paths"を設定すれば完了です。
※この手順を省くとヘッダーファイルのインクルードができませんので、注意して下さい。


しかし、このままだと実行時にエラーが発生するので、追加でライブラリをインポートとする必要があります。確認できた範囲だと、"AppKit.framework"、"OpenCL.framework"、"libcblas.tbd"、"liblapack.tbd"を別途インポートすれば実行可能みたいです。皆さんの環境でもお試しあれ。
f:id:mgrtex360:20161231145338p:plain