stm32 内核里面"C"是啥意思怎么用的?

2019-12-22 13:51发布

本帖最后由 蜗牛蜗牛 于 2017-9-21 12:26 编辑

今天看ebox源码看到了"C" extern "C" {  } 具体啥意思,我猜测是不是括号里面使用c写的不是C++ ?
同时之前在stm32 内核里也见过这样用法,大神指教  啊


不懂的进来看看吧,https://baike.baidu.com/item/extern%20"C"/15267013?fr=aladdin 原来这里就有
提醒一下关键词搜索:extern "C" 问题解决
13条回答
Excellence
1楼 · 2019-12-22 17:26.采纳回答
 精彩回答 2  元偷偷看…… 0人看过
takashiki
2楼-- · 2019-12-23 12:18
onepower 发表于 2017-9-21 09:36
告诉C++编译器, 括号里面的代码 当做是C语言来编译

还有这回事?我一直认为加了只是不添加c++修饰呢
takashiki
3楼-- · 2019-12-23 15:07
security 发表于 2017-9-21 08:26
你的理解是对的。
更多信息,网上搜一下,有很多说明。

我经常在C++和C交互调用的代码中写这样的东西,难道一直都错了?但是编译器并不认为我错了,结果也是正确的。
写了extern "C"的C++代码依然是C++,啥时变成C了?只是函数命名等等不使用C++修饰了,当然也就无法进行函数重载了而已。
比如:
  1. extern "C" int GetListSize(void* List) {
  2.    std::list* lst = (std::list*) List;
  3.    return lst->size();
  4. }
复制代码您评断下这个代码是C还是C++,有没有问题
security
4楼-- · 2019-12-23 16:03
takashiki 发表于 2017-9-21 10:56
我经常在C++和C交互调用的代码中写这样的东西,难道一直都错了?但是编译器并不认为我错了,结果也是正确 ...

你的说法是正确的。
这确实只是限制符号名按照 C 的规范来走。
liwey
5楼-- · 2019-12-23 18:32
 精彩回答 2  元偷偷看……
liyang121316
6楼-- · 2019-12-23 20:00
搜索方式在8楼。 另,楼主你是学生吧?
日日♂夜夜
7楼-- · 2019-12-23 21:03
这个是c++的特性
有extern "C" 之后,函数符号就会变成C函数符号生成方式,可以被C语言访问到