extern "C",头文件重复包含,#pragma once

1.用c语言的方式编译代码
extern "C",头文件重复包含,#pragma once
也可以这样用,用大括号将声明括起来
extern "C",头文件重复包含,#pragma once

2.如果函数同时有声明和实现,要让函数声明被extern “C” 修饰,函数实现可以不修饰
函数声明加extern C加修饰
extern "C",头文件重复包含,#pragma once
3.函数重载,一个加,一个不加,ok
一个用c方式编译,一个用c++编译, 可以重载,ok
extern "C",头文件重复包含,#pragma once
完全相同函数,一个加一个不加, 会产生二义性,报错
extern "C",头文件重复包含,#pragma once

2.c, c++混合开发时,可能会用一下操作
如c++开发中调用第三方框架/库,可能是c语言写的开源库
如main.cpp调用math.c文件的函数
extern "C",头文件重复包含,#pragma once
项目代码中的正确使用
c代码, 函数的实现放在.c文件里, 函数的声明放在.h文件,为了方便c++代码调用, 通常在.cpp文件中将用extern “C” 包含c的.h头文件
extern "C",头文件重复包含,#pragma once
如果在c的.h头文件中直接加上extern c, 在cpp文件中引用就不用再加extern c了,但是这样.c文件就没发include包含这个头文件了

3.正确用法,在cpp文件中被包含时,才用extern c
c++文件中默认有一个宏, #define __cplusplus
extern "C",头文件重复包含,#pragma once
4. 防止头文件重复包含, 这里xxxx.h本身要不能与别人重复, 所以一般用 __finename.h定义这个放在重复引用的宏
#ifndef xxxx.h
#define xxxx.h


#endif

5.#pragma once 也可以防止整个文件内容被重复包含,但是老的编译器不支持,且是针对整个文件
而#ifndef #define #endif 不受编译器限制,而且可以针对文件中的某一部分代码