后端与memcpy | 青训营笔记

166 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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()

(69条消息) 经典C语言面试题14:memcpy使用注意事项_喝橙汁的嗷大喵的博客-CSDN博客