这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
2.1.6 extern”C” 的作用 ⭐⭐⭐****
extern “C” 的作用是告诉 C++ 编译器 ( 如 g++) 用 C 规则编译指定的代码****
C 和 C++ 的编译规则不一样,主要区别体现在编译期间生成函数符号的规则不一致 , 例如函数重载****
由于 C++ 需要支持重载,单纯的函数名无法区分出具体的函数,所以在编译阶段就需要将形参列表作为附加项增加到函数符号中,而 c 却不是这样,所以在链接 c 与 c++ 文件的时候会报错
两个示例:****
示例一:****
/*--------------main.cpp C++ 源码文件 -------------*/
//#include "func1.h" /* 该 include 语句需被注释掉 */
extern "C" void func1();
int main()
{
func1();
return 0;
}
示例二:****
/*------------------func1.h 头文件 ------------------*/
#ifdef __cplusplus// 两个下划线 _
extern "C"{
#endif//!__cplusplus
#include <stdio.h>
void func1();
#ifdef __cplusplus// 两个 __ 下划线****
}
#endif//!__cplusplus
2.1.7 头文件声明时加 extern 定义时不要加 因为 extern 可以多次声明,但只有一个定义 ⭐⭐⭐⭐
全局变量不在文件的开头定义,有效的作用范围将只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量,则应该在引用之前用关键字 extern 对该变量作 “ 外部变量声明 ”
https://blog.csdn.net/qq_41598072/article/details/118608272****
在一个源文件中想引用另外一个源文件中已经定义的外部变量,同样只需在引用变量的文件中用 extern 关键字加以声明即可****
2.1.8 函数参数压栈顺序,即关于 __stdcall 和 __cdecl 调用方式的理解 ⭐⭐⭐****
2.1.9 重写 memcpy() 函数需要注意哪些问题 ⭐⭐****
如果复制的字节数 n 超出了 dst 的空间容量,或者 n 超出 src 的容量,此函数是不会进行判断的,这样就很危险。因此,需要程序员自己检查是否有溢出的情况出现。****
2 、此函数不会检查参数 dst 与参数 src 所指向的数组(或其他类型)是否具有同样的空间大小。****
3 、如果出现 src 地址大于 dst 地址(即地址重叠),就会出现 dst 无法存取完整数据,造成 src 数据丢失。****
自己实现 memcpy()