C

C言語コードリーディング

『WEB+DB PRESS vol.35』*1のコードリーディング特集の「第4章 C言語コードリーディング」を読みました。 重要な構造体を見つけるべし マクロが追いづらければプリプロセッサで展開してしまえ ログ出力して、エラーログを追え gdbを使え 等々、C言語のコード…

imakeコードリーディングメモ・プリプロセッサ部編

imakeコードリーディングメモ「プリプロセッサ部」編です。# これまでの道のり。下ほど新。 xmkmfとimakeによるMakefile生成 - 虎塚 メモ: lndirコマンド - 虎塚 疑問メモ: ビルドするGCCのバージョン - 虎塚 「Building and Installing the X Window System…

「ふつ☆りな」第6章の練習問題(1)続々

飽きたので答え見ました。\(^o^)/解答例が本に見つからないと前に書きましたが、著者のWebサイトからサンプルコードをダウンロードできる形式でした。 問題 タブ文字('\t')を「\t」、改行を「'$'+改行」として出力するcatコマンドを書きなさい。 解答例…

「ふつりな」第6章の練習問題(1)・続

C

『ふつうのLinuxプログラミング』に入門して、練習問題を解いています。前回(http://d.hatena.ne.jp/torazuka/20110706/c)解けなかった問題の続き。 問題 タブ文字('\t')を「\t」、改行を「'$'+改行」として出力するcatコマンドを書きなさい。 前回、タ…

「ふつりな!」第6章の練習問題(1)

C

# けいおん!風に『ふつうのLinuxプログラミング』に入門中です。ありのまま今起こったことを話すと、「ファイル入出力の勉強をしていたと思ったら、C言語の勉強になっていた」。何をいっているのか、分かりたくないけれども、そんなカンジに。 問題 タブ文…

ふつうのLinuxプログラミングに入門した。第5章 練習問題

ツールの実装を読んでいると、Linuxのシステムコールやシグナルの知識が足りなくて、ときどき理解できません。例)「シグナルを出すときはkill関数を使う」らしいけど、ツールの中ではsignal関数使ってるよ…どういうことなの… ←いまここというわけで、『ふつ…

「The C Preprocessor」よんだ

C

The C Preprocessor なんで今まで読んでないのかと。プリプロセッサについて悩んだことのある話が、何から何まで書いてありました。(当たり前) #include はシステムファイル、#include "filename" はユーザファイル ヘッダファイルの重複読み込みを防ぐた…

cppコマンドを使って定義済みマクロの一覧を得る

C

cpp(Cプリプロセッサ)コマンドについて学んだのでメモ。Cコンパイラが内部で起動するプリプロセッサですが、単体で実行することもできます。・・・でも、たぶん、あまりしないのかも? $ which cpp /usr/bin/cpp Invoking the C Preprocessor 色々オプショ…

メモ: lndirコマンド

ひと月前の作業を再開。 xmkmfとimakeによるMakefile生成 - 虎塚 Xをビルドしようとしています。ソースコードについてくる「Building and Installing the X Window System」というマニュアルを読むと、"1台以上のマシンでビルドするときは、lndirを実行して…

疑問メモ: 値渡し、参照渡し、Java、C

Javaのオブジェクト参照は、Cのポインタをラップしたようなモノである、という理解なのだけれど、要は何なのだろう? - Java C C++ 仮引数が基本データ型(Java) or 変数のみ(C/C++) 値渡し 値渡し 値渡し 仮引数が配列かオブジェクト(Java) or 変数*(C…

変数の初期化 on 主記憶(C入門中)

C

何もつけずに定義した変数は、初期値を与えないと、不定値で初期化される。auto、registerをつけて定義した変数も同じ。 staticをつけて定義した変数は、初期値を与えないと、0で初期化される。main関数の実行前に生成され、プログラム終了時に消滅する。 仮…

仮引数と多次元配列の話(C入門中)

C

沢山の人が、エクリプスたんからチョコを貰って行ってくれたようだけれど・・・読んでるほうが恥ずかしくなるくらい低レベルなCの学習記録は、こんな日こそ淡々と更新したい。(マゾい) 覚えたこと 多次元配列の仮引数 関数の仮引数に多次元配列を書くとき…

externとか配列とか(C入門中)

C

(追記: Enterキー押したら投稿されてもうた。ちょっと修正。はてなェ・・・) 何やってるの? 観念して望洋本の入門編を入手したので、読んだり書いたりしています。あぁ、ごく基本的な文法事項の説明がちゃんと載っている・・・ 恥ずかしがらずに最初から入…

標準関数の戻り値(C言語入門中)

C

今日覚えたこと 0/非0 C言語で標準関数を学ぶときは、戻り値に注意すること。どういうとき0で、どういうとき非0なのか。if文の制御式で関数を見かけて、戻り値どうなるんだっけ?と混乱したら、調べること。自分の直観と反する場合もある。 他 %演算子は、正…

VCのコンパイル設定など(C学習中)

C

『Code Reading』第2章を読んだり写して動かしたりしつつ、覚えたこととかワカランこととかメモ。環境:Visual C++ 2010 Express __Pマクロの意味 Pマクロは、ANSI以前のコンパイラ向けの関数宣言。 参考:http://ogawa.s18.xrea.com/tdiary/20031211.html#p…

文字種判別とかアドレスの参照とか(C学習中)

C

今日覚えたこと 文字種判別の関数いろいろ 制御文字: iscntrl 空白文字を含む表示文字: isprint 空白文字を含まない表示文字: isgraph 10進数字: isdigit 16進数字: isxdigit 英大文字; isupper 英小文字: islower 英数字: isalnum 英数字でも空白でもない表…

ファイルスコープとブロックスコープ(C入門中)

C

今日覚えたこと ファイルスコープ 関数の外で宣言した変数は、ファイル内のすべての関数から参照できる C言語らしい概念。ファイルスコープに相当するものは、Javaにはない(ハズ) 内部有効範囲の変数が、外部有効範囲の変数を隠す ファイルスコープで変数h…

ワイド文字の使いどころって??(C入門中)

C

今日覚えたこと setlocale関数 文化圏固有の環境に設定する。 setlocale(LC_ALL, ""); 第2引数で空文字を渡すことは、次を意味する。 localeの値が""の場合、処理系定義の固有の環境を指定する。 BohYoh.com【C言語講座】標準ライブラリ setlocale わからな…

char型とか(C学習中)

C

今日覚えたこと char型 char型は、文字を表す整数型で、3種類ある signed char unsigned char char 無印のchar型は、signed charかunsigned charのどちらかと等しい型。どちらに等しいかは、処理系に依存する。・・・ということは、処理系に依存する書き方を…

メモ:VC6のプロジェクトをVisual C++ 2010形式に変換できない

C

未解決です。環境が整った時のために、ググって出てきた解決策を貼っておきます。とほほ 現象 VC6のプロジェクトファイルをVC++2010のプロジェクト形式に変換できない。dspファイルを選択して開こうとすると、現在の形式に変換するか聞かれる。[はい]を選…

printfもscanfも、いろいろできるんだなぁ…(C学習中)

C

今日覚えたこと 可変長引数の書き方 「...」で、任意型を任意個数 終端がnullになる文字列配列と、null文字を含まない文字の配列がある 配列の宣言時に、要素数ぴったりの文字で初期化すると、後者の配列が生成される 今日悟ったこと printfとscanfの仕様を…

clock関数とかstrlen関数とか。size_tがわからない(C学習中)

C

今日覚えたこと clock関数 起動からのクロック数を求める。 戻り値から秒を求めるには、CLOCKS_PER_SECで割る 戻り値のclock_tは、何らかの算術型の同義語として定義される 手元の環境では、typedef long clock_t エラーのときは、-1をclock_t型にキャストし…

なぜC言語はASCIIを扱うの?(C学習中)

C

今日覚えたこと 拡張表記 \f:書式送り プリンタ出力で改ページをするときに使う \v:垂直タブ これもプリンタ出力で使う 水平タブと違って、画面に出力しても文字化けするだけ(ただし環境によるハズ) putchar関数 引数に与えられた文字を表示する 引数はi…

putsとか配列とか(C入門中)

C

今日覚えたこと ローカル変数はブロックの先頭で宣言する シラナカッタ。変数は使う直前に宣言した方が分かりやすいヨネと思って、何の気なしに書いたら動かなかった。for文の()の中で、変数を宣言できないことは、知っていたけども。。。 puts関数 NULL文字…

擬似乱数生成の関数(C言語学習中)

C

今日覚えたこと rand関数を使用して擬似乱数列を作る しかし、rand関数をそのまま使うと、種に定数1が使用されてしまう そのため、rand関数より前で、srand関数を呼び出す srand関数は、擬似乱数系列生成の種に値を設定することで、乱数の発生系列を変更する…

scanfの異常値入力の対策(C学習中)

C

scanfは予期しない入力があると無限ループに陥る(C学習中)のつづき。 今日ほげったこと scanfの戻り値を使って入力の正誤判定をし、空読みで無限ループを回避する int hoge; int ans = 7; while(1){ // 異常値対策 if(scanf("%d", &hoge) != 1){ printf("…

scanfは予期しない入力があると無限ループに陥る(C学習中)

C

今日覚えたこと scanf で int 型の変数に値を受け取り、ある値と等しければ break する。それまで while(1) で回す。というコードを書いていた。こういうの。 int hoge; int moga = 7; while(1) { scanf("%d", &hoge) if (hoge < moga) { // hogeが小さいと…

引数がない関数宣言にはvoidが必要(C学習中)

C

今日覚えたこと 引数のない関数を宣言するときは、括弧の中にvoidと書く必要がある。 参考: ŠÖ”‚̃vƒƒgƒ^ƒCƒv これはだめで、 int main() こうするらしい。Javaと違う。 int main(void) scanfで、値を受け取る変数に&を付け忘れると、値が受け取れない。そ…

今日もとほほ(C言語)

C

今日覚えたこと intとcharのサイズが等しい環境では、文字とEOFを比較してはいけない。 「(int、あるいは)EOFを返す関数」の戻り値とは比較してよいらしい。 FILE *fp; while(c != EOF){ c = getc(fp); // 色々 } は推奨されないということですか。 わから…

C言語もわからないよ、とほほ

C

仕事でみているOSSのツールがCなのです。これまで気合いで読んでいたのですが、理解したいので、恥を捨てて入門することに。 最近覚えたこと コマンドライン引数の1つ目は、配列の2つ目の要素に入っている ファイルポインタを宣言する、取得する、という概念…