前言
之前在改SDK代码的时候发现在那些中断函数的地方都会用extern C{}
去把中断函数给“包”起来。(在之前的博客里面也有提及到这个点)
C++调用C接口
上网大概搜了一些资料跟说法
在C++中如果要调用C的接口,因为C++生成函数签名的方式与C不一致,(至于这个生成函数签名是什么我是真的不知道),用extern C
是要告诉编译器这部分被extern C
囊括起来的代码是要把它当成C代码来处理。
C++跟C都调用C接口
那如果C++跟C都要调用C的代码呢?
别怕还有这个
如果是C++的代码,那么extern C
囊括的代码就会当成C代码处理了;如果是C的代码的话,那么#ifdef __cplusplus
那段预编译就不会通过啦,代码也可以正常使用。(C中是没有extern C
的用法的)
#ifdef __cplusplus
extern "C" {
#endif
void USART3_IRQHandler(void)
{
......
}
#ifdef __cplusplus
}
#endif
FEATURED TAGS
Ubuntu
markdown
stm32
OSDK
飞控
串口
Jscope
C
C++
bin
J-Flash
字符串
指针数组
malloc
vscode
svg
png
github
python
CMake
CMakeLists
Linux
拷贝构造函数
GIF
录屏
docker
操作系统
make
Makefile
文件操作
DSP
CCS
SQL
MySQL
shell
bochs
计算机网络
win10
SMTP
Socket
iOS
uxplay
投屏
证书错误
apt
nodesource
ELF
Typora
图床
fossil
sql
git
SecureCRT
windows
cygwin
blog
alsa
alsa-utils
alsa-lib
音频
USB
链接文件
内存
mmap
tcpdump
交叉编译
网络
防火墙
crontab
bond
Linux性能
udev
linux
pcie
wsl2
MMIO
wsl
qemu
raspi4
gdb
ssh
tun
tap
ifconfig
打印
gmac
phy
vim
组播
rock3a
win11
usb
sd
ubuntu
iptables
netfilter
wifi
veth
ipv6
wireshark
radvd
dhcpv6
dhcpv4
网络命名空间
br虚拟网卡
NDP
emmc
存储
raspi4b
baremental
jtag
buildroot
rootfs
ext4
调试
uboot
dropbear
raspi
ebpf
uart
baremetal
kernel
bringup
libbpf