ネタを何にしようか困っていたけどドコかの誰かにヒントをもらったので構造体を。
構造体は何気に便利です。
単純に「入れ物」として使うだけでもありがたい言語仕様である。
たとえば WindowsSDK には RECT 構造体が define されている。
RECT 構造体
コレを Linux で利用するには自身で定義するだけ。
LONG なんて Linux では当然定義されていないので int か long で全置換。
#include <stdio.h> #include <string.h> typedef struct tagRECT { int left; int top; int right; int bottom; } RECT; int main(int argc, char *argv[]) { RECT rc = {10, 10, 320, 240}; printf("x=%d, y=%d, width=%d, height=%d\n", rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); return 0; }
後はこの rc という変数の要素がウインドウのサイズ情報なのだと理解しやすい。
他のデータは他の構造体でまとめる、内部で利用する情報はまとめたほうが整理しやすい。
ソレのドコが便利なのかはメモリ内に保存するデータが多くなると実感するよ。
実際にアプリを作っているといつのまにかトンデモネェ数になってしまうから。
たとえば私の作った Y901x でのアトリビュートや Cinema の public 変数中身の数を見て呆れてくれ。
実際にアプリを作ったことが無い人には解らないかもだけどコレでも少ないほうだ。
それだけならたいして便利では無いのですけど。
Windows で GUI アプリを本当に作っている人なら GetWindowRect 関数を使ったことが無い人はいない。
と思うけどどうなのだろう。
GetWindowRect 関数
そう、この関数に RECT 構造体のポインタを渡せばウインドウ外観のサイズ情報は一度で取得できる。
void hoge(HWND hWnd) { RECT rc; GetWindowRect(hWnd, &rc); /* サイズに関する何かの処理 */
つまり構造体のポインタを渡すだけで多数の情報を一度でゲットできる関数を作れば後々で楽。
C# 言語なんて仕様でソレを駆使している感じ、GC なので戻り値で済ませるように作っているけど。
おかげで型がアホみたく多い言語になってしまったのは何ともいえん、バランスって難しい。
とにかく、後々サイズ大きくなりそうなアプリを作るなら構造体の利用方法を覚えたほうがいい。
というか class の利用方法を覚えるのに必須の知識ですので。