| コンテンツコード | DP45551 |
|---|---|
| 著者 | 鹿取 祐二 |
| 発行元 | CQ出版社 |
| 価格(ライセンス料金) | 2,860円 |
| 仕様 | 本誌162ページ PDF 約20Mバイト |
| 発行日 | 2026/04/01 |
| 更新日 | 2026/03/30 |
| 制限 | ダウンロード制限: サービス停止まで |
|---|---|
| ライセンス条件 | ●本書は著作物であり,著作権法により保護されています.本書の一部,または全部を著作権者に断りなく,複製または改変し他人に譲渡すること,インターネットなどに公開することは法律により固く禁止されています.違反した場合は,民事上の制裁および刑事罰の対象となることがあります. ●本書は,CQ出版社から出版された,2026年4月1日発行の同タイトルの雑誌・書籍をPDFファイルとしたものです.電子版制作の都合上,オリジナルの書籍と比べて,一部の書体や線の太さ・種類が変更になっている場合があります.また,電子版という性格から,オリジナルの書籍と同一のプリント品質は保証できません.ご了承ください. ●予告なく,本サービス(Tech Village 書庫&販売)を一時休止または終了することがあります.サービス休止時やサービス終了後は,本コンテンツをダウンロードまたは閲覧できなくなります. |
解説
C言語は組み込み機器を開発する上で現在でも主力のプログラミング言語です.しかしC言語は仕様があいまいという問題があります.そこで本書は仕様のあいまいさに着目し,正しいプログラムを書く方法をさまざまなマイコン処理系で解説します.
本書は月刊『Interface』誌2021年1月号~2024年6月号に掲載された,
連載「マイコンC言語転ばぬ先のつえ」の内容を加筆,再編集したものです.
※ 本コンテンツは,2026年3月30日発売の『信頼性&再利用性を高めるC言語プログラミング』をPDFファイルとしたものです.
詳細な内容はこちら
目次
第1章 整数型1.値の範囲
整数型の値の範囲は曖昧である
2.負の値の表現形式
整数型の負の値は表現形式が規定されていない
3.代入規則
代入の規則は代入先の型で変わる
4.符号反転
符号なし整数型を符号反転すると結果は必ず最大値+1の剰余になる
5.整数の格上げ
char型やshort型を使っても「整数の格上げ」でint型に拡張されてしまう
6.算術変換規則
int型の精度によって結果が変わる整数型の算術変換規則
7.整数定数
整数定数の型の割り当てと接尾子
第2章 浮動小数点型
8.内部表現
浮動小数点型には内部表現の規定がない
9.誤差
誤差により値を正確に表現できない場合がある
10.性能
浮動小数点型を高速・高効率に演算する方法はマイコンごとに異なる
11.精度
適切な精度で演算しないと性能が悪くなる
第3章 派生型
12.typedef
難しい配列やポインタはtypedefで分かりやすくなる
13.構造体
マイコンで構造体を使うときの作法とテクニック
14.共用体
共用体は適正に利用すればメモリ量の削減に効果を発揮する
15.ビット・フィールド
文法も曖昧だが…周辺機能の制御に向く
第4章 演算子
16.演算子の小括弧
演算順を決めるものとは別物!演算子の小括弧は「関数呼び出し」に使う
17.添字演算子と間接演算子
添字演算子[ ]と間接演算子*…実は全く同じ意味
18.後置インクリメント(デクリメント)
優先順位と演算タイミングを別々に考えるべし
19.キャスト演算子
実はそれほど必要ではない
20.汎用ポインタ
便利なポインタ型だが…
21.乗法演算子と加法演算子
整数型だと数学の交換法則は成り立たない
22.乗除算の仕様
C言語とマイコンとでは異なる
23.加法演算子による演算
ポインタ型と整数型の演算に使うと,演算結果はポインタ型になる
24.シフト演算子
制約とダイナミック・シフト命令の有無に注意
25.関係演算子
比較結果を利用して条件分岐を効率よく実行できる場合もある
26.等値演算子
ゼロとの比較をする場合は注意が必要
27.ビットごとの論理演算子
意外と優先順位が低い
28.論理演算子
副作用を伴う式は使用禁止
29.条件演算子
if文と使い方が異なることに注意
30.カンマ演算子
プログラムを効率的に記述できる
第5章 最適化
31.実行速度と使用メモリ量
トレードオフの関係…事前に処理系の設定も確認しよう
32.最適化
処理系が最適化で行うこと
33.最適化の抑止(1)…アクセス・サイズ
アクセス・サイズを厳守する方法
34.最適化の抑止(2)…周辺機能レジスタ
周辺機能レジスタへの書き込み/読み込み処理
35.変数に対する最適化の抑止(1)…局所変数
局所変数は積極的に最適化を実施する
36.変数に対する最適化の抑止(2)…デバッグ時
変数の値が参照できないときは一時的に指定する
37.変数に対する最適化の抑止(3)…大域変数
割り込みとの絡みで指定する・しないを決定する
第6章 静的変数領域の削減
38.static記憶クラス
staticには隠蔽と静的の2つの意味がある
39.大域変数に指定するstatic記憶クラス
大域変数に対して使うstatic記憶クラスは変数の破損を防ぐ隠蔽の意味を持つ
40.局所変数に指定するstatic記憶クラス
局所変数に対して使うstatic記憶クラスは静的の意味で使う
41.動的変数と静的変数の違い
番地,初期値の設定タイミング,初期状態をプログラムで見てみる
42.初期値の有無
静的変数の取り扱いは初期値の有無で変わる
43.削減方法(1)…初期値がゼロの場合
初期値がゼロなら記述しない
44.削減方法(2)…初期値がある場合
初期値が必要なら記述する
45.削減方法(3)…初期値を変更しない場合
const型修飾子を指定する
第7章 スタック・サイズの算出
46.スタック領域の確保
処理系によって適当に確保される
47.スタック領域の使われ方
関数呼び出し時にどのように使われるのか見てみる
48.スタック・サイズの計算方法
まずは手動で計算する
49.ツールでスタック・サイズを計算する
ツールの機能で自動的に計算する
第8章 動的スタック領域の削減
50.スタック領域の減らし方
ネスト・レベルを減らすのが最優先
51.関数の引数の個数
汎用レジスタに格納できる個数に抑えよう
52.局所変数の削減
全ての処理系に共通の内容はない
53.CPU内部レジスタの退避領域
退避領域を削減する
付録A リファレンス
付録B 文法理解度クイズ
本書は月刊『Interface』誌2021年1月号~2024年6月号に掲載された,
連載「マイコンC言語転ばぬ先のつえ」の内容を加筆,再編集したものです.










