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

  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/8335IT/p/16311086.html
Copyright © 2020-2023  润新知