ChishiroのC言語

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOS(Linuxカーネル)の授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
  • プログラミング歴15年以上,習得している言語: C/C++PythonSolidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開
  • 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
  • 最近は自然言語処理AIイーサリアムに関する有益な情報発信に従事.
    • (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
    • (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.

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

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

C言語を習得してコンピュータの本質を理解できます!

C言語を学びたいあなたは,今すぐ本記事をブックマークしましょう!

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

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

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

Table of Contents

事前に必要な基礎知識

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

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

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

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

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

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

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

ハードウェア

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

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

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

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



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

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

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


OS

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

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

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

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


「30日でできる! OS自作入門」は,C言語を学んでOSを自作する楽しさを知りたいあなたにおすすめです.


C言語(初心者)

C言語の初心者向けの内容を独学したいあなたに,以下のブログをおすすめします.

どちらも人気ブログなので,書籍化されています.



以下の本は,C言語を開発したブライアン・カーニハンデニス・リッチー(K&R)が書いた「プログラミング言語C 第2版」です.

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

上記で紹介したブログや参考書と比較すると,少し難しめです.


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

C言語の開発環境

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

  • Intel 64ビットCPU(マルチコア)
  • Linux 5.15.0(Ubuntu 22.04 LTS)
  • GCC 11.2.0

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

Ubuntuを使っているあなたは,apt-getコマンドで以下のソフトウェアをインストールしましょう.

基本的にはC言語で開発できれば良いですが,コードの比較用に一部C++/Python言語で開発する場合があります.

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

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

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

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

私が書いたLinuxカーネルのカーネルモジュールのコードも同様にGPL Version 2です.

私が書いたコードで,あなたのコーディング時間を減らし,タイム・パフォーマンス(タイパを向上することができます.

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

C言語の概要

C言語のWebサイト

C言語の基礎(深掘り)

データ型,複素数型,typedef,オーバーフロー,非数と無限大,_Atomic

演算子

制御文

関数,ポインタ

構造体,共用体,列挙型

プリプロセッサ(マクロ),総称選択_Generic

可変長引数

予約語(キーワード),C23規格

ビルド,デバッグツール,アサーション

開発ツール

C言語の標準ライブラリ

stdio.h

stdlib.h

string.h

stdalign.h

stdnoreturn.h

ctype.h

limits.h,float.h

math.h

complex.h

time.h

regex.h

dirent.h

unistd.h

pthread.h

semaphore.h

setjmp.h

search.h

C言語 二分探索木 操作関数
【C言語】二分探索木の操作関数の使い方【tsearch/tfind/tdelete/twalk/twalk_r/tdestroy関数】

こういった悩みにお答えします. こういった私から学べます. 二分探索木の操作関数 二分探索木の操作関数を紹介します.

tsearch/ ...

続きを見る

sched.h

mqueue.h

assert.h

sys/socket.h

sys/sysinfo.h

sys/types.h,sys/stat.h

sys/mman.h

sys/select.h,sys/poll.h,sys/epoll.h

wchar.h,locale.h

dlfcn.h

conio.h(Windows/Visual Studio)

C言語のアルゴリズム

整数のアルゴリズム

スワップのアルゴリズム

計算のアルゴリズム

文字列処理のアルゴリズム

探索のアルゴリズム

C言語 二分探索木 操作関数
【C言語】二分探索木の操作関数の使い方【tsearch/tfind/tdelete/twalk/twalk_r/tdestroy関数】

こういった悩みにお答えします. こういった私から学べます. 二分探索木の操作関数 二分探索木の操作関数を紹介します.

tsearch/ ...

続きを見る

ソートのアルゴリズム

C言語のデータ構造

C言語で数値解析