关于extern C

1 我们先来看一个简单的函数调用;在VS015里我用C语言的语法去写一个函数调用;vs2015用的14.0;__Cplusplus 的值是 199711;可以%d 打印下;

 

   上边写的C的语法,在CPP文件中写的;我们先说一下__cpp是啥意思:

  “如果编译单元是用C++编译器编译的,则定义_cplusplus预处理器宏。它的值对应于编译器用来编译编译单元的C++标准。”

  那我的程序应该是c98标准,好奇c++14.0的2015和c98有啥关系?(不懂)

 上边的图片说明你在用c++标准编译c++源代码;即使你觉得你写的就是C语言,但是你在cpp里写,CPP兼容你的代码,它就是c++代码;

 

2下边我们做一点小改动;

 

 在这个.c源文件里__cpp 也不识别了:那是不是可以简单的认为这个源文件c++编译器编不了(这里只是简单的理解,编译器是不是真的识别不了.c???;还是说编译后的函数符号无法识别?我也不是很清楚,需要再学习嘻嘻;看他这个意思是说,其实.c,和.h都已经生成了符号,但是.h生成的符号和.c生成的符号不一样,导致符号不匹配,进而main按照c++规则去找符号找不到定义;详细的符号你可以保存dump去看);

 

 2.1 看这个__cpp 还变成灰色的了。。。。

 

 就好像是函数未定义一样:

 

 

3. 那我现在就想Cpp能调用.c文件的函数。我要怎么写呢?首先我要让.c里的函数能被编译,我也不管你用什么编译器,反正你要能给我编译:

先看图:我告诉c++编译器,请你把下边的代码按照C的规则给我编译通过,可以吗?

翻译成代码就是:#ifdef __cplusplus,please  use “C”的规则,去编译 { } 里的代码的声明和代码的实现;你可以看到a.c文件那个cpp打印没有,那是不是说在这个.c源文件中没有使用c++编译器(编译器估计还是c++编译器),或者说没有使用c++规则?

 

 为啥不按照下图这样括起来?

 

 如果这样括起来。你在用C语言编译器编译运行的时候,这个.h里的东西就看不到了。。。。

 

posted on 2022-05-25 22:14  邗影  阅读(28)  评论(0编辑  收藏  举报

导航