搜索
bottom↓
回复: 13

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

[复制链接]

出0入0汤圆

发表于 2017-9-21 08:23:14 | 显示全部楼层 |阅读模式
本帖最后由 蜗牛蜗牛 于 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" 问题解决

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-9-21 08:24:54 | 显示全部楼层
主要是用于C++时候防止编译不过去,报错。

出0入8汤圆

发表于 2017-9-21 08:26:31 | 显示全部楼层
你的理解是对的。
更多信息,网上搜一下,有很多说明。

出0入42汤圆

发表于 2017-9-21 09:20:52 | 显示全部楼层
你的猜测是正确的,百度有详情。

出0入0汤圆

发表于 2017-9-21 09:36:53 | 显示全部楼层
告诉C++编译器, 括号里面的代码 当做是C语言来编译

出0入0汤圆

 楼主| 发表于 2017-9-21 10:13:31 | 显示全部楼层
security 发表于 2017-9-21 08:26
你的理解是对的。
更多信息,网上搜一下,有很多说明。

怎么搜索我不知道关键字怎么写:我搜索的 是:stm32双 引号c           结果啥也没瘦出来,

出0入0汤圆

 楼主| 发表于 2017-9-21 10:14:30 | 显示全部楼层
liyang121316 发表于 2017-9-21 09:20
你的猜测是正确的,百度有详情。

怎么搜索我不知道关键字怎么写:我搜索的 是:stm32双 引号c           结果啥也没瘦出来,若是知道推荐一下关键字怎么搜索;谢谢了

出0入8汤圆

发表于 2017-9-21 10:23:04 | 显示全部楼层
蜗牛蜗牛 发表于 2017-9-21 10:13
怎么搜索我不知道关键字怎么写:我搜索的 是:stm32双 引号c           结果啥也没瘦出来, ...

这个并不是 STM32 的专属特性。
请直接搜索关键字:extern "C" {

出0入93汤圆

发表于 2017-9-21 10:41:29 来自手机 | 显示全部楼层
onepower 发表于 2017-9-21 09:36
告诉C++编译器, 括号里面的代码 当做是C语言来编译

还有这回事?我一直认为加了只是不添加c++修饰呢

出0入93汤圆

发表于 2017-9-21 10:56:17 | 显示全部楼层
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++,有没有问题

出0入8汤圆

发表于 2017-9-21 11:17:33 | 显示全部楼层
takashiki 发表于 2017-9-21 10:56
我经常在C++和C交互调用的代码中写这样的东西,难道一直都错了?但是编译器并不认为我错了,结果也是正确 ...

你的说法是正确的。
这确实只是限制符号名按照 C 的规范来走。

出0入0汤圆

发表于 2017-9-21 11:26:56 | 显示全部楼层
takashiki 发表于 2017-9-21 10:41
还有这回事?我一直认为加了只是不添加c++修饰呢

函数调用方式不一样的。当然嵌入式不是太清楚,因为没用过C++。 后面转做pc软件了,这样很多时候是编译不过去的(其实是链接错误,非编译)。

比如,同样的函数 void fun();

c 编译器函数名还是处理成 fun, c++会处理成 fun&**& ,后面部分代表随机字符。这应该也是为什么c++能重载的原因吧。

出0入42汤圆

发表于 2017-9-21 11:38:09 | 显示全部楼层
搜索方式在8楼。 另,楼主你是学生吧?

出0入0汤圆

发表于 2017-9-21 13:42:19 | 显示全部楼层
这个是c++的特性
有extern "C" 之后,函数符号就会变成C函数符号生成方式,可以被C语言访问到
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 08:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表