ChishiroのC言語

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

Windows,MacOS,Linux/UNIX,FreeBSD等のOS開発に利用されるプログラミング言語「C言語」に関する記事を紹介します.

C言語を習得してコンピュータの本質を理解したいあなたにおすすめです.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

友だち追加

事前に必要な基礎知識

本ブログの記事は主にC言語の中級者~上級者向けに書かれています.

具体的には,以下の方を対象としています.

  • C言語を利用して研究開発している情報系の学部4年生~大学院生(修士・博士)
  • ロボット,自動車,IoTを対象としたC言語エンジニア(組込み・IoTエンジニア)
  • OSの中身を学びたい方
  • コンピュータの本質を理解したい方

事前に必要な基礎知識として,以下のコンピュータの基本を習得しているとします.

  • ハードウェア
  • OS
  • C言語(初心者)

これらのコンピュータの基本が身についていない場合は,まずは以下の本を理解した上で学ぶことをおすすめします.どれも名著です.

もちろん,これらの本を読みながらC言語を学んでもOKです.

ハードウェア

ハードウェアのおすすめの本は「コンピュータの構成と設計 第5版」です.

コンピュータの構成と設計 第5版は,コンピュータアーキテクチャ(ハードウェア)の基礎を学ぶための良書です.

本の著者はデイビッド・パターソンとジョン・ヘネシーで,苗字の最初の2文字をそれぞれ取って「パタヘネ」と呼ばれています.

パタヘネはコンピュータアーキテクチャを学ぶための必読書です.



コンピュータの構成と設計 第5版を理解して余裕があるあなたは,「コンピュータアーキテクチャ[第6版]定量的アプローチ」をおすすめします.

コンピュータアーキテクチャ[第6版]定量的アプローチの著者は,順番は違いますが,同じくジョン・ヘネシーとデイビッド・パターソンで,苗字の最初の2文字をそれぞれ取って「ヘネパタ」と呼ばれています.

ヘネパタはパタヘネよりは高度な内容ですが,挑戦したいあなたにおすすめです.


OS

「オペレーティングシステム 第3版」は,OSの本質が学べる本です.

オペレーティングシステム 第3版の著者は,アンドリュー・タネンバウムです.

アンドリュー・タネンバウムは,MINIXという教育用のOSを開発したことで有名です.

オペレーティングシステム 第3版OSの本質を学べます.


C言語(初心者)

最初に紹介する書籍は,C言語を開発したブライアン・カーニハンとデニス・リッチー(K&R)が書いた「プログラミング言語C 第2版」です.

プログラミング言語C 第2版は1988年発売と結構古いですが,一度読んでおくことをおすすめします.


C言語の初心者向けの内容を独学したいあなたに,以下の無料サイトをおすすめします.

どちらも人気サイトなので,書籍化されています.



ちょっとC言語の独学は難しいな,と思うあなたは,C言語を学べるおすすめのオンラインプログラミングスクール3社を読みましょう.

C言語 プログラミングスクール
C言語を学べるおすすめのオンラインプログラミングスクール3社

こういった悩みにお答えします. 本記事の内容:C言語を学べるおすすめのオンラインプログラミングスクール3社 KENスクール Winスクール 日本プログラミングスクール こういった私が解説していきます. ...

続きを見る

C言語の開発環境

本ブログにおけるC言語の開発環境は,特に断りがない限り以下になります.

  • Intel 64ビットCPU(マルチコア)
  • Linux 5.3.0(Ubuntu 20.04 LTS)
  • GCC 10.3.0

また,GCC 10.3.0の比較用のコンパイラとしてClang 10.0.0,他の開発環境としてWindows 10上でVisual Studio 2019を利用することがあります.

C言語のコードのライセンス

本ブログでオープンソースとして公開する私が作成したC言語のコードのライセンスは,2条項 BSDライセンスになります.

また,引用するコードは,そのライセンスに従います.

例えば,Linuxカーネルのコードのライセンスは,GPL Version 2になります.

私が書いたコードで,あなたのコーディング時間を減らすことができます.

つまり,あなたの研究開発や仕事の効率を上げることができますので,是非利用して下さい!

C言語の概要

C言語とは
C言語とは【元東大教員から学べます】

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語2 C言語ができること3 C言語の人気4 Hello world5 まとめ C言語 C言語は,1972年にアメリカのAT&am ...

続きを見る

C言語 学ぶメリット
元東大教員が語るC言語を学ぶ3つのメリット

こういった悩みにお答えします. 本記事の内容:C言語を学ぶ3つのメリット 代表的なOSがわかる OS系のインターンや就職がアプリケーション系より簡単に内定ゲットできる コンピュータの本質がわかる こう ...

続きを見る

C言語 C++言語 C#言語
元東大教員が語るC言語,C++言語とC#言語の違い

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語,C++言語とC#言語の違い2 C言語3 C++言語4 C#言語5 まとめ C言語,C++言語とC#言語の違い C言語,C++ ...

続きを見る

C言語のWebサイト

C言語 学べるサイト
【無料】C言語を独学できるおすすめWebサイト3選

こういった悩みにお答えします. 本記事の内容 ハッカーランク(HackerRank) リートコード(LeetCode) Project Based Learning こういった私が解説していきます. ...

続きを見る

C言語 プログラミング サイト
【無料】C言語のプログラムを実行できるおすすめWebサイト3選

こういった悩みにお答えします. こういった私が解説していきます. C言語を学ぶために開発環境を構築するのは面倒ですよね. そんなあなたにC言語のプログラムを実行できるおすすめWebサイト3選を紹介しま ...

続きを見る

C言語の基礎(深堀り)

データ型

C言語 データ型
【C言語】データ型とは【変数定義,変数名のルールと命名規則,定数,配列,文字配列,型修飾子】

こういった悩みにお答えします. こういった私から学べます. 目次1 データ型1.1 char型(文字型)1.2 int型(整数型)1.3 float/double型(浮動小数点型)2 変数定義3 変数 ...

続きを見る

演算子

C言語 演算子
【C言語】演算子とは

こういった悩みにお答えします. こういった私から学べます. 目次1 演算子2 算術演算子3 等値演算子と関係演算子4 論理演算子5 インクリメント演算子とデクリメント演算子6 ビット演算子とシフト演算 ...

続きを見る

C言語 剰余
【C言語】剰余演算子(%)の符号の注意点

こういった悩みにお答えします. こういった私から学べます. 目次1 剰余演算子(%)2 剰余演算子(%)の符号の注意点:is_odd関数で解説3 剰余演算子の間違った使い方4 剰余演算子の正しい使い方 ...

続きを見る

C言語 ビット演算子 シフト演算子
【C言語】ビット演算子とシフト演算子の使い方

こういった悩みにお答えします. こういった私から学べます. 目次1 ビット演算子2 &:ビット毎のAND(論理積)3 |:ビット毎のOR(論理和)4 ^:ビット毎のXOR(排他的論理和)5 ~ ...

続きを見る

C言語 キャスト
【C言語】キャスト演算子で明示的な型変換【暗黙的な型変換も紹介】

こういった悩みにお答えします. こういった私から学べます. 目次1 キャスト演算子【明示的な型変換】1.1 キャスト演算子でオーバーフローの回避1.2 キャスト演算子で汎用ポインタ型(void *)か ...

続きを見る

C言語 sizeof演算子
【C言語】sizeof演算子の使い方

こういった悩みにお答えします. こういった私から学べます. 目次1 sizeof演算子2 sizeof演算子でデータ型のサイズの計算3 sizeof演算子で変数のサイズの計算4 sizeof演算子でポ ...

続きを見る

C言語 &
【C言語】&を利用する3つの演算子【アドレス,論理積,ビット毎の論理積】

こういった悩みにお答えします. こういった私から学べます. 目次1 &a,*b:アドレス演算子(&)と間接演算子(*)2 a && b:論理積演算子(&&amp ...

続きを見る

C言語 演算子の優先順位 結合規則
【C言語】演算子の優先順位と結合規則

こういった悩みにお答えします. こういった私から学べます. 目次1 演算子の優先順位と結合規則2 演算子に関する記事3 まとめ 演算子の優先順位と結合規則 数学の式に優先順位があるのと同様に,C言語の ...

続きを見る

制御文

C言語 制御文
【C言語】制御文とは【if/else/while/do-while/for/switch/break/continue】

こういった悩みにお答えします. こういった私から学べます. 目次1 制御文2 if文2.1 if文の書式2.2 if文を利用するコード3 複文3.1 複数の書式3.2 if文で複数の文の制御4 if- ...

続きを見る

C言語 ピラミッド
【C言語】for文で6種類の数字のピラミッドの表示

こういった悩みにお答えします. こういった私から学べます. C言語を学んでいると,よくfor文でピラミッドを表示する問題が出ますよね. うまくコードが書けなくて悩んでいるあなたにピラミッドを表示するコ ...

続きを見る

C言語 カレンダー
【C言語】for文でうるう年を考慮したカレンダーの表示

こういった悩みにお答えします. こういった私から学べます. 目次1 うるう年2 for文でうるう年を考慮したカレンダー3 まとめ うるう年 うるう年とは,2月が28日ではなく29日と1日増える年のこと ...

続きを見る

C言語 goto文
【C言語】goto文が有用な3つの例外

こういった悩みにお答えします. こういった私から学べます. 目次1 goto文2 C言語でgoto文が有用な3つの例外2.1 資源の獲得・解放を1:1対応にする場合2.2 多重構文から脱出する場合2. ...

続きを見る

関数

C言語 関数
【C言語】関数とは【プロトタイプ宣言,引数,記憶クラス指定子とスコープ,関数内外の変数の初期化】

こういった悩みにお答えします. こういった私から学べます. 目次1 関数2 関数のコード例3 関数のプロトタイプ宣言4 関数の引数5 記憶クラス指定子とスコープ5.1 変数定義5.2 変数の分類5.3 ...

続きを見る

C言語 再帰
【C言語】関数の再帰呼び出しで階乗,順列,組み合わせの計算

こういった悩みにお答えします. こういった私から学べます. 目次1 関数の再帰呼び出し2 関数の再帰呼び出しで階乗の計算3 関数の再帰呼び出しで順列を計算4 関数の再帰呼び出しで組み合わせを計算5 ま ...

続きを見る

ポインタ

C言語 ポインタ
【C言語】ポインタとは

こういった悩みにお答えします. こういった私から学べます. 目次1 ポインタ2 ポインタ変数2.1 ポインタ演算子の使い方2.2 ポインタ変数を利用するコード3 ポインタと関数の引数:値渡しと参照渡し ...

続きを見る

構造体,共用体,列挙型

C言語 構造体
【C言語】構造体とは【定義,変数,アクセス,引数,戻り値,ポインタ,ビットフィールド】

こういった悩みにお答えします. こういった私から学べます. 目次1 構造体2 構造体の定義3 構造体の変数4 構造体のアクセス4.1 構造体メンバへのアクセス 4.2 構造体変数の初期化4.3 構造体 ...

続きを見る

C言語 共用体
【C言語】共用体unionの使い方と実例

こういった悩みにお答えします. こういった私から学べます. 目次1 共用体union2 共用体unionの使い方3 共用体unionのLinuxカーネルにおける実例4 まとめ 共用体union 共用体 ...

続きを見る

C言語 列挙型
【C言語】列挙型enumの使い方と実例

こういった悩みにお答えします. こういった私から学べます. 目次1 列挙型enum2 列挙型enumの使い方3 列挙型enumのLinuxカーネルにおける実例4 まとめ 列挙型enum 列挙型enum ...

続きを見る

プリプロセッサ(マクロ)

C言語 マクロ
【C言語】プリプロセッサ(マクロ)とは

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語のプリプロセッサ(マクロ)とは2 #include:ファイルの取り込み3 #define:マクロ置換3.1 記号定数マクロ3. ...

続きを見る

可変長引数

C言語 可変長引数
【C言語】可変長引数"..."とは

こういった悩みにお答えします. こういった私から学べます. 目次1 可変長引数2 可変長引数の関数2.1 "..."とは:printf/scanf関数のプロトタイプ宣言で解説2.2 可変長引数のプロト ...

続きを見る

C言語 printf関数 自作
【C言語】printf関数の自作「myprintf関数」

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語でprintf関数の自作「myprintf関数」2 printf関数の自作「myprintf関数」の作成ルール3 myprin ...

続きを見る

C言語 scanf関数 自作
【C言語】scanf関数の自作「myscanf関数」

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語でscanf関数の自作「myscanf関数」2 scanf関数の自作「myscanf関数」の作成ルール3 myscanf関数の ...

続きを見る

予約語(キーワード)

C言語 予約語
【C言語】予約語(キーワード)【C99/C11の追加分もあります】

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語の予約語(キーワード)2 型に関する予約語(キーワード)2.1 整数型2.2 符号の有無2.3 浮動小数点型2.4 複素数型2 ...

続きを見る

開発ツール

C言語 開発ツール
【C言語】おすすめ開発ツールのMakeとGDBの使い方

こういった悩みにお答えします. こういった私が解説していきます. C言語はPython,Ruby,HTML/CSS/JS/PHPのようなアプリケーション系の言語と比較して難易度が高いですよね. 私がC ...

続きを見る

C言語の標準ライブラリ

stdio.h

C言語 gets関数
【C言語】gets関数が廃止された理由と代替関数

こういった悩みにお答えします. こういった私から学べます. 目次1 gets関数が廃止された理由2 gets関数の代替関数2.1 fgets関数2.2 getline関数2.3 gets_s関数2.4 ...

続きを見る

C言語 標準出力 標準エラー出力
【C言語】標準出力と標準エラー出力の違い

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語の標準出力と標準エラー出力の違い1.1 3つの標準ファイルストリーム1.2 標準出力と標準エラー出力のコード2 ファイルストリ ...

続きを見る

C言語 fopen関数
【C言語】fopen/open/fopen_s関数の使い方

こういった悩みにお答えします. こういった私から学べます. 目次1 fopen関数1.1 fopen関数でファイルの読み込み1.2 fopen関数でファイルの書き込み2 open関数2.1 open関 ...

続きを見る

stdlib.h

C言語 絶対値
【C言語】絶対値を標準ライブラリ関数と自作関数・マクロで計算

こういった悩みにお答えします. こういった私から学べます. 目次1 絶対値2 絶対値をC言語の標準ライブラリ関数で計算2.1 整数と浮動小数点数の絶対値を計算2.2 複素数の絶対値を計算3 絶対値をC ...

続きを見る

C言語 atoi/atof関数
【C言語】atoi/atof関数と自作関数で文字列を数値に変換

こういった悩みにお答えします. こういった私から学べます. C言語で文字列を数値に変換する方法と数値を文字列に変換する方法を紹介します. 本記事を読むと文字列と数値の相互変換をきちんと理解できます. ...

続きを見る

C言語 乱数生成
【C言語】rand関数と自作関数で乱数の生成【モンテカルロ法で円周率の計算】

こういった悩みにお答えします. こういった私から学べます. 目次1 乱数2 一様乱数と一様分布3 rand関数による乱数の生成3.1 rand関数による乱数の生成コード3.2 rand/srand関数 ...

続きを見る

C言語 動的メモリ確保
【C言語】malloc/calloc/realloc/alloca関数と可変長配列で動的にメモリ確保

こういった悩みにお答えします. こういった私から学べます. C言語のmalloc/calloc/realloc/alloca関数と可変長配列で動的にメモリ確保する方法を紹介します. 目次1 mallo ...

続きを見る

string.h

C言語 文字列の比較
【C言語】strcmp/strncmp関数と自作関数で文字列の比較

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語で文字列の比較2 strcmp/strncmp関数2.1 strcmp/strncmp関数の利用例2.2 strcmp/str ...

続きを見る

C言語 strlen関数
【C言語】strlen関数と自作関数で文字列の長さの計算

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語で文字列の長さの計算2 strlen関数2.1 strlen関数の利用例2.2 strlen関数とsizeof演算子の違い2. ...

続きを見る

C言語 strdup関数
【C言語】strdup/strndup関数で文字列の複製と自作

こういった悩みにお答えします. こういった私から学べます. 目次1 strdup/strndup関数で文字列の複製1.1 strdup/strndup関数の利用例1.2 strdup/strndup関 ...

続きを見る

math.h

C言語 四捨五入
【C言語】四捨五入,切り捨て,切り上げする標準ライブラリ関数と自作関数

こういった悩みにお答えします. こういった私から学べます. 目次1 四捨五入,切り捨て,切り上げ2 C言語で四捨五入,切り捨て,切り上げする標準ライブラリ関数2.1 round/roundf/roun ...

続きを見る

C言語 べき乗
【C言語】pow関数と自作関数でべき乗,累乗,2乗の計算

こういった悩みにお答えします. こういった私から学べます. 目次1 べき乗,累乗,2乗とは1.1 2乗の自作コード1.2 累乗の自作コード1.3 べき乗の自作コード2 pow関数でべき乗の計算3 自作 ...

続きを見る

C言語 atan/atan2関数
【C言語】atan/atan2関数と自作関数で逆正接の主値の計算

こういった悩みにお答えします. こういった私から学べます. 目次1 atan/atan2関数で逆正接の主値の計算2 自作関数で逆正接の主値の計算3 まとめ atan/atan2関数で逆正接の主値の計算 ...

続きを見る

time.h

C言語 sleep関数
【C言語】sleep/usleep/nanosleep/clock_nanosleep関数の使い方

こういった悩みにお答えします. こういった私から学べます. 目次1 sleep関数2 usleep関数3 nanosleep関数4 clock_nanosleep関数5 まとめ sleep関数 [cr ...

続きを見る

C言語の外部ライブラリ

C言語 リングバッファ
【C言語】おすすめのリングバッファのライブラリ

こういった悩みにお答えします. こういった私から学べます. 目次1 embedded-resources:おすすめのリングバッファのライブラリ2 embedded-resourcesのC言語のリングバ ...

続きを見る

C言語のアルゴリズム

C言語 swap
【C言語】swap関数とswapマクロで値を交換

こういった悩みにお答えします. こういった私から学べます. 目次1 swap2 swap関数2.1 int型のswap関数2.2 double型のswap関数3 swapマクロ3.1 データ型を引数で ...

続きを見る

C言語 最小 平均 最大 合計 標準偏差 中央
【C言語】最小値,平均値,最大値,合計値,標準偏差,中央値の計算

こういった悩みにお答えします. こういった私から学べます. 目次1 最小値,平均値,最大値,合計値,標準偏差の計算1.1 平方根を計算する標準ライブラリのsqrt関数を利用1.2 平方根を計算するmy ...

続きを見る

C言語 行列
【C言語】2次元配列で行列の四則演算(足し算,引き算,掛け算,割り算)【逆行列】

こういった悩みにお答えします. こういった私から学べます. 目次1 行列の四則演算(足し算,引き算,掛け算,割り算)2 行列の足し算と引き算3 行列の掛け算4 行列の割り算(逆行列の掛け算)4.1 2 ...

続きを見る

C言語 n進数
【C言語】10進数と2進数,8進数,16進数の相互変換

こういった悩みにお答えします. こういった私から学べます. 目次1 10進数と2進数の相互変換2 10進数と8進数の相互変換3 10進数と16進数の相互変換4 まとめ 10進数と2進数の相互変換 10 ...

続きを見る

C言語のコンパイラのオプション

C言語 コンパイラ 最適化
【C言語】コンパイラの最適化と戦うあなたへ

こういった悩みにお答えします. こういった私から学べます. 目次1 C言語のコンパイラの最適化による不具合2 C言語からアセンブリ言語への変換箇所を特定する方法3 ループ処理のコード例4 コンパイラの ...

続きを見る

C言語でRaspberry Pi(ラズパイ)

C言語 ラズパイ3
【C言語】Raspberry Pi 3のユーザモードとカーネルモードでプログラムの実行

こういった悩みにお答えします. こういった私から学べます. 目次1 Raspberry Pi 32 Raspberry Pi 3のエミュレータ「QEMU」3 Raspberry Pi 3でC言語のプロ ...

続きを見る

C言語のプログラミングスクール,エージェント

C言語 プログラミングスクール
C言語を学べるおすすめのオンラインプログラミングスクール3社

こういった悩みにお答えします. 本記事の内容:C言語を学べるおすすめのオンラインプログラミングスクール3社 KENスクール Winスクール 日本プログラミングスクール こういった私が解説していきます. ...

続きを見る

C言語エンジニア フリーランスエージェント
C言語エンジニアにおすすめのフリーランスエージェント

こういった悩みにお答えします. こういった私が解説していきます. フリーランスエージェントは100社以上あるので全部登録するのは非常に面倒です. 私は30社以上のエージェントに登録した経験がありますが ...

続きを見る

C言語の応用システム

リアルタイムシステム
元東大教員から学ぶリアルタイムシステム

こういった私から学べます. リアルタイムシステムとは,決められた時間(デッドライン)までに処理を完了しなければならない性質をもつシステムのことです. リアルタイムシステムは,ロボット,自動車や航空機な ...

続きを見る

Linuxカーネル
元東大教員から学ぶLinuxカーネル

こういった私から学べます. Linuxカーネルとは,オープンソースで広く使われているOSです. LinuxカーネルはAndroidに使われているので,スマホの中身を知りたいあなたにおすすめです. 目次 ...

続きを見る