【プログラミング入門】MacでC言語に挑戦(2)
「MacでC言語に挑戦」の第2回目です。
前回の記事では、C言語のプログラムを動作させる手順についての内容でした。
今回は、前回書いたプログラム "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" ということは、「プログラムが正常終了しました」という意味になります。
ついに来た! Macのアップデート(WWDC 2017)
今年もWWDC 2017が開幕しました!
(日本時間 6月5日 2:00AM 〜)
このイベントはAppleの開発者向けカンファレンスで、Macラインナップの発表もありました。
今回は、本日に発表されました、Macbookのラインナップについて紹介したいと思います。
以下が今回アップデートされた主要Macbookラインナップです。
(画像にはありませんが、Macbook AirもCPUが少し変わっています。)
基本的に、ボディなどには変更がなく、マイナーアップデートとなっています。
2016年モデルでは、CPUがIntelの第6世代Coreシリーズ(Skylake)でしたが、第7世代のCoreシリーズ(Kabylake)にアップデートされました。
SkylakeとKabylakeはともに14nmプロセスのCPUであり、設計(アーキテクチャー)もほぼ同じです。変更点は、内蔵GPUのクロック向上や新しい動画コーデック(HEVC)のハードウェア対応などがあり、ゲームのパフォーマンス向上や、動画再生時間の向上がメリットになります。
特に15インチのMacbook Proについては、搭載の外部GPUがRadeon 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)
XcodeでOpenCVのプログラムを書く場合、従来は"opencv_core.dylib"などのライブラリをインポートしていましたが、version3.xよりiOSと同様に"opencv2.framework"を使うことが出来るようになりました。
OpenCV 3.2.0 で実際に使ってみたいと思います。
手順
1. OpenCVのソースコード入手
2. フレームワークをビルド
3. Xcodeプロジェクトを作成
4. 必要なライブラリをインポート
iOS用のフレームワークは公式サイトよりダウンロード可能ですが、macOSは自分でビルドする必要があります。まずはソースコードを入手します。
ダウンロードした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++"を選択。
プロジェクトが開いたら、ライブラリの設定を行います。"Linked Frameworks and Libraries"の+ボタンをクリックして"Add Other..."から先ほど生成したopencv2.frameworkを選択します。
opencv2.frameworkの追加が確認できれば、あとは"Build Settings"タブの"Search Paths"にある"Framework Search Paths"を設定すれば完了です。
※この手順を省くとヘッダーファイルのインクルードができませんので、注意して下さい。
しかし、このままだと実行時にエラーが発生するので、追加でライブラリをインポートとする必要があります。確認できた範囲だと、"AppKit.framework"、"OpenCL.framework"、"libcblas.tbd"、"liblapack.tbd"を別途インポートすれば実行可能みたいです。皆さんの環境でもお試しあれ。