讲一下 :引入头文件的两种

the difference between #include"xx.h" and #include<xx.h>

#include" .h"是用来引入非标准库的头文件的,编译器从用户的工作目录开始搜索

这个过程是这样的:其中“ ” 表示编译器先从程序源文件所在的目录中查找,如果没有找到的话,再去系统默认的目录去找,通常是用来包含程序编写者提供的头文件(“ ” 表示首先在当前的源文件目录中去查找,如果找不到的话,才去包含目录去找)

#include <>格式:引用标准库头文件,编译器从标准库目录开始搜索

简单来叙述一下这个过程:<>表示的是只是在系统默认的目录或者是括号内的路径进行查找,用于来包含系统自带的头文件(<> 表达的意思是在包含文件目录中去找,不会在源文件目录去找)

通过上面的描述以后,我们可以感觉到 “ ”引入头文件的方式是要比 <>引入头文件搜索的范围更加的大

在这里可以简答一下# include 的作用其实就是寻找后面跟的那个并且将文件的内容拷贝一份到当前的文件里面来,被包含文件里面的内容会替换源代码文件里的#include指令

“好人做到底,送佛送到西",既然我们说到了这里的话呢,顺便说一下头文件防止被引入多次的问题,相信很多的读者在初学编程的时候都会遇见这样的问题

首先提出一个问题:为什么要防止头文件的多次引入???

我们初学者平时在编写代码的时候,一般头文件的个数都在几个左右,不会很多,所以对于这个问题的感触不是很深。
但是通过举出一个很简单的例子你就明白为什么要防止头文件的多次引入了

在这里插入图片描述
在这里插入图片描述
接下来继续讲一下这样做的后果是什么??
因为我们在App.h里面定义了一个变量a,那么相应的在Test.h里面我们也会有int a = 10,因为我在上面提到了,#include的一个作用就是将后面文件的内容拷贝一份到当前的文件里面,所以也可以理解为什么我这样说了,你想想,当我在.c文件里引入这两个头文件的时候,会出现什么样子的情况啊,是不是会出现两次int a = 10,但是我们知道这样肯定是不可以的,俗话说的好,一山不容二虎,有两个一样的变量a,这样是不允许的,所以肯定会出错的。
那么出错了如何去解决呢,我们这里给出两种方法:
在这里插入图片描述
两种方式的比较:

#ifndef 的方式依赖于宏名不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含(谁先被引入谁有用)。当然,缺点就是如果不同头文件的宏名不小心相同时,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况(内容虽然不一样,但是宏名一样的话,编译器也是不允许的)。

#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名相同引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,此时就不能保证他们不被重复包含。当然,相比宏名相同引发的“找不到声明”的问题,重复包含更容易被发现并正。

最后补充一下:
方式一可以避免名字冲突,方式二 由语言支持所以移植性好
我的下一篇博客是讲解

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C#中,不像C++那样直接引入头文件来使用函数和变量。C#使用的是命名空间(namespace)来组织和访问代码。命名空间是一种逻辑上的组织方式,它包含了一组相关的类、接口和其他类型。要使用C++中的函数和变量,可以通过以下两种方法来实现: 1. 使用DllImport特性:将C++的函数编译成dll文件,然后在C#中使用DllImport特性来引入dll文件中的函数。具体步骤如下: a. 在C++中将函数编译成dll文件。 b. 在C#中使用\[DllImport("dll文件名")\]特性来引入dll文件。 c. 在C#中调用引入的函数。 2. 将C++中的函数复制到C#的类中:在C#中创建一个类,将C++中的函数复制到该类中。需要注意的是,由于C#没有指针,涉及指针的函数需要进行重写。具体步骤如下: a. 在C#中创建一个类。 b. 将C++中的函数复制到该类中。 c. 在C#中调用该类中的函数。 需要注意的是,C#和C++是不同的编程语言,语法和特性也有所不同。因此,在引入C++的函数和变量时,需要根据具体情况进行适当的修改和调整。 #### 引用[.reference_title] - *1* [C#引用C++头文件方法](https://blog.csdn.net/cdjcong/article/details/8301502)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C语言基础专题 - 头文件引用](https://blog.csdn.net/qq_28550263/article/details/112790154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值