C言語

リストライブラリ(汎用コンテナ リスト系)

更に更新した http://www.geocities.jp/kenshin_320/リスト系だと、他に欲しいのは、配列への変換とか、逆順に入れ替えるとか、あたりかな。リスト系を離れるとVector、mapあたりが使いでがあるな。でもめんどい。CSTLってのを見つけたが、これはSTLを意識し…

コンテナ(list)ライブラリ

まだテストが全部かけてなかったり、追加したい機能があったり、ドキュメントが不十分だったりするが、 一応おいておこう。zipファイルは直リンクだとダメみたい。「C コンテナソース」からダウンロードできる。 http://www.geocities.jp/kenshin_320/

コンテナライブラリ(List)

リストライブラリを更に汎用にした。 なんでも格納できるようにしたが、その分格納したオブジェクトを開放する関数、ノードが格納している オブジェクトを画面にDumpする関数を登録したり、使い方は難しくなった。 後は、これを利用して、スタックとキューの…

listライブラリ

Cでstlのリストっぽいことをやってみた。 Nextと対照的にprevを実装すべきだが、とりあえずってことで。 今のところ格納しているのはintに決め打ちだがvoid *で持てば、汎用的に保持できる。 しかし、デストラクタがめんどい。list.h #ifndef LIST_H__ #defi…

ポインタ

はてなブックマークで上位になっていたので読んでみた。 http://www.chokkan.org/lectures/2012c/p2-3_pointer.pdfなかなか丁寧で出来は良い。一点だけ、「ポインタと配列が同等」という説明が引っかかる。 むしろ、一見交換できるように見えて混同すること…

 文法宣言

新人研修用にC言語の資料を作成中。K&R2ndを元に、文法要約を作ったのだが、つながりがわからない所がある。やっぱり宣言のところ。init-declarator 初期宣言子かな?初期化付と無しのの宣言子をまとめたものかな?declaration: declaration-specifiers init…

 文法サマリ

https://docs.google.com/document/pub?id=1Sx-P3uJutAI7xHKfuqgKWCHORHWjiirtRE7cE1CLj7A日本語版も作ったが、読み易くない。 https://docs.google.com/document/pub?id=1DHZCTf2B1ge_xXEWliBzwZFR60bPIKFhcQmxSZ_Qav0

メッセージキュー on cygwin

メッセージキューのサンプルコードを書いてみた。 //////////////////////////////////// // 計算メッセージヘッダ calc.h //////////////////////////////////// #ifndef CALC_HEADER_FILE_INCLUDED__ #define CALC_HEADER_FILE_INCLUDED__ /* メッセージキ…

勉強会ネタ

プロセス間通信二つ以上のプログラム間で通信を行う方法・メッセージキュー POSIX準拠・インターネットプロトコル 本来はネット越しに通信を行う手段だが、同一マシンに対して送信することも可能。メッセージキューと比較すると設定項目が多い。しかしIPは現…

POSIXメッセージキューサンプルコード

ポイント msgget: メッセージキューを作成する。keyは次のftokで作成する。 ftok: メッセージキュー作成のキーを生成する。 msgsnd: メッセージ送信。実際は指定したメッセージキューにエンキューする。 msgrcv: メッセージ受信。実際は指定したメッセージキ…

ソート関数CUnitテストコード

ソート関数用のCUnitテストコードを書いてみたので公開する。 ターゲットは以下のプロトタイプ宣言を持つソート関数。 pArrayが配列,numはその要素数である。 void sort(int *pArray, int num);試してみると、書けていたと思っていたテストコードもなかなか…

static

http://d.hatena.ne.jp/Einherjar/20100913 2ちゃんねるム板の「C言語なら俺に聞け」でstaticは、ローカル変数でも内部リンケージでしょ、みたいな発言があって、そう考えれば、2通りの意味にはならないよな、と妙に納得していた。しかし、スコープ切ってい…

配列の配列 ポインタの配列 配列を指すポインタ ポインタを指すポインタ

※補足 マクロ関数の引数に()を付けていなかったので、意図した結果になってなかった。コードの修正と、結果の取り直しをした。何度もネタにしているけど、この間C勉強会をした時に、まだよくわかっていない人がいた。そのたびに、手を変え品を変え説明してい…

C言語における6つの文

手元にK&Rが無いときにはgoogleに頼るのだけれど、「C言語 文 式」あたりで検索して、上位を見ていくと相当げんなりする。用語の使い方が、全くなっていない。もっとも以前は自分だって、用語の使い方は正確ではなかったと思い当たる。そうやって、俺様用語…

C文法マスターのための3項目

C言語を扱った入門書やWebサイトは、数多くある。しかし特にWebサイトで文法的に誤った内容を含むところが多い。個人的にはプログラミングマスターの手始めとして、文法を徹底的にマスターするのがよいと思う。そのポイントは以下の3つを徹底的に理解するこ…

switch

シンタックス確認して、改めて思ったけど、switchの定義は以下。 switch(式)文この文には何の制限もない。caseもdefaultもbreakも不要。だからかなり奇っ怪な文が書ける。C言語覚えたての頃、switch文にかなり違和感があったけど、ある意味当然だったのか…

socketプログラム

ソケットプログラムって、設定するパラメータが多くて、どれを選ぶかよくわかんないんだよね。ついでに世の主流がUnixのsoketとWindowsのWinSockの2つがあるから、ますます混乱する。ついでにcygwin上だとどっちの流儀なんだ?というわけだ。 まぁそこは試し…

式を正確に説明するのは面倒だと思ったので軽くメモ。一次式 識別子 定数 文字列リテラル (式) 式 代入式 式, 代入式 ってことは、式は全部代入式ってことじゃん。代入式 条件式 一次式 代入演算子 代入式 って感じで結局すべての式は代入式になっちゃうみた…

条件式 論理的OR式*1 論理的OR式 ? 式 : 条件式 論理的OR式*2 論理的AND式 論理的OR式 || 論理的AND式 なんと論理的AND式は論理的OR式に包含されているとは、、、。論理的AND式 ビットごとの内包的OR式*3 論理的AND式 && ビットごとの内包的OR式 内包的ORと…

ポインタを指すポインタ

最後、もう一度お題を挙げる。 以下の違いを説明せよ。 1)int a[2][3]; 2)int a[3][2]; 3)int *a[3]; 4)int (*a)[3]; 5)int **a; 最後にポインタのポインタ。俗にダブルポインタなどと言ったりする。4)に比べれば、割となじみがある。呼び出し先で、ポインタ…

文字列代入?

文字の代入 - Programming22 おとなり日記で見つけたのでコメントする。 char str1[5]; char str2[] = "tekitou"; char *str3 = "tekitou2"; str1 = str2; /*error*/ str1 = str3; /*error*/ str3 = str2; /*OK*/ 静的配列で確保したstr1は str1 = str2; /*…

配列を指すポインタ

さて三度、お題を再掲する。 以下の違いを説明せよ。 1)int a[2][3]; 2)int a[3][2]; 3)int *a[3]; 4)int (*a)[3]; 5)int **a; 1)〜3)まではすでに述べた。今回は4) int (*a)[3];を取り上げる。 このときのaの型はint[3]を指すポインタとなる。1)〜3)は配列…

SWAPマクロ改良

主な変更点 コメント整備 入れ替えるオブジェクトのサイズチェックを行い、サイズが異なる場合、入れ替えを行わないに修正。 サンプルドライバ結果表示の改善 識別子が衝突しにくいように、一時変数名、型名を長くした。 #include <stdio.h> /* オブジェクトa, bの値</stdio.h>…

配列の配列

C言語で配列とポインタの理解は第一関門だと思う。私が、C言語のスキルを試すときによくやる質問は次のような物だ。 以下の違いを説明せよ。 1)int a[2][3]; 2)int a[3][2]; 3)int *a[3]; 4)int (*a)[3]; 5)int **a; 普通にCを書ける人でも、これに満足に答…

ポインタの配列

前のエントリのお題を再掲する。 以下の違いを説明せよ。 1)int a[2][3]; 2)int a[3][2]; 3)int *a[3]; 4)int (*a)[3]; 5)int **a; 次は3)のポインタの配列がどのようにメモリ上に配置されるかを見る。お題はint *a[3]であるが、扱いやすさと、実際のコード…

コードレビュー

引き続き押しかけコードレビュー元コード #include <stdio.h> #include <stdlib.h> typedef struct LIST_T list_t; typedef struct LIST_ELEMENT_T *elist_t; /* リストノード構造体 */ struct LIST_ELEMENT_T { int data; /* 保持するデータ */ struct LIST_ELEMENT_T *next; /</stdlib.h></stdio.h>…

押しかけレビュー

Windows より Mac より Linux がいい 第3回資料資料押しかけレビュー 第3回目 7ページ目 このままではprintfのところで警告が出るはず。warning freeにするためには以下のようにサイズを指定する。 printf(“%hhu\n”, *c++); 10ページ目 XORを使うと同じオブ…

勉強会資料のレビュー

今年は勉強会の講師ではなく、お目付役となったので、ちょっと気楽だ。入社からずっと教えてきた4年目のメンバーが講師をすることになったので、お手並み拝見である。と思っていたら、C言語勉強会の資料を見つけたので、お節介ながらレビューしてみる。Windo…

gcc拡張 構造体の初期化

仕事で見たコードでなんだこれ?と思ったコードがあった。調べてみるとgcc拡張を使ったコードだった。 #include<stdio.h> typedef struct Hoge { int x; int y; int z; } Hoge; /* gcc拡張を使った初期化 */ Hoge hoge = { x: 1, y: 2, /* z: 3, */ /* 初期化なしのメ</stdio.h>…

ブール値との比較

Cには真偽を表す型はなく、アセンブラっぽく0が偽、それ以外が真となる。ついでにほとんどの一次式は値を持つ(戻り値の型がvoid以外は値を持つ)のでバグの温床になりやすい。 以上は枕でここからが本題。業務上のコーディングで以下のようなコードになった。…