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

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 3534|回复: 9

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

[复制链接]
发表于 2016-1-6 12:12:18 | 显示全部楼层 |阅读模式

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

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

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

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2016-1-10 11:43:55 | 显示全部楼层
书上的代码都是<>,其他人的代码都是"",区别不大了。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2016-1-10 11:49:26 | 显示全部楼层
13*0217 发表于 2016-1-10 11:43
书上的代码都是,其他人的代码都是"",区别不大了。

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

使用道具 举报

发表于 2016-1-14 21:51:18 | 显示全部楼层
我基本上使用原则就是自己的就用“”系统的就用<>没探究过原因
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2016-1-14 22:15:05 | 显示全部楼层
TrueCrypt 发表于 2016-1-14 21:51
我基本上使用原则就是自己的就用“”系统的就用没探究过原因

这是正确的做法。
回复 赞! 靠!

使用道具 举报

发表于 2016-1-17 19:04:27 | 显示全部楼层
我都是这样理解  "'是找你的代码, <>找系统(编译器)的代码
回复 赞! 靠!

使用道具 举报

发表于 2016-1-17 19:33:18 | 显示全部楼层
环境变量设置的编译器include目录使用<>包含
自己源代码目录下使用“”包含

但是,只要你写全绝对路径,不考虑源代码可移植性、保密性....大可使用include ""
#include "C:\documents and settings\CYYCOISH\programs\visual studio\vc98\include\windows.h" //糟糕真实姓名啥的都泄漏了
//最糟的是换个用户/换台机器源代码不能编译了!
回复 赞! 靠!

使用道具 举报

发表于 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中头文件的作用用于声明类结构
在头文件中声明好类以后,对类中成员函数的实现,虚函数的重载均在源文件中完成。
回复 赞! 靠!

使用道具 举报

 楼主| 发表于 2016-1-17 21:36:54 | 显示全部楼层
cyycoish 发表于 2016-1-17 20:43
C语言include注意事项之其它
除了A5站长讲的include "" 和 是有区别的以外我再补充几点:
include还可以包 ...

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

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

使用道具 举报

发表于 2016-1-18 09:25:33 | 显示全部楼层
围观技术大牛
回复 赞! 靠!

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-22 09:30 , Processed in 0.050402 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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