腾讯SNG复试
- gcc -o 做了哪些工作:预处理(宏),编译,汇编,链接
- 参考链接:http://mt.sohu.com/20170308/n482656585.shtml
- 预处理:gcc -E a.c -o a.i
- 编译:gcc -S a.i -o a.s
- 汇编:gcc -c a.s -o a.o 将源代码编译,汇编成机器指令
- 链接:gcc a.o -o a 将多个.o文件链接成可执行文件,链接的过程也就是符号重定位的过程。
- 静态链接:生成可执行文件时候,把静态链接库(.a)中的文件链接到可执行文件
- 动态链接:生成可执行文件时,仅在可执行文件中加入相关描述文件,执行时再加载相应的动态链接库
- 软连接与硬链接的区别
- 参考链接:http://www.cnblogs.com/stli/archive/2010/11/10/1873212.html
- linux中一个文件对应一个inode(索引2节点),每一个文件都有唯一的inode号
- 因为硬链接不能跨文件系统,不能对目录建立硬链接,因此广泛使用软连接
- 使用ls -ai可以查看文件的inode号,如果是硬链接,链接文件与原文件的inode号相同,大小相同,硬链接只是增加了一个指针,指向原来的文件,原来文件的引用次数加一。因此删除时,只是将引用计数减一,一般不会出现误删。
- 软连接是真实创建了一个新文件,其inode号和原文件的inode号不同,而且软链接文件的大小就是原文件名的大小,例如file1位5B。当os读取文件时,发现其是一个链接文件,因此会去读真正的文件,删除链接文件就可以删除软连接,而且不影响原来的文件。
- extern static
- 参考链接:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html
- static在头文件中声明和定义同时进行,作用域仅限于本编译单元。extern在头文件中声明,源文件中定义,其他文件包含头文件,这样链接的时候就可以找到,起到全局的效果。
- extern c是为了避免c++重载的多态性,在c++调用c函数时,编译器保持原函数名称,而不是把原函数和参数放在一起生成中间函数名。
- extern c的使用场景:参考连接:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html
- 在cpp文件中引用c的头文件,用extern c包含
- linux下的proc文件:动态显示硬件和进程的状态信息
- 模板的特化和非特化
- 参考链接:http://blog.csdn.net/thefutureisour/article/details/7964682/
- 模板的特化分为全特化和偏特化,一般来说模板是非特色的。但是如果对于特定的数据类型有很好的实现方式,可以类模板特化。
- 全特化是限定模板实现的全部具体类型,偏特化限定模板实现的部分类型
- 对于函数模板,只有全特化,没有偏特化
- c++的编译器
- 手机也阻止不了我们编程的热情c4droid
- 参考链接:http://www.csdn.net/article/2014-02-27/2818564-best-compilers-and-ides-for-c-programmers