include(计算机专业术语)

生活百科 2023-01-25 16:55生活百科www.aizhengw.cn

include(计算机专业术语)

include是一个计算机专业术语,一指C/C++中包含头档案命令,用于将指定头档案嵌入源档案中。二指include 指令,在JSP中包含一个静态的档案,解析这个档案中的JSP语句。三指PHP语句。

基本介绍

  • 外文名include
  • 属于指令
  • 环境在JSP中包含一个静态的档案
  • 包含解析这个档案中的JSP语句。

命令

引言

做c/c++编程的对#include指令都不会陌生,绝大多数人也都知道如何使用,但我相信仍有人对此是一知半解的,
C:
#include <stdio.h>
C++:
#include <iostream>
表示包含C/C++标準输入输出头档案。包含指令不仅仅限于.h头档案,可以包含任何编译器能识别的C/C++代码档案,包括.c、.hpp、.cpp、.hxx、.cxx等,甚至.txt、.abc等等都可以。
预处理器发现 #include 指令后,就会寻找指令后面<>中的档案名称,并把这个档案的内容包含到当前档案中。被包含档案中的文本将替换原始码档案中的#include 指令, 就像你把被包含档案中的全部内容键入到源档案中的这个位置一样。

名词解释

preprocess
预处理为方便编译器处理而设定的一种机制,包括一些常用预处理指令和语句,我们统称为预处理系统。
如#include #define #if...#else...#endif #pragma等
这些指令的实现是由编译器来决定的(implementation specified)
提到预处理指令,顺便说一下头档案防止重複包含的2种方法
a.保护宏(暂且称为Macro guard 宏卫兵?):
#ifndef _ABCDE_H
#define _ABCDE_H
/
代码部分
/
#endif
在被包含过一次之后,宏_ABCDE_H已经有了,下次再碰到就会略过从#define _ABCDE_H开始到#endif之间的代码
还有一种特定编译器支持的指令
b.#pragma once
能保证该档案(物理上的)只被编译一次,也能起到防止重複包含的作用
但这2种方式是有区别的
a.Macro guard可移植性好,绝大多数编译器都支持,而且万一不小心拷贝了几分相同的代码也不会出问题,但你得确保这个宏名不会与其他的宏冲突,否则等编译器报出一大堆错误的时候你可能会觉得莫名其妙;
b.#pragma once指令简单,它能保证该档案(物理上的)只被编译一次,不用去费劲的想不同的宏名,但如果有几份该档案的拷贝,显然起不到作用。
declaration
声明指将一个名称引入当前编译单元,或者重新声明一个前面已经声明过的名称,声明指定了如何解释一个名称和该名称具有的属性;
例如
int main(void)
{
int a; // 声明了变数a,类型为int
int pa; // 声明了变数pa,类型为指向int型的指针类型
}
definition
定义除了以下情况,声明就是定义
a.声明函式但不包括函式体;
b.声明包含extern连结限定符,例如extern int a;
c.声明既没有初始化语法,也没有函式体;
d.类声明中声明静态数据成员;
e.类名字声明;
f.typedef声明;
g.using声明或者using指令;
以上情况适用于C具有的特徵,C++则完全适用,定义要为其对象分配或预留存储空间,而声明则不用。
translation unit
编译单元一个源档案,.c .cpp等和它所包含的档案一起,在经过预处理之后形成一个源码档案,标準称之为translation unit(编译单元)包括一系列的声明和定义;一个program(程式)由一个或多个编译单元组成。编译器将各个编译单元编译为目标代码(.obj),通过连线器(linker)将这些编译后的编译单元(即目标代码)连线成完整的指令序列(执行档、静态库、动态库等)。
one definition rule
一次定义规则是指定义在所有进入连线的编译单元中只能有一次。

观点、例子

A头档案只放声明
example_a.h
void function();
example_a.cpp:
#include "example_a.h"
void function()
{}
B.被包含的档案可以使用任意扩展名
只要是用符合标準的代码编写的文本档案,就可以使用#include来进行包含,包括.cpp .c等常见的源档案扩展名;
example_b_1.b
void function();
example_b_1.cpp:
#include "example_b_1.b"
void function()
{}
example_b_2.b
void function1();
void function2();
example_b_21.cpp:
void function1()
{}
example_b_22.cpp:
#include "example_b_1.b"
#include "example_b_21.cpp"
void function2()
{}
上面的例子中,example_b_21.cpp仅被包含在example_b_22.cpp中,不再被其他的档案包含,而且不加入工程中;
C.标準头档案的使用
最新的C++标準库中的一切内容都被放在名字空间std中(名字空间中的内容对外是不可见的),带来了一个新问题,无数现有的C++代码都依赖于使用了多年的伪标準库中的功能,如声明在<iostream.h>;等头档案中的功能,使用std包装标準库导致现有代码的不可用,为了兼容这种情况,标準委员会为包装了std的那部分标準库创建了新的头档案,新的头档案的档案名称与旧的一样,只是没有.h这个后缀,如<iostream.h>;就变成了<iostream>;。对于C头档案,採用同样的方法,但还在每个头档案名称前加了字元c,如<string.h>;就变成了<cstring>;,<stdio.h>;变成了<cstdio>;。最好使用新的档案头,使用新的档案头的C++程式,需要使用using namespace std或者using namespace std指定的类名,等方法来使需要的类对于我们的代码可视。

用法

#include后面有两种方式,<>;和""前者先在标準库中查找,查找不到在path中查找。后者为档案路径,若直接是档案名称则在项目根目录下查找

既然是经常使用的东西,我们就应该明白它的原理,减少编程时的困惑,提高编程的效率。

JSP命令

指令

Include 指令
在JSP中包含一个静态的档案,解析这个档案中的JSP语句.
JSP 语法
<%@ include file="relativeURL" %>
例子
include.jsp:
<html>
<head><title>An Include Test</title></head>
<body bgcolor="white">
<font color="blue">
The current date and time are
<%@ include file="date.jsp" %>
</font>
</body>
</html>
date.jsp:
<%@ page import="java.util." %>
<%= (new java.util.Date()).toLocaleString() %>
Displays in the page:
The current date and time are
Aug 30,1999 2:38:40

描述

<%@include %>;指命将会在JSP编译时插入一个包含文本或代码的档案,当你使用<%@ include %>;指命时,这个包含的过程就当是静态的。静态的包含就是指这个被包含的档案将会被插入到JSP档案中去,这个包含的档案可以是JSP档案,HTML档案,文本档案。如果包含的是JSP档案,这个包含的JSP的档案中代码将会被执行。
如果你仅仅只是用include 来包含一个静态档案。那幺这个包含的档案所执行的结果将会插入到JSP档案中放<% @ include %>;的地方。一旦包含档案被执行,那幺主JSP档案的过程将会被恢复,继续执行下一行.
这个被包含档案可以是html档案,jsp档案,文本档案,或者只是一段Java代码,你得注意在这个包含档案中不能使用<html>,</html>,<body>,</body>;标记,因为这将会影响在原JSP档案中同样的标记 ,这样做有时会导致错误.
有一些<%@ include %>;指命的行为是以特殊的JSP编译条件为基础,比如
这个被包含的档案必须对所有客户都有开放且必须f有效,或者它有安全限制
如果这个包含档案被改变,包含此档案的JSP档案将被重新编译
属性
file="relativeURL"
这个包含档案的路径名是指相对路径,不需要什幺连线埠,协定,和域名,如下
"error.jsp""/templates/onlinestore.html""/beans/calendar.jsp"
如果这个路径以"/"开头,那幺这个路径主要是参照JSP套用的上下关係路径,如果路径是以档案名称或目录名开头,那幺这个路径就是正在使用的JSP档案的当前路径.

php语句

include()语句包含并运行指定档案。
以下文档也适用于require()。这两种结构除了在如何处理失败之外完全一样。include()产生一个警告而require()则导致一个致命错误。换句话说,如果想在遇到丢失档案时停止处理页面就用require()。include()就不是这样,脚本会继续运行。也要确认设定了合适的 include_path。注意在 php 4.3.5 之前,包含档案中的语法错误不会导致程式停止,但从此版本之后会。
寻找包含档案的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。例如 include_path 是 .,当前工作目录是 /www/,脚本中要 include 一个 include/a.php 并且在该档案中有一句 include "b.php",则寻找 b.php 的顺序先是 /www/,然后是 /www/include/。如果档案名称以 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。
当一个档案被包含时,其中所包含的代码继承了 include 所在行的变数範围。从该处开始,调用档案在该行处可用的任何变数在被调用的档案中也都可用。不过所有在包含档案中定义的函式和类都具有全局作用域。
例子 16-5. 基本的include()例子
vars.php<?php$color = 'green';$fruit = 'apple';?>test.php<?phpecho "A $color $fruit"; // Ainclude 'vars.php';echo "A $color $fruit"; // A green apple?> 如果 include 出现于调用档案中的一个函数里,则被调用的档案中所包含的所有代码将表现得如同它们是在该函式内部定义的一样。所以它将遵循该函式的变数範围。
例子 16-6. 函式中的包含
<?phpfunction foo(){ global $color; include 'vars.php'; echo "A $color $fruit";}/ vars.php is in the scope of foo() so $fruit is NOT available outside of this scope. $color is because we declared it as global. /foo(); // A green appleecho "A $color $fruit"; // A green?>例子 16-7. 通过 HTTP 进行的include()
<?php/ This example assumes that is configured to parse .php files and not .txt files. Also, 'Works' here means that the variables $foo and $bar are available within the included file. /// Won't work; file.txt wasn't handled by as phpinclude '/file.txt?foo=1&bar=2';// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the// local filesystem.include 'file.php?foo=1&bar=2';// Works.include '/file.php?foo=1&bar=2';$foo = 1;$bar = 2;include 'file.txt'; // Works.include 'file.php'; // Works.?>相关信息参见使用远程档案,fopen()file()
因为include()require()是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括弧中)。
例子 16-8. include() 与条件语句组
<?php// This is WRONG and will not work as desired.if ($condition) include $file;else include $other;// This is CORRECT.if ($condition) { include $file;} else { include $other;}?>处理返回值可以在被包括的档案中使用return()语句来终止该档案中程式的执行并返回调用它的脚本。同样也可以从被包含的档案中返回值。可以像普通函式一样获得 include 调用的返回值。不过这在包含远程档案时却不行,除非远程档案的输出具有合法的 php 开始和结束标记(如同任何本地档案一样)。可以在标记内定义所需的变数,该变数在档案被包含的位置之后就可用了。
因为include()是一个特殊的语言结构,其参数不需要括弧。在比较其返回值时要注意。
例子 16-9. 比较 include 的返回值
<?php// won't work, evaluated as include(('vars.php') == 'OK'), i.e. include('')if (include('vars.php') == 'OK') { echo 'OK';}// worksif ((include 'vars.php') == 'OK') { echo 'OK';}?>注:在 php 3 中,除非是在函式中调用否则被包含的档案中不能出现 return。在此情况下return()作用于该函式而不是整个档案。
例子 16-10.include()return()语句
return.php<?php$var = 'php';return $var;?>noreturn.php<?php$var = 'php';?>testreturns.php<?php$foo = include 'return.php';echo $foo; // prints 'php'$bar = include 'noreturn.php';echo $bar; // prints 1?>$bar 的值为 1 是因为 include 成功运行了。注意以上例子中的区别。第一个在被包含的档案中用了return()而另一个没有。如果档案不能被包含,则返回FALSE并发出一个 E_WARNING 警告。
如果在包含档案中定义有函式,这些函式可以独立于是否在return()之前还是之后在主档案中使用。如果档案被包含两次,php 5 发出致命错误因为函式已经被定义, php 在return()之后不会抱怨函式已定义。推荐使用include_once()而不是检查档案是否已包含并在包含档案中有条件返回。
另一个将 php 档案“包含”到一个变数中的方法是用输出控制函式结合include()来捕获其输出,例如
例子 16-11. 使用输出缓冲来将 php 档案包含入一个字元串
<?php$string = get_include_contents('somefile.php');function get_include_contents($filename) { if (is_file($filename)) { ob_start(); include $filename; $contents = ob_get_contents(); ob_end_clean(); return $contents; } return false;}?>要在脚本中自动包含档案,参见 php.ini 中的 auto_prepend_file 和 auto_append_file 配置选项。
注:由于这是一个语言结构而非函式,它无法被变数函式调用。

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有