为什么要加#ifdef __cplusplus ?

bandaoyu 2018-01-19 10:36:40

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

我知道extern "C" {} 的用意,我要问的是为什么不直接这样:


extern "C" {
...
}

反正在C和C++中都是按C编译,加下面这个的目的是什么
#ifdef __cplusplus

#endif
...全文
1292 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2020-04-12
  • 打赏
  • 举报
回复
答案是贾可说的: 源码扩展名如果如果是 c 或 cc 时,也就是必须按 C 语言来解释。如果 extern "C" 不报错的话,那编译器就有问题。一个正常的 C 编译器都不应该支持 extern "C" 这种写法。
离开那天 2020-04-12
  • 打赏
  • 举报
回复
同样的问题,应该就是.c文件不能这么用
bandaoyu 2018-01-22
  • 打赏
  • 举报
回复
引用 16 楼 SXJIAKE 的回复:
源码扩展名如果如果是 c 或 cc 时,也就是必须按 C 语言来解释。如果 extern "C" 不报错的话,那编译器就有问题。一个正常的 C 编译器都不应该支持 extern "C" 这种写法。
果真如此
AlbertS 2018-01-22
  • 打赏
  • 举报
回复
如果是c语言就不需要加extern "C" 吧,应该是有些C编译器不支持extern "C" ,嗯嗯
「已注销」 2018-01-22
  • 打赏
  • 举报
回复
源码扩展名如果如果是 c 或 cc 时,也就是必须按 C 语言来解释。如果 extern "C" 不报错的话,那编译器就有问题。一个正常的 C 编译器都不应该支持 extern "C" 这种写法。
faihung 2018-01-20
  • 打赏
  • 举报
回复
主要是为了兼容性,当然还有其它
幻夢之葉 2018-01-19
  • 打赏
  • 举报
回复
如果按照C++编译/或者是C++工程,那么就用extern "C"进行导出。否则(C)不需要使用这个
真相重于对错 2018-01-19
  • 打赏
  • 举报
回复
_cplusplus 应该是按照c++的方式编译!
bandaoyu 2018-01-19
  • 打赏
  • 举报
回复
引用 3楼勤奋的执着 的回复:
你这篇帖子的推荐里的链接~ http://blog.csdn.net/y511374875/article/details/72846266 http://blog.csdn.net/u012234115/article/details/43272441
我不是问这个,我是问为什么加ifdefine那一句,为什么不直接extern C
bandaoyu 2018-01-19
  • 打赏
  • 举报
回复
引用 5楼paschen 的回复:
C语言里没有 extern "C" { 这种用法
嗯,不过我在gcc下也编得过去。可能这样写是因为某些编译器编不过吧
paschen 2018-01-19
  • 打赏
  • 举报
回复
C语言里没有 extern "C" { 这种用法
自信男孩 2018-01-19
  • 打赏
  • 举报
回复
引用 2 楼 bandaoyu 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:] https://www.cnblogs.com/stonecrazyking/archive/2006/09/23/512552.html http://www.cppblog.com/ownwaterloo/archive/2009/04/20/predefined_macro___cplusplus.html
答非所问[/quote] 那好吧,请其他人来回答你的所问。
bandaoyu 2018-01-19
  • 打赏
  • 举报
回复 1
引用 13楼自信男孩 的回复:
[quote=引用 8 楼 bandaoyu 的回复:] [quote=引用 3楼勤奋的执着 的回复:]你这篇帖子的推荐里的链接~ http://blog.csdn.net/y511374875/article/details/72846266 http://blog.csdn.net/u012234115/article/details/43272441
我不是问这个,我是问为什么加ifdefine那一句,为什么不直接extern C[/quote] 别人给你推荐的链接为啥不看呢,链接里除了回答你的问题之外,还有其他知识。非要针对你的问题,来一个专场博客你才喜欢呢。 两个问题:一个问题是如何去寻找答案(路径),一个是如何在在大量信息中找出自己需要的答案。这个都需要自己亲力亲为的去做,而不是坐享其成[/quote]嗯,你的其中的一篇文章才有说明,但我要的就只是那一句话而已,其他整篇内容都是多余的,我又不是不知道为什用extern C。另外一篇对我来说通票废话。为了一句话让我看2篇文章,简直不能忍。 另外我在gcc下 直接extern C 通过了……这才是导致我问这个问题的原因
自信男孩 2018-01-19
  • 打赏
  • 举报
回复
引用 8 楼 bandaoyu 的回复:
[quote=引用 3楼勤奋的执着 的回复:]你这篇帖子的推荐里的链接~ http://blog.csdn.net/y511374875/article/details/72846266 http://blog.csdn.net/u012234115/article/details/43272441
我不是问这个,我是问为什么加ifdefine那一句,为什么不直接extern C[/quote] 别人给你推荐的链接为啥不看呢,链接里除了回答你的问题之外,还有其他知识。非要针对你的问题,来一个专场博客你才喜欢呢。 两个问题:一个问题是如何去寻找答案(路径),一个是如何在在大量信息中找出自己需要的答案。这个都需要自己亲力亲为的去做,而不是坐享其成
Saleayas 2018-01-19
  • 打赏
  • 举报
回复
如果你用 C 编译器来编译, extern "C" 是错误的语法。 她只能使用 extern 。
fly_with_the_winds 2018-01-19
  • 打赏
  • 举报
回复
应该是有些C编译器不认识extern “C”

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧