C++程序中添加.c.h的实现方法

 更新时间:2023年08月01日 10:11:32   作者:zxz520zmg  
这篇文章主要介绍了C++程序中添加.c.h的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C++程序中添加.c.h的方法

 方法一

 1、把要添加的.c和.h文件复制到c++程序目录中。  

 2、把.c文件改为.cpp文件  

 3、把.c.h文件都添加到该项目中 就可以使用了 

方法二

 1、项目配置不使用预编译头  

2、.c文件加载到程序需中 

 3、把c语言函数的声明用extern "C"{};中。  

现在最好的写法是:  

 //test.h 
 #ifdef __cplusplus 
 extern "C" { 
 #endif 
 //c语言函数声明写在这 
 #ifdef __cplusplus 
 } 
 #endif 
  //test.c 
  //.c开头出 
 #ifdef __cplusplus 
 extern "C" { 
 #endif 
 #include "test.h" 
 //.c文件内容 
 #ifdef __cplusplus 
 } 
 #endif 
 //.c文件结束 

C/C++中的.h和.c文件

编译器的工作过程

涉及到的函数、结构体、变量等比较多。通常,编写c/c++项目的方式是,有一个main.c文件,该文件的main函数作为接口,调用其他函数。所有其他函数按功能,分别放在不同的.h文件中,这样的方式在编译和运行上肯定是没有什么问题的。

随着项目编写的深入,结构、逻辑以及变量的日趋复杂,总感觉上述方式的实现仍然不够清晰并且会导致一些冗余。忽然记起,在课堂上,老师提到过,.h文件一般用来存放函数声明和变量名,那么为什么我在.h文件中实现函数不会有问题呢?其他.c文件和main.c文件又有什么关系呢?这些,都使我不得不重新思考.h文件和.c文件的作用和关系。

.h文件的由来和弊端

要理清.h文件的作用,我们不妨看看.h文件的由来:

“在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代,那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在很多.c(.cpp)文件中的声明语句就是相同的,但他们却不得不一个字一个字地重复地将这些内容敲入每个.c(.cpp)文件。但更为恐怖的是,当其中一个声明有变更时,就需要检查所有的.c(.cpp)文件。

于是人们将重复的部分提取出来,放在一个新文件里,然后在需要的.c(.cpp)文件中敲入#include XXXX这样的语句。这样即使某个声明发生了变更,也再不需要到处寻找与修改了。因为这个新文件,经常被放在.c(.cpp)文件的头部,所以就给它起名叫做“头文件”,扩展名是.h。

在我们语言的初学阶段,往往我们的程序只有一个.c的文件或这很少的几个,这时我们就很少遇到头文件组织这个头疼的问题,随着我们程序的增加,代码 量到了几千行甚至几万行,文件数也越来越多。这时这些文件的组织就成了一个问题,其实说白了这些文件的组织问题从理论上来说是软件工程中的模块设计等等的问题。”(引自c语言项目中.h文件和.c文件的关系)

由上可以看出,.h文件最初就是用来给变量和函数提供一些全局性的声明,这些声明被其他.c文件共享,方便变量和声明的修改,使得大型代码逻辑更清晰更易于维护。因此.h文件中一般是声明,很少有代码的具体实现。

h文件在编译原理

那么为什么在.h文件中实现函数也不会出错呢?在.h文件中实现函数与在.c文件中实现函数有什么区别和联系呢?普通的.C文件和包含main函数的c文件有什么区别和联系呢?

要解决上述问题,首先必须弄清编译器的工作原理。编译器的最终目的是将程序员编写的源代码转换成机器能够识别运行的二进制机器码。

大体上分,可以分为4个步骤:

1.头文件的预编译,预处理

  • 编译器在编译源代码时,会先编译头文件,保证每个头文件只被编译一次。
  • 在预处理阶段,编译器将c文件中引用的头文件中的内容全部写到c文件中。

2.词法和语法分析(查错)

3.编译(汇编代码,.obj文件)

  • 转化为汇编码,这种文件称为目标文件。后缀为.obj。

4.链接(二进制机器码,.exe文件)

  • 将汇编代码转换为机器码,生成可执行文件。
  • 更详细具体的流程可参考编译器的工作过程
  • 在编译过程中,.h文件中的所有内容会被写到包含它的.c文件中,而所有的.c文件以一个共同的main函数作为可执行程序的入口。
  • 因此,在.h文件中编写函数实现并不会出错,相当于所有.h的内容最后都被写到了main.c文件中。
  • 但是为了逻辑性、易于维护性以及一些其他目的(可参考c语言中.h文件和.c文件的解析),一般在.h文件中写函数的声明,在.c文件中编写函数的实现。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C语言实现查看进程是否存在的方法示例

    C语言实现查看进程是否存在的方法示例

    这篇文章主要介绍了C语言实现查看进程是否存在的方法,涉及C语言针对进程操作的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • C++中浅拷贝与深拷贝的详解及其作用介绍

    C++中浅拷贝与深拷贝的详解及其作用介绍

    这篇文章主要介绍了C++中浅拷贝与深拷贝的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Qt实现QLineEdit输入前提示输入范围并用正则表达式限制输入范围

    Qt实现QLineEdit输入前提示输入范围并用正则表达式限制输入范围

    在日常开发过程中QLineEdit作为输入框,有时要限制输入的内容,这篇文章主要给大家介绍了关于Qt实现QLineEdit输入前提示输入范围并用正则表达式限制输入范围的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • 深入Linux grep指令的详解(实用型)

    深入Linux grep指令的详解(实用型)

    本篇文章是对Linux下的grep指令进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++栈的数组实现代码

    C++栈的数组实现代码

    这篇文章主要介绍了C++栈的数组实现方式,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C++ 构造函数和析构函数(Constructors & Destructors)详解

    C++ 构造函数和析构函数(Constructors & Destructors)详解

    由于global object的诞生比程序进入更早点,所以global object的constructor执行的时间更早于程序的进入点,所谓的default constructor就是没有指定任何的参数的constructor,这篇文章主要介绍了C++ 构造函数和析构函数的相关知识,需要的朋友可以参考下
    2024-05-05
  • C语言下快速排序(挖坑法)详解

    C语言下快速排序(挖坑法)详解

    大家好,本篇文章主要讲的是C语言下快速排序(挖坑法)详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++ 通过指针实现多态实例详解

    C++ 通过指针实现多态实例详解

    这篇文章主要介绍了 C++ 通过指针实现多态实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • C++ 基础教程之虚函数实例代码详解

    C++ 基础教程之虚函数实例代码详解

    虚函数在 c++ 的继承体系中是一个非常重要概念,让我们可以在子类中复写父类的方法。这篇文章主要介绍了C++ 基础教程之虚函数实例代码的相关资料,需要的朋友可以参考下
    2020-02-02
  • C++中模板和STL介绍详解

    C++中模板和STL介绍详解

    今天小编就为大家分享一篇关于C++模板和STL的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2021-09-09

最新评论