Skip to content

Instantly share code, notes, and snippets.

@fkztw
Created December 27, 2012 15:11
Show Gist options
  • Save fkztw/4388993 to your computer and use it in GitHub Desktop.
Save fkztw/4388993 to your computer and use it in GitHub Desktop.
20121227-jserv-talk in NCTU
C 語言的末日 (UNIX 的末日?)
2038年
1970年開始 到 2038年的時候 time_t 會 overflow
Myth
NULL == 0 ?
null pointer
type is (void*)
sizeof()
sizeof('J') sizeof(char)
in c 4 1
in cpp 1 1
c 原本是沒有 void 這個型態的
在 C89 才出現
int islower(int c)
會根據不同的語系,字母的值會不一樣
EOF
最新是被定義成 -1, 但比較老式C的值定義會不一樣
/usr/include/ctypes.h
定義了 char 的範圍
memset
C語言很好移植? 你錯了
注意 Alignment
signchar.c
在 arm 上,char 預設是 unsigned
C Reviews
High-level assembly
WYSIWYG //what you see is what you get
Bell Lab 有把 C 的組譯器和編譯器的 source code 釋出
想把 C 語言學好,最好搭配作業系統一起學
因為 C 語言本來就是拿來寫作業系統的語言
推薦閱讀
Dave Thomas - Code Reading
(敏捷開發大師)
反璞歸真-UNIX技術內幕
A Quarter Century of UNIX
電的旅程 //Bell Lab
浪潮之巔
The Power of Abstraction Dr.Babara //奠定物件導向和 type model
1st system (CTSS)
分時作業系統
EX: 登月機具 - Youtube
由 MIT 開發
編程: 因為登月計劃的程式是用銅線穿過磁心,一針一線編出來的
當時是請紡織廠的女工幫忙製作,
有穿過磁心代表 1 。沒穿過磁心代表 0 。
2nd system(Multics)
第1版使用 組語 寫的
後來才開始使用 PL/I 寫出來
想做到 CTSS 沒做到的事,可是失敗了
由 MIT, GE, Bell Labs 共同開發
採用 PL/I 這個Language
3rd system(UNIX)
The UNIX Time Sharing System
第一代的 UNIX 是用組語寫的
第三代才用 C 重寫過
早期為了要做科學運算所以有 18bits, 36bits, 12bits 的電腦
第1台電腦為了科學運算 所以是 Decimal
後來 馮紐曼架構 加入後才變成 binary
名人
Grace Hopper 奠定編譯器技術的先鋒
Dennis M. Ritchie (dmr)
Keep it simple and stupid
B語言
B語言的前身是 BCPL (用來撰寫其他程式的 compiler)
BCPL 的前身是CPL
B 語言太難懂 而且不適合用來撰寫 compiler
CPL --> BCPL --> B --> newB --> C
原始C語言 vs ANSI C
+=, -=, /= 記為 =+, =-, =/。 中間只要有不該有的空白就很容易發生悲劇
以前沒有 long 這個型態,必須用兩個 16bits 的變數去表示一個 32bits 的變數
原始 C 語言的型態比較鬆散, ANSI C 是個強制型態的語言
在原始C語言中 -> 代表位移
C語言的記憶體配置
text
data
bss
stack
tty
teletyper 可以修改
papertyper 無法修改
Linux 的物件導向觀念
LXDE 和 awesome 都是用 C 開發的
最早的 C 語言開發是為了系統
後來為了通用的特性加入許多東西 ex: 多國語系
在開發作業系統的過程中也修正一些特性
stdlib.h 裏面沒有 swap 是因為 C 語言實作不出有效率的 swap
但是 stdlib 裏面有 qsort
@jserv
Copy link

jserv commented Dec 27, 2012

登月機具:導航系統 -- http://www.youtube.com/watch?v=INO_3daAFtY

@jserv
Copy link

jserv commented Dec 27, 2012

因為 PDP-7 硬體的限制,無法開發有效的 B 語言編譯器,所以 Ken Thompson 只在 UNIX 第一版運作 B 語言解譯器,爾後切換到 PDP-11 硬體時,Dennis Ritchie 則設計 New B 語言,最後成為 C 語言並提供編譯器。

@jserv
Copy link

jserv commented Dec 27, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment