1.c++如何调用c语言函数
由于C++和C的编译器生成函数的机制不一样,所以要使用extern “C”修饰符:
第一种方法
extern "C"
{
void A();
void B();
……
}
如果加上C++预处理器的名字区分是编译C还是C++文件,则为
#ifdef __cplusplus
extern "C" {
#endif
void DeleteStack(Stack stack);
void PrintStack(Stack stack);
void Pop(Stack stack);
#ifdef __cplusplus
}
#endif
如果是头文件,则为
extern "C"
{
#include "Stack.h";
……
}
2.c++代码是如何从源代码到可执行文件的
具体见http://www.cnblogs.com/Goldworm/archive/2012/05/21/2511910.html
源代码->预处理->编译->优化->汇编->链接->可执行文件
- 预处理:宏定义指令、条件编译指令、头文件包含指令、特殊符号
- 编译阶段:确定所有指令复合语法规则后翻译成中间代码或者汇编
- 优化阶段:一种与硬件无关,另一种与硬件结构相关
- 汇编过程:将汇编语言翻译成机器指令
- 链接程序:将有关的目标文件彼此相连接
3.tcp三次握手
如图为三次握手的过程。为什么需要三次握手?
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
4.tcp四次撒手
为什么需要四次
TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
5.堆和栈的区别(稍后补充)
堆一般是由程序分配释放,
栈是系统自动分配的。