• 关于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里的东西就看不到了。。。。

  • 相关阅读:
    总结Themida / Winlicense加壳软件的脱壳方法
    Themida和Winlicense加壳软件脱壳教程
    dwg格式用什么打开
    3D图形图像处理软件HOOPS介绍及下载
    高精度快速预览打开dwg文件的CAD控件CAD Image DLL介绍及下载
    快速加载DXF、DWG格式文件控件ABViewer
    Devexpress XtraReport 打印时弹出Margins提示解决办法
    报表引擎交叉表的报表设计示例
    git已经push到远程分支的merge操作,如何回滚
    ClassNotFoundException这类问题的解决方案
  • 原文地址:https://www.cnblogs.com/8335IT/p/16311086.html
Copyright © 2020-2023  润新知