C - yusukew62/docs GitHub Wiki

C

C実践プログラミング

2章

  • man は -k オプションでキーワード検索できる
# man -k <キーワード>

例としてlibpcapを含むmanページ一覧を表示

# man -k libpcap
pcap-config          (1)  - write libpcap compiler and linker flags to standard output
pcap_geterr          (3pcap)  - get or print libpcap error message text
pcap_geterr [pcap_perror] (3pcap)  - get or print libpcap error message text
pcap_lib_version     (3pcap)  - get the version information for libpcap
pcap-linktype        (7)  - link-layer header types supported by libpcap
pcap_perror          (3pcap)  - get or print libpcap error message text
pcap_perror [pcap_geterr] (3pcap)  - get or print libpcap error message text
pcap-savefile        (5)  - libpcap savefile format
pcap-tstamp          (7)  - packet time stamps in libpcap

5章

  • Cには組み込みの文字列型は用意されていないため、文字列は文字配列として作り上げる
  • Cではある配列を別の配列に代入することはできないため、標準ライブラリ関数のstrcpyを用いる
  • 文字列変数を扱うための関数には、strcpy, strcat, strlen, strcmpなどがある

6章

  • strcmpは2つの文字列が等価の場合は0を返すため、if文ではif(strcmp(str1,str2)==0)として使用する
  • sqrtは関数ライブラリのためコンパイル時にリンクの指定をする必要があり、リンク指定をしない場合ldでエラーがでて終了する
# gcc -g -Wall -o ex6-1 ex6-1.c
/tmp/ccF0pvam.o: In function `main':
/root/c-practice/ex06/ex6-1.c:28: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました

解説

ld がプログラム a.out を作り上げる際に sqrt という 関数がどこにも無かったので, 最後まで実行できなかったというエラーメッセージ。
gcc(ld) は, デフォルトでは 標準 C ライブラリ /usr/lib/libc.a(/usr/lib/libc.so) にある関数しかライブラリをリンクしない。
sqrt は数学関数ライブラリのためこのような事が起こる。標準ライブラリ以外のライブラリにある関数をリンクするにはgccにオプション-lを加えてコンパイルする。
数学関数ライブラリは /usr/lib/libm.a(/usr/lib/libm.so) であり、これをリンクするには次のようにコマンドを打つ。
# gcc <ソース.c> -lm
他のライブラリをリンクする時も同様に -l の後のアルファベットを指定する。

以下の通りコンパイル

# gcc -g -Wall -lm -o ex6-1 ex6-1.c

libmがリンクされた

# ldd ex6-1
        linux-vdso.so.1 =>  (0x00007ffe699f7000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f9902e4e000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f9902aba000)
        /lib64/ld-linux-x86-64.so.2 (0x000056068eef4000)

sqrtが呼べて平方根を求められた

# ./ex6-1 
Enter x, y on pointA: 1 1
Enter x, y on pointB: 2 2
2.000000 1.414214

7章

  • ソフトウェアのライフサイクル
    プログラム作成過程は下記の通り。
No 説明
1.要求仕様書作成 依頼側が求めるプログラム動作をごく一般的な言葉を使って記述する。
2.機能仕様書作成 まずプログラムの最終的な機能を想定し、予備仕様書を作成する。プログラム完成時点でプログラムの機能を完全に記述する。
3.コード設計 設計項目は、主要アルゴリズム、モジュール仕様、ファイルフォーマット、データ構造を記述する。
4.コーディング まずプロトタイプを記述して、次に不足部分を追加していき完全なプログラムを作成する。
5.テスト テストケースを作り、テストを行う。プログラム作成者以外がテストを行うことが望ましい。
6.デバッグ プログラムを修正し、再度テストを行う。
7.リリース プログラムを梱包し、ドキュメントを添付し、利用者に配布する。
8.保守 バグを見つけ、修正する。プログラミング過程のうち保守段階にあたる。
9.改訂とアップデート ユーザからの変更要求をもとに、新しい仕様書を作成し、上記の過程を最初から繰り返す。
  • 電子的考古学
    古いコードを探求、他人が作成したコードを解析するためのツール例は下記の通り。
技法 ツール
クロスリファレンス cscope
プログラムインデンタ indent
プリティプリンタ -
コールグラフ -

10章

  • プリプロセッサとCコンパイルは異なる構文を使用するということを忘れないようにする
  • プリプロセッサは、名前付き定数・マクロ・インクルードファイルなどの構造をCコンパイラに渡す前に認識する
  • 現在はコンパイラにプリプロセッサが組み込まれている
⚠️ **GitHub.com Fallback** ⚠️