精华内容
参与话题
问答
  • #include #import @class 讲解

    千次阅读 2013-04-08 11:01:50
    #include  区分 #include#include "x.h"的作用  #include :它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.  #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户...
    #include
            区分 #include <x.h>与#include "x.h"的作用
            
    #include <x.h>:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.
             #include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。

            在使用#include的时候要注意处理重复引用(这也是objc中#include与#import的区别)
            例如:ClassA 与 ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.
             我们可以:#ifndef _CLASSC_H
                           #define _CLASSC_H
                           #include "ClassC"
                           #endif
             这样处理在编译时就不会有重复引用的错误出现(在objc中#import解决了这个问题,这是它们的区别)

    #import
             #import 大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理.

    @class
            主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在@class仅仅只是声明一个类,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息。

    综上所述#include,#import与@class的区别可以做一下理解:

            #include与#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.比如有100个类都#import了ClassA,那么在编译的时候这100个类都会去对ClassA处理.又比如A被B引用,B被C引用,C被D引用.....此时如果A被修改,那么后面的B,C,D.....都需要重新进行编译.还有一个用法会引起编译错误的就是在ClassA中#import ClassB 在ClassB中#import ClassA那么在编译的时候也会出现未知错误。
            所以一般来说,在interface中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个interface的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要import这个在@class中声明的类。
    展开全文
  • #include #import @class三者究竟该用哪个

    千次阅读 2015-10-18 22:31:22
    在OC中,引用文件可以通过#include、#import、@class三种方式,本文将讲解这三种方式的不同之处以及选择方式。 一. #include 1. 在C语言中,我们使用#include来引入头文件。使用#include “xx.h”来引入...

    在OC中,引用文件可以通过#include、#import、@class三种方式,本文将讲解这三种方式的不同之处以及选择方式。

    一. #include

    1. 在C语言中,我们使用#include来引入头文件。使用#include “xx.h”来引入自定义的头文件,使用#include<xx.h>来引入库中的头文件。

    2. 但是#include并不能防止重复引用头文件,如果在文件中,重复引用头文件,将会报错。(如:A引入了B,B引入了C,A再引入C,就会报错)

    所以在OC中,几乎没有使用#incldue引头的情况。

    二. #import

    1. #import是#include的升级版,可以防止重复引入头文件这种现象的发生。

    2. #import在引入头的时候,就是完全将头文件拷贝到现在的文件中。所以也有效率上的问题。

    3. #import最大的问题在于,需要避免出现头文件递归引入的现象。(如:A引入B,B引入A,那么A、B的头文件会互相不停的拷贝)

    三. @class

    1. @class用来告诉编译器,有这样一个类,使书写代码时,不报错。

    2. 因为#import引入头文件有效率问题,所以,当还没有调用类中方法,仅仅是定义类变量的时候,使用@class来提醒编译器。而在真正需要调用类方法的时候,进行#import。

    (如:

    现在需要在Student.h文件中定义一个Book类的变量book

    那么不需要在Student.h中#import “Book.h”

    而是在Student.h中@class Book 来是编译器不报错,告诉编译器我现在使用的Book是一个类,可以定义变量book

    在之后的Student.m文件中,需要调用book方法时,在#import “Book.h”

    从而降低#import在效率上的问题。)

    3. 如果A是B的父类,那么这是在B.h中就必须要使用#import来引入A的头,因为需要知道A类中有哪些变量和方法,以免B类中重复定义。



    展开全文
  •  作者:清林,博客名:飞空静渡 #include如果从纯粹的text文件来说,#include的作用就是搜索它后面指示的文件,并把这个文件的内容加到当前的文件中。一般我们编程时,都是包含一些与.h为后缀的头文件,但是它可以...

           原创文章,转载请注明出处,谢谢!       
           作者:清林,博客名:飞空静渡

     

    #include


    如果从纯粹的text文件来说,#include的作用就是搜索它后面指示的文件,并把这个文件的内容加到当前的文件中。一般我们编程时,都是包含一些与.h为后缀的头文件,但是它可以包含任何后缀的任何形式的text文件的,而不仅仅是.h为后缀的头文件。

    #include有两种形式,例如如下:

    #include <syshead.h>
    #include "userhead.h"
    用尖括号表示的是包含系统的头文件,用双引号包含的是用户自己的头文件。

     

    下面是使用#include时的一些规则:

    1)使用<>包含的头文件一般会先搜索-I选项后的路径(即用gcc编译时的-I选项),之后就是标准的系统头文件路径。

    2)而用""号包含的头文件会首先搜索当前的工作目录,之后的搜索路径才是和<>号包含的头文件所搜索的路径一样的路径。

    3)在unix系统中,一般标准的头文件路径为:

    /usr/local/include
    /usr/lib/gcc-lib/target/version/include
    /usr/target/include
    /usr/include
    4)一般有两条独立的头文件搜索路径链。一条是-I后面指示的路径,另一条是系统头文件路径和以-prefix, -withprefix,和-idirafter后操作的目录。

    5)如果gcc编译的是c++的程序,那么在搜索上面所说的目录前,预处理器会首先搜索/usr/include/g++v3目录,v3是你的gcc中c++的版本。

    6)在头文件中运行增加路径名,例如:#include <sys/time.h>,那么就会在搜索的系统目录的sys目录下寻找time.h文件。

    7)一般会用斜线来作为目录的分割符,甚至有些系统使用不同的字符作为分割符(例如反斜线)。

    8)#include后面所包含的文件名就是文件名,例如abc*d.h这个文件,必须就要有abc*d.h这个文件,而不是abckkkd.h这些文件,*不能解释成任  

        何的字符的意思,而是实实在在的一个字符。

    9)可以使用一个指定的名字作为#include指令后面的头文件,例如:

    #define BOGHEADER "bog_3.h"
    #include BOGHEADER
    10)在#include 指令的后面,除了所包含的头文件和注释外,不能包含其它的任何东西了。

    11)#line指令不能改变当前的工作目录。

    12)-I-选项可以改变-I指定的搜索目录。


    #include_next

     

    #include_next是GNU的一个扩展,并不是标准C中的指令。

    #include_next看起来有些复杂,但在这里我将详详细细的说明一下,希望可以把它讲的清楚,让读者了解 :)

     

    首先,我将会说明一下这条指令的功能,然后说明一下为什么要引人这条指令,希望能说个明白。

    #include_next和#include指令一样,也是包含一个头文件,它们的不同地方是包含的路径不一样。

    #include_next的意思就是“包含指定的这个文件所在的路径的后面路径的那个文件”,听起来是不是很坳口,我自己也觉得是这样,但下面举个例子说明就清楚了。

    例如有个搜索路径链,在#include中,它们的搜索顺序依次是A,B,C,D和E。在B目录中有个头文件叫a.h,在D目录中也有个头文件叫a.h,如果在我们的源代码中这样写#include <a.h>,那么我们就会包含的是B目录中的a.h头文件,如果我们这样写#include_next <a.h>那么我们就会包含的是D目录中的a.h头文件。#include_next <a.h>的意思按我们上面的引号包含中的解释来说就是“在B目录中的a.h头文件后面的目录路径(即C,D和E)中搜索a.h头文件并包含进来)。#include_next <a.h>的操作会是这样的,它将在A,B,C,D和E目录中依次搜索a.h头文件,那么首先它会在B目录中搜索到a.h头文件,那它就会以B目录作为分割点,搜索B目录后面的目录(C,D和E),然后在这后面的目录中搜索a.h头文件,并把在这之后搜索到的a.h头文件包含进来。这样说的话大家应该清楚了吧。

     

    还有一点是#include_next是不区分<>和""的包含形式的。

     

    现在来说说为什么要引人这条指令!

    假如,你要创建一个新的头文件,而这个新的头文件和现在已有的头文件有相同的名字,而且你想用你的这个新的头文件,那么你要做的就是把这个新的头文件放在#include指令的搜索路径的前面,即是在旧的头文件的前面新的头文件首先被搜索到,这样你就可以使用你这个新的头文件。但是你在另一个源代码文件中想使用旧的头文件了,那怎么办!有个办法就是使用绝对路径来搜索,那么就不存在这样的问题了。问题出在,如果我们把头文件的位置移动了,移到了其它的目录里了,那我们就得在相应的源码文件中修改这个包含的绝对路径,如果一个源码文件还好,但如果是大型工程的话,修改的地方多了就容易出问题。

    又进一步说,如果你这个新的头文件引用了旧的头文件,而这个新的头文件如果没有使用只编译一次的预处理语句包含(即#ifndef,#endif等),那么就会陷入一个无限的递归包含中,这个新的头文件就会无限的包含自己,就会出现一个致命的错误。如果我们使用#include_next就会避免这样的问题。

    在标准的C中,这没有一个办法来解决上面的问题的,因此GNU就引人了这个指令#include_next。

     

    下面再举一个#include_next的例子。

    假设你用-I选项指定了一个编译包含的路径 '-I /usr/local/include',这个路径下面有个signal.h的头文件,在系统的'/usr/include'下也有个signal.h头文件,我们知道-I选项的路径首先搜索。如果我们这样 #include <signal.h> 包含,就会包含进/usr/local/include下的signal.h头文件;如果是 #include_next <signal.h>,就会包含 '/usr/include'下的signal.h头文件。

    GNU建议一般没有其它可取代的办法的情况下才使用#include_next的。

     

    又一个例子,如在系统头文件stdio.h中,里面有个函数(应该说是一个宏)getc,它从标准输入中读取一个字符。你想重新定义一个getc,并放到自己新建的stdio.h文件中,那么你可以这样使用你自定义的getc。

    #include_next "stdio.h"
    #undef getc
    #define getc(fp) ((int)'x')

     

    更多的说明请参考GNU的官方文档和GCC文档。

     

    展开全文
  • iOS #include与#import的区别

    千次阅读 2015-03-06 09:19:40
    #include  #import  @class  讲解   #include 区分 #include#include "x.h"的作用 #include :它用于对系统自带的头文件的引用,编译器会在 系统文件目录下去查找该文件. #include "x.h":用户...

    #include  #import  @class   讲解  

    #include

    区分 #include <x.h>#include "x.h"的作用
    #include <x.h>:它用于对系统自带的头文件的引用,编译器会在

    系统文件目录下去查找该文件.
    #include "x.h":
    用户自定义的文件用双引号引用,编译器首先会

    在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。

    在使用#include的时候要注意处理重复引用(这也是objc#include#import的区别)

    例如:ClassA ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.

    我们可以:#ifndef _CLASSC_H#define _CLASSC_H

    #include "ClassC"

    #endif这样处理在编译时就不会有重复引用的错误出现(在objc

    #import解决了这个问题,这是它们的区别)#import

    #import 大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理.

    @class

    主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在@class仅仅只是声明一个类,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息。

    综上所述#include,#import@class的区别可以做一下理解:

    #include#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.比如有100个类都#importClassA,那么在编译的时候这100个类都会去对ClassA处理.又比如AB引用,BC引用,CD引用.....此时如果A被修改,那么后面的B,C,D.....都需要重新进行编译.还有一个用法会引起编译错误的就是在ClassA#import ClassB ClassB#import ClassA那么在编译的时候也会出现未知错误。

    所以一般来说,在 interface 中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个 interface 的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要 import

    这个在@class 中声明的类。 

    展开全文
  • C语言中,#include的用法:#include "" 和 #include 采用 " ":依次搜索当前目录、包括/I编译开关的路径、包括INCLUDE环境变量的路径 采用 The #include Directive The #include ...
  • #include file和#include virtual的区别

    千次阅读 2009-06-28 23:05:00
    简单来说,#include file后面跟的是文件的“相对路径”, #include virtual后面跟的是文件的“绝对路径”。这里说的“相对路径”是相对于“主调文件”所在的文件夹。  #include file #include file后面跟的是文件的...
  • C/C++ #include<> 和 #include""的区别

    千次阅读 2017-03-22 22:00:00
    使用#include"" 程序会会先从当前目录中找文件,如果找不到会再到标准函数库中找文件所以,一般情况下我们引用标准函数库中的头文件时,用#include能有更高的效率,但是其实它的查找顺序非常严格:1.#include<>1....
  • c/c++中#include#include""区别

    万次阅读 2014-04-10 19:43:52
    而""首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于include自定义的头文件,让系统优先使用当前目录...When writing your C program, you can include files in two ways. The first way is to
  • #include stdio.h #include cstdio

    千次阅读 2008-02-20 08:32:00
    问:#include #include应该是向程序中引入了两个不同的库,这两个不同的库都有printf,编译器应该不知道调用哪个printf的,应该报错的,为什么没有报错呢。最佳答案:显然你的printf是中的,要引用的这个函数应该这么...
  • #include《stdlib.h》作用

    千次阅读 2018-10-29 21:08:33
    是引用stdlib.h头文件,即#include &lt;stdlib.h&gt;。这里的.h是不可缺少的。 stdlib.h中,包含了C语言的一些常用库函数。如 动态内存相关的malloc, realloc,zalloc,calloc,free等。 随机数相关的ra...
  • 答:"#include ” 用于标准库文件或系统提供的头文件,到保存系统标准头文件的位置查找头文件。 而"#include "userdefined.h"用于用户自定义的头文件,先从当前目录查找是否有指定名称的头文件,若当前目录未找到该...
  • #include<> 和 #include""的区别

    万次阅读 多人点赞 2016-03-16 15:07:37
    #include编译程序会先到标准函数库中找文件 #include”file” 编译程序会先从当前目录中找文件参考原文 转: 在C程序中包含文件有以下两种方法: (1)用符号“<”和“>”将要包含的文件的文件名括起来。这种方法...
  • #include《》和 #include”” 的区别

    千次阅读 2018-05-19 20:39:57
    #include&lt; &gt; 和 #include” ” 的区别一、#include&lt; &gt; #include&lt; &gt; 引用的是编译器的类库路径里面的头文件。 假如你编译器定义的自带头文件引用在 C:\Keil\c51\INC\ ...
  • #include和#import "" 和@class区别讲解

    千次阅读 2016-02-15 11:08:52
    iOS include和import
  • #include#include"filename.h"的区别

    千次阅读 2015-01-25 18:15:50
    对于#include,编译器先从标准库路径开始搜索filename.h,然后从本地目录搜索,使得系统文件调用较快。而对于include"filename.h",编译器先从用户的工作路径开始搜索filename.h,后去寻找系统路径,使得自定义文件...
  • #include#include"file.h"的区别

    千次阅读 2015-01-22 09:33:08
    对于这种问题先来看一看外国人怎么想的,因为本来这种语言就是他们创造的,...What is the difference between #include and #include “file”? When writing your C program, you can include
  • #include<string> 与#include<string.h>

    千次阅读 2015-09-15 10:57:02
    1、使用string对象时,必须头文件(#include) 和 命名空间(using namespace std;或using std::string;) 2、#include#include的升级版 3、使用strcmp(),strcpy()等函数,需添加#include#include 已在VC验证...
  • #include #include <>:通常是对系统库文件的引用,编译器会去系统文件目录下查找。 那么这就会导致了头文件循环引用的问题了,通常都是出现虽然你导入了该头文件,但在使用时比如使用`@propery(nonatomic)A *a;`会...
  • #import和#include的区别 (1)使用场合不同  #import是导入Objective-C头文件的关键词,#include是导入C/C++头文件的关键词 (2)重复引用  使用#include需要处理重复引用,#import能防止同一个文件被多次包含,则...
  • #include<>和#include"

    万次阅读 多人点赞 2018-09-28 23:14:34
    C语言中两种方式使用#include命令, #include &lt;&gt;与#include ””的区别一种是在包含指令#include后面”&lt;&gt;”将头文件名括起来。这种方式用于标准或系统提供的头文件,到保存系统标准...
  • #include是c/c++导入头文件的关键字,#import 是oc导入头文件的关键字,#import会自动导入一次,不会重复导入,不会引起交叉编译, #import #import"":用户自定义的文件用双引号引用,编译器首先会在用户目录...
  • #include XXXXX 表示包含C/C++文件 ,该指令不仅局限于.h 头文件,可以包含任何编译器能识别的C/C++代码文件, 包括.c,.hpp,.cpp,.hxx,.cxx等,甚至.txt,.abc等等都可以。 #include 包含系统头文件, 在标准库...
  • 1. #include 可能会引起重复引用。 如:ClassA ClassB 都引用了Class C, Class D
  • #include用法

    万次阅读 2018-03-20 19:58:11
    #include 的使用说明 #include 的使用说明 #include叫做“文件包含”。它的功能是用来指定文件的全部内容替换程序中的命令行,从而使指定的文件与当前源文件连成一个源文件。 有如下两种...
  • #include<*.h> 直接从编译器自带的函数库中寻找文件,编译器从标准库路径开始搜索*.h #include"*.h" 是先从自定义的文件中找 ,如果找不到在从函数库中寻找文件,编译器从用户的工作路径开始搜索 *.h 采用"&...
  • #include,#import,@import,@class 这四个指令在 ios (OC)开发中比较常见之所以共存,是因为四者有较大的区别,下面来一一详解。#include 熟悉 C 或者 C++ 的童鞋可能会知道,在 C 和 C++ 里,#include 是非常常见...
  • #include <string> 和 #include <string.h>

    千次阅读 2016-04-26 13:24:42
    #include <string> 和 #include <string.h> 区别
  • #include time.h和 #include sys/time.h的区别

    千次阅读 2014-12-29 20:58:05
    相同点: 二者都是与 日期时间相关的 头文件。 不同点:  time.h 是c99的,也就是c的库函数。  sys/time.h是linux系统的。 ...time.h既然是c库函数,那么在具体的平台上,就就可以依靠平台而实现,所以看上去是与平台...

空空如也

1 2 3 4 5 ... 20
收藏数 1,371,527
精华内容 548,610
关键字:

include