这书不错,链接-装载-库 我觉得是很底层的东西。比如很多人闭着眼睛都能写出来的hello world(当然不包括brianfuck,如果你会,你真的闹残了吗= =), 其实链接编译器做了很多,不然就哪来的printf,这IO初始化也是CRT(c runtime)库完成的。堆栈的初始化,还有系统装载让程序运行等等。涉及很多。
书里后面就讲了一个CRT库,自己写一个,感觉不错,学了很多。比如malloc,free的实现,话说还是跨平台的。当然库很小,功能不多,不过写这个也可以学学算法。内存的分配,这个要用到链表。突然想起书里有许多诡异的代码,不可思议的东西。贴上几处(C语言的,python者移步吧)
1 #include <stdio.h>
2
3 namespace myname {
4 int var = 42;
5 }
6
7 extern "C" int _ZN6myname3varE;
8
9 int main()
10 {
11 printf("%d\n", _ZN6myname3varE);
12 return 0;
13 }
好吧,这个是C和C++编译器对名称的处理。结果当然是42,为什么呢?因为42 the answer to the ultimate question of life the universe and everything 生命、宇宙以及任何事情的终极答案----来自电影 银河系漫游指南。
好像扯远了= =
1 #include <setjmp.h>
2 #include <stdio.h>
3
4 jmp_buf b;
5
6 void f()
7 {
8 longjmp(b, 1);
9 }
10
11 int main()
12 {
13 if(setjmp(b) )
14 printf("World!");
15 else {
16 printf("Hello ");
17 f();
18 }
19 return 0;
20 }
这个是C语言使时光逆流的= =
好吧,不吹了,就这么多吧。