技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 1937|回复: 9
收起左侧

【C】#include""与#include<>的区别

[复制链接]

1060

主题

2443

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19518 个
贡献
40309 次
宅之契约
0 份
在线时间
1846 小时
注册时间
2014-1-26
发表于 2016-1-6 12:12:18 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
虽说都是包含,但是#include""和#include<>是不一样的。一个只从当前引用它的源码的目录找,另一个则只从“包含目录”去找。

本帖被以下淘专辑推荐:

回复

使用道具 举报

37

主题

184

帖子

1851

积分

用户组: 管理员

UID
8
精华
1
威望
14 点
宅币
1610 个
贡献
24 次
宅之契约
0 份
在线时间
259 小时
注册时间
2014-1-27
发表于 2016-1-10 11:43:55 | 显示全部楼层
书上的代码都是<>,其他人的代码都是"",区别不大了。

1060

主题

2443

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19518 个
贡献
40309 次
宅之契约
0 份
在线时间
1846 小时
注册时间
2014-1-26
 楼主| 发表于 2016-1-10 11:49:26 | 显示全部楼层
13*0217 发表于 2016-1-10 11:43
书上的代码都是,其他人的代码都是"",区别不大了。

并不。
#include<>只能从包含目录里面找头文件,不能从当前目录找,除非当前目录在包含目录里面。
而#include""则只能从当前目录找头文件,不能从包含目录找。这两个找文件的规则是不一样的,被包含的文件也被区别对待——#include<>是把头文件当成系统库来包含,而#include""则是把头文件当成工程内部代码来包含的。

1

主题

7

帖子

41

积分

用户组: 管理员

UID
241
精华
0
威望
1 点
宅币
32 个
贡献
0 次
宅之契约
0 份
在线时间
2 小时
注册时间
2014-5-2
发表于 2016-1-14 21:51:18 | 显示全部楼层
我基本上使用原则就是自己的就用“”系统的就用<>没探究过原因

1060

主题

2443

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19518 个
贡献
40309 次
宅之契约
0 份
在线时间
1846 小时
注册时间
2014-1-26
 楼主| 发表于 2016-1-14 22:15:05 | 显示全部楼层
TrueCrypt 发表于 2016-1-14 21:51
我基本上使用原则就是自己的就用“”系统的就用没探究过原因

这是正确的做法。

1

主题

23

帖子

80

积分

用户组: 小·技术宅

UID
742
精华
0
威望
0 点
宅币
54 个
贡献
3 次
宅之契约
0 份
在线时间
6 小时
注册时间
2015-3-18
发表于 2016-1-17 19:04:27 | 显示全部楼层
我都是这样理解  "'是找你的代码, <>找系统(编译器)的代码

85

主题

260

帖子

3765

积分

用户组: 管理员

No. 418

UID
418
精华
13
威望
52 点
宅币
1969 个
贡献
1367 次
宅之契约
0 份
在线时间
252 小时
注册时间
2014-8-9
发表于 2016-1-17 19:33:18 | 显示全部楼层
环境变量设置的编译器include目录使用<>包含
自己源代码目录下使用“”包含

但是,只要你写全绝对路径,不考虑源代码可移植性、保密性....大可使用include ""
#include "C:\documents and settings\CYYCOISH\programs\visual studio\vc98\include\windows.h" //糟糕真实姓名啥的都泄漏了
//最糟的是换个用户/换台机器源代码不能编译了!
In the beginning I was not the best.
And the world was also not the best.
But I still know that I am who I am.
Because I think that it is good.
I have been working hard.
I have been keeping growth with the world.
And it was so.

85

主题

260

帖子

3765

积分

用户组: 管理员

No. 418

UID
418
精华
13
威望
52 点
宅币
1969 个
贡献
1367 次
宅之契约
0 份
在线时间
252 小时
注册时间
2014-8-9
发表于 2016-1-17 20:43:39 | 显示全部楼层
C语言include注意事项之其它
除了A5站长讲的include "" 和 <>是有区别的以外我再补充几点:
include还可以包含“源文件”。
#include "source.c"
甚至呢include可以包含编码能被编译器词分识别的任意格式文件:
#include "source.txt" //ok
这说明了以下两点:
1.C语言编译器作者开发时并不是使用DOS类文件分区表系统(猜测)
事实上 丹李 开发C同时人家又是UX之父。
为什么像第一条那样说呢?
因为UX类系统并不是按照文件扩展名区分文件类型的。事实上只要被一个文件被标记为可执行体
无论其二进制指令是否正确,均可被系统加载至CPU执行。
题外话:在MacOS系统中,应用层的文件类型区分方式比较的混杂。也就是说finder应用也使用了扩展名区分文件类型。而被标记为可执行体,即使是文本文件在finder中也显示可执行体icon。而win严格使用扩展名区分文件类型。只有exe文件才能被PE loader加载、映射至内存。然后cpu再去内存寻址读指令。
2.C编译器设计者并未严格区分source文件和header文件的作用
我猜是丹李本人对C发展的估计方向不同罢了。
但是如果include预编译指令对两个文件类型加以区分在C语法中会有两种表现
一是出现#includesrc与#includehdr类似的两条指令
二呢会判断文件扩展名。
ps:我大胆猜测丹李本人对C估计失误并不是我胆大包天。
如果一个设计者对自己设计的产品一经估计到了整个生存周期,甚至整个生态链的话
这个产品已无意义,换句话说:赚不了钱咯。
如果FAT设计成功、完善,不会有FAT32 ExFAT的出现
psps:老C不得不说PE格式真是成功的设计,但并不是完善的设计。

关于头文件(dot h/header file)与源文件(.c/source file)的使用要点老C总结如下:
头文件用于编写在源文件中存在的函数/变量的声明。
其重要作用是对该源文件的公共函数/变量进行导出,以供其它源文件调用。

一般来说如下的源文件(src.c):
//src.c
#include "src.h"
int iGlobalValue = 0;
int AddToGblVal(int num)
{
        return iGlobalValue += num;
}

如果对变量iGlobalValue与函数AddToGblVal(int num)做导出,则可以有如下头文件
//src.h
#ifndef _SRC_H_
#define _SRC_H_
extern int iGlobalValue = 0;
extern int AddToGblVal(int num);
#endif

别的源文件若要使用src.c源文件中导出的函数则:
//main.c
#include <stdio.h>
#include "src.h"

int main()
{
        iGlobalValue = 0;
        AddToGblVal(3);
        AddToGblVal(4);
        AddToGblVal(5);
        printf("%d", iGlobalValue);
        printf("%d", AddToGblVal(0));
}

特别的,在Cpp中头文件的作用用于声明类结构
在头文件中声明好类以后,对类中成员函数的实现,虚函数的重载均在源文件中完成。
In the beginning I was not the best.
And the world was also not the best.
But I still know that I am who I am.
Because I think that it is good.
I have been working hard.
I have been keeping growth with the world.
And it was so.

1060

主题

2443

帖子

6万

积分

用户组: 管理员

一只技术宅

UID
1
精华
221
威望
348 点
宅币
19518 个
贡献
40309 次
宅之契约
0 份
在线时间
1846 小时
注册时间
2014-1-26
 楼主| 发表于 2016-1-17 21:36:54 | 显示全部楼层
cyycoish 发表于 2016-1-17 20:43
C语言include注意事项之其它
除了A5站长讲的include "" 和 是有区别的以外我再补充几点:
include还可以包 ...

#include<>也可以包含源文件、任意格式等。Intel的Havok就有包含“.cxx”的。

其实我觉得这样就非常好,对于封装什么的非常方便。可以从C语言“衍生”出更多的语言出来。

13

主题

76

帖子

1292

积分

用户组: 上·技术宅

UID
888
精华
0
威望
0 点
宅币
302 个
贡献
914 次
宅之契约
0 份
在线时间
36 小时
注册时间
2015-5-31
发表于 2016-1-18 09:25:33 | 显示全部楼层
围观技术大牛

本版积分规则

QQ|申请友链||Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图  

GMT+8, 2020-7-16 12:08 , Processed in 0.106873 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表